Mac OSX 上的 SWT 线程访问无效 (Eclipse Helios)
我有所有简单 SWT 程序中最简单的一个(它甚至还没有显示 hello world):
package com.samples.swt.first;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Main {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
当我从 Eclipse Helios 在 Mac OSX 上运行此程序时,出现以下错误:
***警告:由于 Cocoa 限制,显示必须在主线程上创建。
线程“main”org.eclipse.swt.SWTException 中的异常: org.eclipse.swt.SWT.error(SWT.java:4282) 处的线程访问无效 org.eclipse.swt.SWT.error(SWT.java:4197) 在 org.eclipse.swt.SWT.error(SWT.java:4168) 在 org.eclipse.swt.widgets.Display.error(Display.java:1065) 在 org.eclipse.swt.widgets.Display.createDisplay(Display.java:822) 在 org.eclipse.swt.widgets.Display.create(Display.java:805) 在 org.eclipse.swt.graphics.Device.(Device.java:130) 在 org.eclipse.swt.widgets.Display.(Display.java:696) 在 org.eclipse.swt.widgets.Display.(Display.java:687) 在 com.samples.swt.first.Main.main(Main.java:8)
据我所知,我做的一切都是正确的。为什么我会收到此错误?它说 Display
必须在主线程上创建,据我所知,它是在主线程上创建的。然后继续讨论线程“main”中的异常
...
编辑:
错误现在消失了,我从使用swt-debug.jar切换过来
到 swt.jar
。如果有人知道为什么调试 jar 会导致此错误,我很想知道......
I have the simplest of all simple SWT programs (it doesn't even display hello world yet):
package com.samples.swt.first;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Main {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
When I run this on Mac OSX from Eclipse Helios, I get the following error:
***WARNING: Display must be created on main thread due to Cocoa restrictions.
Exception in thread "main" org.eclipse.swt.SWTException:
Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4282) at
org.eclipse.swt.SWT.error(SWT.java:4197) at
org.eclipse.swt.SWT.error(SWT.java:4168) at
org.eclipse.swt.widgets.Display.error(Display.java:1065) at
org.eclipse.swt.widgets.Display.createDisplay(Display.java:822) at
org.eclipse.swt.widgets.Display.create(Display.java:805) at
org.eclipse.swt.graphics.Device.(Device.java:130) at
org.eclipse.swt.widgets.Display.(Display.java:696) at
org.eclipse.swt.widgets.Display.(Display.java:687) at
com.samples.swt.first.Main.main(Main.java:8)
As far as I can tell, I am doing everything correctly. Why am I getting this error? It says that Display
must be created on the main thread, and as far as I can tell it is being created on the main thread. It then goes on to talk about Exception in thread "main"
...
EDIT:
The error is gone now, I switched from using swt-debug.jar
to swt.jar
. If anybody knows why the debug jar causes this error I would love to know...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
启动应用程序时,您需要使用
-XstartOnFirstThread
开关。 SWT 常见问题解答中的这个问题解释了原因。You need to have the
-XstartOnFirstThread
switch when starting the application. This question on the SWT FAQ explains the reasons.