繁体   English   中英

如何使用SWT / Eclipse在Mac OS X中执行jar?

[英]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首选项

然后当你执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM