SWT + Runtime.getRuntime.exec()

schwarzenegger

Grünschnabel
Hi,

ich möchte nach Betätigung eines Buttons (Bild oben) eine Konsole öffnen und einen Server und mehrere Clients starten.

Leider starten die Clients erst, wenn ich meine SWT Anwendung komplett schliesse.

Im mittleren Bild sieht man den Server bei dem 2 Clients angemeldet sind, aber rechts neben den Clients sollte nicht Processing Map, sondern Ready to Play stehen (wie im Bild 3 zu sehen).

Muss ich irgendeinen Outputstream flushen oder wie?

BRAUCHE DRINGEND HILFE.

Hier der Link zu den Bildern:
http://www.250kb.de/u/081212/j/4f2b114f.jpg

Hier mein Code wie ich den Server und die Clients aufrufe + SWT-Applikation:

Code:
package snippets;

import java.io.*;
import org.eclipse.jface.*;
import org.eclipse.swt.*;

public class WidgetWindow extends ApplicationWindow {
	
	private String[] serverCommand = {"cmd.exe", "/C", "AiServer.exe -start -var=STANDARD -lvl=20 -port=16713"};
	private String[] clientCommand = {"cmd.exe", "/C", "java -jar NICE.jar localhost 16713 Client"};

	public WidgetWindow(Shell shell) {
		super(shell);
	}

	protected Control createContents(Composite parent) {
		getShell().setText("Widget Window");
		parent.setSize(400, 250);
		FormLayout fl = new FormLayout();
		parent.setLayout(fl);
		Button bt = new Button(parent, SWT.PUSH);
		bt.setText("Starte Server und Clients");
		FormData fd = new FormData();
		fd.bottom = new FormAttachment(100, -5);
		fd.right = new FormAttachment(100, -5);
		bt.setLayoutData(fd);

		bt.addSelectionListener(new SelectionAdapter() {

			@Override
			public void widgetSelected(SelectionEvent arg0) {
				getShell().getDisplay().asyncExec(new Runnable() {

					@Override
					public void run() {
						try {

							Runtime.getRuntime().exec(serverCommand, null, new File("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\Diplomacy\\Server\\aiserver\\"));
				
							Runtime.getRuntime().exec(clientCommand, null, new File("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\"));

							Runtime.getRuntime().exec(clientCommand, null, new File("C:\\Dokumente und Einstellungen\\Administrator\\Desktop\\"));

						} catch (IOException e) {
							e.printStackTrace();
						}
					}

				});
			}

		});

		return parent;
	}

	public static void main(String[] args) {
		WidgetWindow wwin = new WidgetWindow(null);
		wwin.setBlockOnOpen(true);
		wwin.open();
		Display.getCurrent().dispose();

	}
}
 
Zurück