Macos 为什么我们仍然在Mac上使用-XstartOnFirstThread VM选项获得SWT无效线程访问异常?

Macos 为什么我们仍然在Mac上使用-XstartOnFirstThread VM选项获得SWT无效线程访问异常?,macos,swt,Macos,Swt,我在做一个名为siafu的上下文模拟器, 只是第一步,尝试在Mac OSX 10.6.8上构建并运行它, 但我很困惑,它无法正常运行: ***WARNING: Display must be created on main thread due to Cocoa restrictions. Exception in thread "GUI thread" org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.

我在做一个名为siafu的上下文模拟器, 只是第一步,尝试在Mac OSX 10.6.8上构建并运行它, 但我很困惑,它无法正常运行:

***WARNING: Display must be created on main thread due to Cocoa restrictions.
Exception in thread "GUI thread" 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 de.nec.nle.siafu.graphics.GUI.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:680)

错误信息不是很清楚吗?在主线程中启动GUI线程,您就可以了。您好,这就是为什么我感到困惑,因为我在启动脚本中指定了-XstartOnFirstThread,只是您将
显示
初始化放在一个可运行状态中,而您已将其传递给
线程
-xstartonfirsthread
不会覆盖此选项,它会更改内部线程模型的行为。从调用
main()
的线程执行
Display
初始化。您好,非常感谢,我重新检查了代码,发现Display init没有在主线程内调用,主线程创建另一个线程并运行Display init。我修改了它并成功运行了。错误消息不是很清楚吗?在主线程中启动GUI线程,您就可以了。您好,这就是为什么我感到困惑,因为我在启动脚本中指定了-XstartOnFirstThread,只是您将
显示
初始化放在一个可运行状态中,而您已将其传递给
线程
-xstartonfirsthread
不会覆盖此选项,它会更改内部线程模型的行为。从调用
main()
的线程执行
Display
初始化。您好,非常感谢,我重新检查了代码,发现Display init没有在主线程内调用,主线程创建另一个线程并运行Display init。我修改了它并成功运行。
#!/bin/sh

if [ "$1" = "-h" ]; then echo "Syntax: $0 [SimulationJarFile]"; exit 1; fi
if [ -n "$1" ]; then SIMULATION="--simulation=$1"; fi

java -Xmx512m -XstartOnFirstThread -classpath \
lib/org.eclipse.swt.osx64.jar:\
Siafu.jar:\
lib/org.apache.commons.collections-3.2.1.jar:\
lib/org.apache.commons.configuration-1.6.0.jar:\
lib/org.apache.commons.lang-2.4.0.jar:\
lib/org.apache.commons.logging-1.1.1.jar \
de.nec.nle.siafu.control.Siafu $SIMULATION