gpt4 book ai didi

混合 AWT 和 SWT 时出现 Java UnsatisfiedLinkError?

转载 作者:行者123 更新时间:2023-12-01 17:40:35 24 4
gpt4 key购买 nike

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

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 中将其作为应用程序运行时,出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.awt.SunToolkit.getAppContext(Ljava/lang/Object;)Lsun/awt/AppContext; at sun.awt.SunToolkit.getAppContext(Native Method) at sun.awt.SunToolkit.targetToAppContext(Unknown Source) at sun.awt.windows.WComponentPeer.postEvent(Unknown Source) at sun.awt.windows.WComponentPeer.postPaintIfNecessary(Unknown Source) at sun.awt.windows.WComponentPeer.handlePaint(Unknown Source) at sun.java2d.d3d.D3DScreenUpdateManager.repaintPeerTarget(Unknown Source) at sun.java2d.d3d.D3DScreenUpdateManager.createScreenSurface(Unknown Source) at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source) at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source) at sun.awt.windows.WComponentPeer.setBounds(Unknown Source) at sun.awt.windows.WWindowPeer.setBounds(Unknown Source) at sun.awt.windows.WComponentPeer.initialize(Unknown Source) at sun.awt.windows.WCanvasPeer.initialize(Unknown Source) at sun.awt.windows.WPanelPeer.initialize(Unknown Source) at sun.awt.windows.WWindowPeer.initialize(Unknown Source) at sun.awt.windows.WFramePeer.initialize(Unknown Source) at sun.awt.windows.WComponentPeer.(Unknown Source) at sun.awt.windows.WCanvasPeer.(Unknown Source) at sun.awt.windows.WPanelPeer.(Unknown Source) at sun.awt.windows.WWindowPeer.(Unknown Source) at sun.awt.windows.WFramePeer.(Unknown Source) at sun.awt.windows.WToolkit.createFrame(Unknown Source) at java.awt.Frame.addNotify(Unknown Source) at java.awt.Window.show(Unknown Source) at java.awt.Component.show(Unknown Source) at java.awt.Component.setVisible(Unknown Source) at java.awt.Window.setVisible(Unknown Source) at HelloWorldSWT.main(HelloWorldSWT.java:20)

我做错了什么?

最佳答案

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

获得 UnsatisifiedLinkError 的一种方法是,如果您在另一个平台上使用 swt.jar —— 它们都被命名为“swt.jar”;例如,如果您下载适用于 Linux 的版本,然后尝试在 Windows 上使用它。该项目将编译正常,因为每个平台的所有 API 级代码都是相同的 Java,但运行时会失败,因为 native 库错误。

但是,由于本例中的错误发生在 AWT 中,因此可能是其他原因,与 SWT 没有直接关系。首先,确保您已下载 Windows SWT 版本。当您将其导入工作区时,它会创建一个名为 org.eclipse.swt 的 Eclipse 项目,其中包含 swt.jar。然后,您将 org.eclipse.swt 作为您的项目所需的项目,除了有效、干净的 JRE 之外,构建路径中没有其他任何内容(您可以尝试定义一个新的 [Window -> Preferences -> Java -> Installed JREs],或者只是使用您可能已安装的其他版本)。

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

java -cp bin;..\org.eclipse.swt\swt.jar HelloWorldSWT

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

关于混合 AWT 和 SWT 时出现 Java UnsatisfiedLinkError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com