# Eclipe RCP-Application oder Plugin Einstieg



## memo5 (13. Jul 2010)

Hallo!

Ich möchte Eclipse erweitern um Statusinformationen von einem Mikrocontroller einzublenden. Schlußendlich sollte über Sockets Daten gesendet und diese in Eclipse angezeigt werden. Am besten in einem neuen Reiter neben "Error Log", "Tasks", "Problems", "Console".

Benötige ich hierfür bereits eine RPC Application, oder geht das auch mit einem Plugin?

Welche Klasse muß ich erweitern um dort ein neues Fenster einzubauen? Wie kann ich das herausfinden?

Momentan bin ich bei diesem Teil leider noch nicht weitergekommen, hoffe aber dass mir hier ein paar Tipps gegeben werden können.

lg,
Memo


----------



## nocturne (13. Jul 2010)

Das geht sogar als Plug-In.
Du meinst vermutlich ein neues "View".

Zuerst solltest du dich vertraut machen mit den Plugin Development. Du kannst ein neues Projekt erstellen als "Plugin-Projekt" damit hast du einen Bausatz.


----------



## Wildcard (13. Jul 2010)

> Benötige ich hierfür bereits eine RPC Application, oder geht das auch mit einem Plugin?


Die Eclipse IDE zB ist ein Eclipse RCP. Die J2EE Distribution ist ein anderer RCP. Die PHP IDE ist ein anderer RCP. Sie alle bestehen aus plugins. 
Ein Plugin musst du also egal wie schreiben. Die Frage RCP oder nicht kannst du dir einfach beantworten in dem du dich Fragst: Möchte ich eine Standalone Anwendung erstellen oder ein Werkzeug für eine bestehende Anwendung bereitstellen.

Wenn du ein neues Plugin Projekt anlegst kannst du zwischen verschiedenen Templates wählen. Eines davon sollte zeigen wie man eine neue View anlegt.


----------



## memo5 (14. Jul 2010)

Ok, das mit dem Plugin schreiben ist jetzt einigermassen klar.
Ich habe auch schon ein view, allerdings kann ich damit nicht viel machen. Ich habe eine Tabelle eingefügt (in public void createPartControl(Composite parent) ) und möchte diese jetzt laufend mit Inhalten aus einer Socket-Verbindung füllen / aktualisieren. Das Problem ist aber dass ich keinen eigenen Thread aufmachen kann der den Socket CLient beinhaltet und daraus auf den View zugreifen (Erzeugt eine SWT Exception).
Wie könnte ich das machen? Der Socket Client sollte ständig im Hintergrund laufen und Daten empfangen. Sind neue Daten angekommen so sollten sie in die Tabelle. Das Problem ist dass sich die Mehtode createPartControl beenden muß bevor der View aktiv wird.

lg


----------



## Wildcard (14. Jul 2010)

Doch, du kannst eigene Threads aufmachen. Wie in Swing darfst du die Oberfläche aber nur aus dem Dispatcher Thread aktualisieren und wie in Swing musst du daher die Threads synchronisieren. Bei Swing geht das mit SwingUtilities#invokeLater, bei SWT ist es Display#asyncExec


----------



## memo5 (16. Jul 2010)

Danke für die Antwort. Es scheint nicht ganz das zu sein was ich suchte, zumindest funktioniert es noch nicht zufriedenstellend.
Das habe ich in meinem Plugin implementiert:

```
public void createPartControl(Composite parent) {
		final Display DISPLAY = Display.getDefault();
   DISPLAY.asyncExec(new Runnable() {

		// Create the Tree viewer
        	   tree = new Tree(parent, SWT.BORDER);
	           TreeItem item1 = new TreeItem(tree, SWT.NONE, 0);

                // Start SocketClient
		public void run() {
			String text;
			socket = new SocketThread();
	   		item1.setText(socket.run());

		}
	}
	);
```

Der View wird komplett gestartet, allerdings ist Eclipse (die UI) blockiert bis SocketThread geschlossen wird. SocketThread sollte aber die gesamte Zeit (solange der View offen ist) Daten empfangen. Wie kann ich das machen?

lg


----------



## memo5 (16. Jul 2010)

Ich habe momentan die Lösung selbst gefunden auf
Obscured Clarity: Updating a Widget in an Eclipse RCP Application from a Worker Thread

Danke für deine Hilfe.
lg


----------

