首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当UnsatisfiedLinkError和SWT混合时?

当UnsatisfiedLinkError和SWT混合时?
EN

Stack Overflow用户
提问于 2009-08-07 03:22:17
回答 4查看 2.7K关注 0票数 0

我是一个Eclipse新手,我正在尝试构建一个混合AWT/SWT应用程序。这是我的密码:

代码语言:javascript
运行
复制
public class HelloWorldSWT {

    public static void main(String[] args) {
        Frame frame = new Frame("My AWT Frame"); // java.awt.Frame
        frame.setLayout( new BorderLayout() );
        Canvas canvas = new Canvas(); // java.awt.Canvas
        frame.add(canvas, BorderLayout.CENTER);
        frame.setVisible(true);

        Display display = new Display(); // display object to manage SWT lifecycle.
        Shell swtShell = SWT_AWT.new_Shell(display, canvas);
        Button m_button = new Button(swtShell, SWT.PUSH);
        m_button.setText( "button" );

        // invoke the AWT frame rendering by making the frame visible
        // This starts the EDT
        frame.setVisible(true);

        // standard SWT dispatch loop
        while(!swtShell.isDisposed())
        {
            if(!display.readAndDispatch())
                display.sleep();
        }
        swtShell.dispose();
    }
}

这编译得很好,但是当我在Eclipse中作为应用程序运行它时,我会得到以下错误:

线程"main“中的sun.awt.SunToolkit.getAppContext(Ljava/lang/Object;)Lsun/awt/AppContext;异常:sun.awt.SunToolkit.getAppContext(Ljava/lang/Object;)Lsun/awt/AppContext;在sun.awt.windows.WComponentPeer.postEvent(Unknown源的sun.awt.SunToolkit.targetToAppContext(未知的源),在sun.awt.windows.WComponentPeer.handlePaint(Unknown的源(在sun.awt.windows.WComponentPeer.handlePaint(Unknown的源),在sun.java2d.d3d.D3DScreenUpdateManager.repaintPeerTarget(Unknown的源)(在sun.java2d.d3d.D3DScreenUpdateManager.createScreenSurface(Unknown的源).awt.windows.WComponentPeer.replaceSurfaceData(Unknown源)在sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown源)在sun.awt.windows.WComponentPeer.setBounds(Unknown源)在sun.awt.windows.WWindowPeer.setBounds(未知源)在sun.awt.windows.WCanvasPeer.initialize(Unknown源)在sun.awt.windows.WPanelPeer.initialize(未知源)在太阳。Awt.windows.WWindowPeer.initialize(未知源)在sun.awt.windows.WFramePeer.initialize(未知源)在sun.awt.windows.WComponentPeer(未知源)在sun.awt.windows.WCanvasPeer(未知源)在sun.awt.windows.WPanelPeer(未知源)在sun.awt.windows.WWindowPeer(未知源)在sun.awt.windows.WFramePeer(未知源)在sun.awt.windows.WToolkit (未知源)。createFrame(未知源) at java.awt.Frame.addNotify(未知源) at java.awt.Window.show(未知源) at java.awt.Component.show(未知源) at java.awt.Component.setVisible(未知源)在java.awt.Window.setVisible(未知源) at HelloWorldSWT.main(HelloWorldSWT.java:20)

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-07 18:59:17

从3.3版开始,SWT自动找到它所需的特定于平台的库,这些库位于swt.jar内部(在JAR内容的顶层)。所以,您所需要的只是类路径中的swt.jar,它可以工作。

获取UnsatisifiedLinkError的一种方法是在另一个平台上使用swt.jar --它们都被命名为"swt.jar";例如,如果您下载用于Linux的swt.jar,并尝试在Windows上使用它。该项目将编译OK,因为所有API级别的代码对于每个平台都是相同的Java,但是当您运行时它将失败,因为本机库是错误的。

但是,由于这种情况下的错误发生在AWT中,所以可能是其他的错误,与SWT没有直接关系。首先,确保下载了Windows版本。将其导入工作区时,它将创建一个名为org.eclipse.swt的swt.jar项目,该项目包含swt.jar。然后,您将org.eclipse.swt作为项目的必需项目,在构建路径中除了一个有效的、干净的JRE之外,没有其他任何东西(您可以尝试定义一个新的-> Preferences -> Java ->已安装的JRE,或者只使用可能已经安装的不同的JRE)。

您还可以从shell/命令窗口测试它。转到您的项目目录。该命令应该非常简单,如:

代码语言:javascript
运行
复制
java -cp bin;..\org.eclipse.swt\swt.jar HelloWorldSWT

我让您的代码运行(Vista-32,JDK 6_15),但是打开的窗口非常小,不能关闭。我对SWT桥一无所知,祝你好运.

票数 3
EN

Stack Overflow用户

发布于 2009-08-07 04:06:17

UnsatisfiedLinkError表示在尝试运行应用程序时找不到您所依赖的本机库。如果要在IDE中编译它,那么库就在您的构建路径中。如果您正在使用IDE运行该程序并获得此错误,则libray不在您的运行路径中。检查您的运行对话框,以确保您在构建路径中的库位于运行路径中。

票数 1
EN

Stack Overflow用户

发布于 2009-08-07 04:09:53

如前所述,这表明JVM找不到本机库。由于您混合了AWT/SWT,所以我假设JVM找不到SWT库(.dll表示windows,.so用于linux,不确定在mac上)。我倾向于使用一个系统属性来告诉java在哪里查找。

代码语言:javascript
运行
复制
-Djava.library.path=<absolute path to the .dll/.so that SWT needs>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1242722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档