支持Windows / Mac和32bit / 64bit上的SWT

我目前正在使用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加载SWT库的正确变体?

你没有。 您可以创建4个jar文件,每个文件对应一台机器(Windows和Mac)和操作系统(32位和64位)。

每个jar文件都包含适用于一台计算机和一个操作系统的SWT jar库