我是一名 Java 新手,刚刚通过 eclipse Juno 使用 SWT 制作了一个简单的 Java 程序,用于 GUI。代码可以运行,程序可以在 eclipse 中运行,因此我对其进行了编译并将其制作成可运行的 jar 文件,以便可以在 eclipse 之外运行。我尝试使用终端运行它,但出现了此错误。
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
no swt-gtk-4233 in java.library.path
no swt-gtk in java.library.path
Can't load library: /home/abody/.swt/lib/linux/x86_64/libswt-gtk-4233.so
Can't load library: /home/abody/.swt/lib/linux/x86_64/libswt-gtk.so
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:331)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
at org.eclipse.swt.internal.C.<clinit>(C.java:21)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
at org.eclipse.swt.widgets.Display.<clinit>(Display.java:133)
at Class1.main(Class1.java:12)
所以现在看起来好像找不到libswt-gtk-4233.so
另一个文件。但是,当我查看文件夹时.swt
,却没有libswt-gtk-3740.so
找到4233
。
因此它试图找到一个更新的文件。那么这意味着什么?我应该更新 SWT 吗?发生了什么?
答案1
您需要创建一个指向/usr/lib/jni
目录中的 swt so 文件的符号链接。我在这个网站上找到了一个解决方案:Eclipse 无法加载 SWT 库。
使用此命令:
ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
答案2
所以现在看起来它找不到 libswt-gtk-4233.so 和其他文件。但是,当我查看 .swt 文件夹时,我发现是 libswt-gtk-3740.so,而不是 4233。
插件本身就有这些库。
在您的项目中单击鼠标右键:
-> 属性 ->构建路径
进入 Java Build Path 窗口后,项目的选项卡包含 org.eclipse.swt.%GUI%.%PLATFORM%
(您导入的项目)
单击展开。
编辑本机库位置。
选择工作区,然后选择整个项目 org.eclipse.swt.%GUI%.%PLATFOM%
按确定,您就完成了!
关于:
..所以我编译了它并将其制作成可运行的 jar 文件,以便它可以在 eclipse 之外运行。我尝试使用终端运行它,但出现了此错误。
我不知道您是如何在 Eclipse 中而不是在终端中运行的。所以,我以为您是想在另一个平台上执行此操作。对于新手(像我一样),请阅读 wiki:
标准小部件工具包
..调用 SWT 的程序是可移植的,但是该工具包的实现(尽管其中一部分是用 Java 编写的)对于每个平台都是独一无二的……
SWT 必须移植到每个需要支持的新 GUI 库。与 Swing 和 AWT 不同,SWT 并非在每个 Java 支持的平台上都可用,因为 SWT 不是 Java 版本的一部分...
由于每个平台的 SWT 实现都不同,因此必须随每个应用程序分发特定于平台的 SWT 库(JAR 文件)。
因此,如果您想将项目导出到特定平台,您必须在该平台上打开 IDE,重复导入插件,但这次针对该平台,从 -build path- 中删除不相关的项目(而不是删除项目)。现在,您可以为该特定平台进行编译。
如果您从一个平台切换到另一个平台,当您开发项目时,只需编辑构建路径并删除那里不相关的项目。