Oberfläche verändern via TCP

Status
Nicht offen für weitere Antworten.

Nud3l

Gesperrter Benutzer
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?

Code:
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

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

Koringar

Bekanntes Mitglied
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.
Java:
label.getDisplay().asyncExec(new Runnable() {
			public void run() {
				if (!label.isDisposed()) {
					//Deine Änderung die du machen willst.
				}
			}
		});

Das sollte eigentlich funktionieren.

MfG
 

Nud3l

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

Java:
   PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
      public void run() {
            OcitsimulationSingleton.getInstance().updateObserver(knoten);
      }
  });
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben