# SWT-App läuft nicht unter OSX, unter Win aber problemlos



## gf (28. Sep 2010)

Hi,
ich hab ne SWT App geschrieben, die ich schon merfach unter Win problemlos getestet habe. Hab die App nun an einem Bekannten weiteregegeben und bei ihm startet die Anwendung unter OSX nicht einmal.

Die Initialisierung des Displays sieht in etwa so aus (alles SWT-unrelevante habe ich entfernt):

[Java]public class Main {
	public static void main(String[] args) {
		Core.startUp();
	}
}[/Java]
[Java]public class Core {
	public static void startUp() {
		MainWindow mainWindow;
		try {
			mainWindow = new MainWindow();
			mainWindow.init();
		} catch (Throwable t) {
			showErrorDialog(t.getMessage());
			t.printStackTrace();
			return;
		}
		mainWindow.open();
	}
}
[/code]

```
public class MainWindow {
	private Shell shell;
	private Display display;

	public MainWindow() {
		display = new Display();
		shell = new Shell(display, SWT.CLOSE | SWT.MIN);

		shell.setImages(new Image[] {
				new Image(display, getClass().getResourceAsStream("images/ico_s.png")),
				new Image(display, getClass().getResourceAsStream("images/ico_l.png"))
		});
	}
}
```

Der Stacktrace sieht so aus:

```
***WARNING: Display must be created on main thread due to Cocoa restrictions.
org.eclipse.swt.SWTException: Invalid thread access
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.SWT.error(Unknown Source)
	at org.eclipse.swt.widgets.Display.error(Unknown Source)
	at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
	at org.eclipse.swt.widgets.Display.create(Unknown Source)
	at org.eclipse.swt.graphics.Device.<init>(Unknown Source)
	at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
	at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
	at MainWindow.<init>(Unknown Source)
	at Core.startUp(Unknown Source)
	at Main.main(Unknown Source)
```

Ich habe in vorherigen Versionen, die GUI immer in einem separaten Thread erstellt...nach dem ich allerdings utner OSX die Meldung (_Display must be created on main thread_) gelesen habe, habe ich das geändert. Bringt aber leider nix.

Hat mir jemand nen Tipp?


----------



## Gast2 (28. Sep 2010)

SWT hat für jedes OS ein anderes jar du musst also die richtige swt.jar mit ausliefern...


----------



## gf (28. Sep 2010)

Ja, das ist mir bekannt^^

Die swt.jar ist natürlich die plattform spezifische...


----------



## gf (28. Sep 2010)

Ich habs, mit dem Befehl


```
java -XstartOnFirstThread -jar xxx.jar
```

wird das Problem behoben.


----------

