Mac OSX 上的 SWT 线程访问无效 (Eclipse Helios)

发布于 2024-12-12 04:39:10 字数 1505 浏览 0 评论 0原文

我有所有简单 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怪我鬧 2024-12-19 04:39:10

启动应用程序时,您需要使用 -XstartOnFirstThread 开关。 SWT 常见问题解答中的这个问题解释了原因。

You need to have the -XstartOnFirstThread switch when starting the application. This question on the SWT FAQ explains the reasons.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文