# Oberfläche verändern via TCP



## Nud3l (12. Aug 2009)

Ich habe  folgendes Problem ich möchte von einen anderen Rechner mein Eclipse plugin 
verändern die Änderung usw. bekomme ich auch mit, nur habe ich Probleme mit SWT. 
Hier ist der Fehler einer eine Idee wie man das um gehen kann?


```
2009-08-12 15:01:22.473 CEST sbh.ocit.clientServer.OcitTcpServer: New PNP connection Thread[0,6,TCP-PNP] socket 
[#0, 154.2.9.60, port=2758, localport=3110] is established (#0). Incoming PNPconnection count is 1.
2009-08-12 15:03:04.552 CEST sbh.ocit.btppl.BtpplPacket: Exception getting btppl password, default will be used! (ZNR: 1 FNR: 5 OperatorDomain: domain)
2009-08-12 15:03:04.584 CEST sbh.ocit.clientServer.OcitTcpServerThread: run: unexpected exception Thread[0,6,TCP-PNP] socket 
[#0, 154.2.9.60, port=2758, localport=3110]: terminating.:
org.eclipse.swt.SWTException: Invalid thread access
	at org.eclipse.swt.SWT.error(SWT.java:3884)
	at org.eclipse.swt.SWT.error(SWT.java:3799)
	at org.eclipse.swt.SWT.error(SWT.java:3770)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
	at org.eclipse.swt.custom.CCombo.select(CCombo.java:1332)
	at sbh.ocit.mockups.editor.Knoteneditor.updateKnotenData(Knoteneditor.java:1004)
	at sbh.ocit.mockups.editor.Knoteneditor.update(Knoteneditor.java:985)
	at java.util.Observable.notifyObservers(Observable.java:142)
	at sbh.ocit.mockups.model.OcitsimulationSingleton.updateObserver(OcitsimulationSingleton.java:401)
	at sbh.ocit.mockups.ocitsimulation.ZentralenSchaltwunschImpl.SchalteSigProgEin(ZentralenSchaltwunschImpl.java:54)
	at sbh.ocit.odg.ZentralenSchaltwunsch.service(ZentralenSchaltwunsch.java:125)
	at sbh.ocit.clientServer.ObjectContainer.localCall(ObjectContainer.java:170)
	at sbh.ocit.clientServer.OcitTcpServerThread.run(OcitTcpServerThread.java:114)

2009-08-12 15:03:04.584 CEST sbh.ocit.clientServer.OcitTcpServerThread: run: ending Thread[0,6,TCP-PNP] socket [#0, 154.2.9.60, port=2758, localport=3110]
```


----------



## Wildcard (12. Aug 2009)

Nur der SWT Thread darf die Oberfläche ändern (wie bei Swing). Du brauchst Display#asyncExec


----------



## Koringar (12. Aug 2009)

Hi,

du hast bestimmt Versucht über einen Hintergrundthread die API zu ändern. Und das geht ohne eine Sync mit der API selber nicht.

Am besten lässt du die das Display von deiner Componente geben, was du ändern willst z.B. CLabel oder Text.

```
label.getDisplay().asyncExec(new Runnable() {
			public void run() {
				if (!label.isDisposed()) {
					//Deine Änderung die du machen willst.
				}
			}
		});
```

Das sollte eigentlich funktionieren.

MfG


----------



## Nud3l (12. Aug 2009)

oh Danke das war ja ganz einfach habe einfach mein Eclipse genommen und damit den Runnable gestartet. 


```
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
      public void run() {
            OcitsimulationSingleton.getInstance().updateObserver(knoten);
      }
  });
```


----------

