我将SWT窗口添加到我的项目中

public class swtUI {
    protected Shell shell;
    protected Display display;

    public static void launch() {
        try {
            swtUI window = new swtUI();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void open() {
        display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();

        // create all controls
        blablabal
    }
}

并在main()中将其调用为

public static void main(String[] args) {
    swtUI.launch();
    System.out.println("\nComplete");   
}

在Linux上运行没问题。 但是,当我用maxos swt.jar替换linux swt.jar并在mac上运行时,出现异常:

    ***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 org.eclipse.swt.widgets.Display.getDefault(Unknown Source)
    at edu.rockefeller.casanovaLab.csvCheck.CsvSuiteGUI.open(CsvSuiteGUI.java:129)
    at edu.rockefeller.casanovaLab.csvCheck.CsvSuiteGUI.launch(CsvSuiteGUI.java:119)
    at edu.rockefeller.casanovaLab.csvCheck.Program.main(Program.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

我对SWT很陌生。 我应该如何更改代码以使其在Mac上运行?

谢谢

#1楼 票数:1 已采纳

似乎在FAQ中提到了这一点 从同一链接:

要变通解决此问题,您必须将-XstartOnFirstThread选项传递给java可执行文件,如下所示:

java -XstartOnFirstThread -cp swt.jar:. ControlExample

  ask by Mavershang translate from so

未解决问题?本站智能推荐:

1回复

SWT窗口可在Linux上运行,但不能在Mac上运行

我将SWT窗口添加到我的项目中 并在main()中将其调用为 在Linux上运行没问题。 但是,当我用maxos swt.jar替换linux swt.jar并在mac上运行时,出现异常: 我对SWT很陌生。 我应该如何更改代码以使其在Mac上运行? 谢谢
2回复

在Mac上正确运行基于SWT的跨平台jar

我一直致力于基于SWT的项目,该项目旨在部署为Java Web Start,因此可以在多个平台上使用。 到目前为止,我已设法解决由于SWT所依赖的系统特定库所引起的导出问题(参见相关主题 )。 生成的jar似乎可以在32/64位linux和64位窗口上正常工作,但是在具有以下输出的Mac
1回复

从Mac上的SWT应用程序打开LWJGL窗口

我有一个SWT应用程序,按下按钮后打开一个OpenGL窗口(使用LWJGL库)。 它应该关闭它的主要SWT窗口并打开一个带有OpenGL上下文的新窗口。 适用于Windows。 在Mac上,我收到此错误: SWT窗口关闭然后应用程序挂起,没有打开窗口。 看起来SWT应用程序没
2回复

Mac上的SWT问题

我有一个使用SWT UI的Java项目,但在将其部署到任何Mac OS X计算机上时遇到了麻烦。 从Eclipse内或jar文件中运行该程序时,它本身在Windows上都能完美运行。 在Mac上,该程序在Eclipse中也可以正常运行,但是当我尝试从jar文件运行该程序时,出现以下错误:
1回复

带列的SWT树:在Linux / Mac上删除行的交替背景色

我正在用列(看起来像表)为树的某些列着色。 在Windows系统上看起来不错,但在Linux / Mac上则不是,因为它们使用交替的背景色(白色,蓝色,白色,蓝色等)。 我想删除树的交替背景色。 有什么想法吗? 我试图在这些系统上禁止tree.setLinesVisible(true)
1回复

SWT:在Windows中运行在OSX上开发的应用程序

我有一个在OSX上开发的SWT应用程序,因此它包含Mac版本的SWT库。 现在,我需要在Windows计算机上运行此应用程序。 我将应用程序导出到.jar文件,但是当我尝试在Windows中执行jar时,得到: 我已经添加了Windows版本的SWT库,但是并没有什么不同。 我
1回复

使用Java Web Start在Mac上启动SWT

目标:使用Java 7在Mac上启动SWT Web Start应用程序 为了在Mac OS X上运行SWT RCP应用程序,有充分的文档证明,有必要将-XstartOnFirstThread作为Java虚拟机参数的一部分包括在内 。 不幸的是,Java Web Start似乎正在删除
2回复

OS X上的SWT:没有窗口的菜单

在OS X上,如果关闭最后一个窗口,则该应用程序仍处于活动状态,并且如果处于焦点状态,则显示菜单栏(无任何窗口)。 证明此行为的最简单的SWT示例代码是什么? 提前致谢。
5回复

美化Mac上的SWT应用程序

SWT旨在实现跨平台,因此可以在Mac上运行。 问题是它承认了麦克兰的主要罪行 - 它是UGLY。 工具栏看起来不像Mac工具栏,状态栏看起来不像Mac状态栏等。 有没有人有任何使SWT应用程序看起来更像Mac应用程序的经验? 例如,通过SWT中的“OS”类进行特定于平台的JNI调用
1回复

SWT:无法在Mac上调整按钮的大小

我正在使用SWT开发Java应用程序,其中包含一些带有图像的按钮。 在我的Windows计算机上,按钮将自动变大到足以显示按钮中的整个图像。 我在Mac上尝试过此操作,但是按钮的高度不足以适合整个图像。 我尝试在按钮上使用setsize()函数手动设置大小,但是每当我在按钮的父对象上调