gpt4 book ai didi

java - 在 Windows/Mac 和 32 位/64 位上支持 SWT

转载 作者:行者123 更新时间:2023-11-30 05:50:23 30 4
gpt4 key购买 nike

我目前正在使用 DJProject将浏览器放入我的 Java Swing 应用程序。 DJProject 使用 SWT 运行,我对 SWT 的经验很少。

我想同时支持 32 位和 64 位的 Windows 和 Mac。我知道每个平台都有一个 swt.jar 文件。我已将所有 4 个 swt.jar 库作为主应用程序的库添加到我的类路径中。

我的问题是当我尝试在 Mac 上运行应用程序时出现错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM

我将如何在运行时自动告诉 Java 加载 SWT 库的适当变体。

最佳答案

您可以检测操作系统和 Java 版本并动态加载适当的 jar:

private void loadSwtJar() {
try {
Class.forName (ORG_ECLIPSE_SWT_WIDGETS_SHELL);
return;
} catch (ClassNotFoundException e) {
System.out.println (" ! Need to add the proper swt jar: "+e.getMessage());
}

String osName = System.getProperty("os.name").toLowerCase();
String osArch = System.getProperty("os.arch").toLowerCase();

//NOTE - I have not added the mac and *nix swt jars.
String osPart =
osName.contains("win") ? "win" :
osName.contains("mac") ? "cocoa" :
osName.contains("linux") || osName.contains("nix") ? "gtk" :
null;

if (null == osPart)
throw new RuntimeException ("Cannot determine correct swt jar from os.name [" + osName + "] and os.arch [" + osArch + "]");

String archPart = osArch.contains ("64") ? "64" : "32";

System.out.println ("Architecture and OS == "+archPart+"bit "+osPart);

String swtFileName = "swt_" +osPart + archPart +".jar";
String workingDir = System.getProperty("user.dir");
String libDir = "\\lib\\";
File file = new File(workingDir.concat(libDir), swtFileName);
if (!file.exists ())
System.out.println("Can't locate SWT Jar " + file.getAbsolutePath());

try {
URLClassLoader classLoader = (URLClassLoader) getClass().getClassLoader ();
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod ("addURL", URL.class);
addUrlMethod.setAccessible (true);

URL swtFileUrl = file.toURI().toURL();
//System.out.println("Adding to classpath: " + swtFileUrl);
addUrlMethod.invoke (classLoader, swtFileUrl);
}
catch (Exception e) {
throw new RuntimeException ("Unable to add the swt jar to the class path: " + file.getAbsoluteFile (), e);
}
}

关于java - 在 Windows/Mac 和 32 位/64 位上支持 SWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144232/

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