[英]How to execute jar in Mac OS X using SWT/Eclipse?
我将Java更改为32位模式,以允许SWT运行,当我调试时,它运行良好。 但是当我使用Eclipse导出.jar时,它会显示此错误。
我已经添加了chmod 777.我做错了什么?
这是控制台结果:
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] Exception in thread "main"
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] at com.testing.SWTApp.main(SWTApp.java:54)
MANIFEST如下:
Manifest-Version: 1.0
Class-Path: .
Main-Class: com.testing.SWTApp
尝试这个:
java -d32 -XstartOnFirstThread -jar myapp.jar
-d32
选项将使VM以32位模式运行。 -XstartOnFirstThread
选项对于SWT应用程序是必需的。
swt jar执行依赖于你的操作系统的本机库。
你有一个版本的swt:macosx 32和64位
胜利32和64位
linux 32和64位
您可以指定-d32
jvm选项。 它将强制JVM以32位模式运行。 但是,您需要在操作系统中使用32位JVM实现。
您还可以在运行时动态加载正确的SWT Jar:您在应用程序中包含jar(swt-macosx-32bits和swt-macosx-64bits)并以编程方式加载所需的jar:
String osArch = System.getProperty ("sun.arch.data.model");
if (osArch == null) {
osArch = System.getProperty ("com.ibm.vm.bitmode");
}
URLClassLoader classLoader = (URLClassLoader) JarLoaderUtils.class.getClassLoader();
URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(classLoader));
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
addUrlMethod.setAccessible(true);
swtFileName = osArch.contains("64") ? SWT_MAC_x86_64 : SWT_MAC_x86;
URL swtFileUrl = new URL("rsrc:" + swtFileName);
addUrlMethod.invoke(classLoader, swtFileUrl);
请注意,您似乎在macosx中运行应用程序,还应添加-XstartOnFirstThread
选项。
问题是Eclipse不是正在执行你构建的jar,它是Finder / java启动器。 您需要做的是转到/Applications/Utilities/Java Preferences.app
并重新排序(单击拖动),以便在64位版本之前选择32位版本。 为了参考我的看起来像这样:
然后当你执行java -version
(no -d
参数)时,你将选择32位JRE。 当你在finder中双击jar或使用open app.jar
它应该工作。
20/11/2011 12:10:36 AM [0x0-0x3d89d86].com.apple.JarLauncher[73111] java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
请关注此错误。 您需要64位依赖库才能启动它。 这取决于默认的java加载。 如果是32位软件包,则需要将默认的jvm类路径设置为32位java。 您可以选择在eclipse中更改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.