Java在运行时选择正确的SWT

时间:2014-11-03 03:52:10

标签: java eclipse swt classloader

我正在编写一个跨平台的程序,而SWT就是其中的一部分。

据我所知,我必须选择合适的SWT库到正确的平台和架构(32或64位)

所以,我需要在运行时加载SWT jar文件来实现这一点。实际上我找到了一种方法,但我还没有完成它。

我在此网站后面采取措施 https://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

但是当我跑(在eclipse中)时我得到了这个错误

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Display cannot be resolved to a type
    Display cannot be resolved to a type
    Shell cannot be resolved to a type
    Shell cannot be resolved to a type

实际上,这是我用来测试动态加载是否成功的代码。

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;


public class AddJarAtRuntime {

public static void main(String[] args) {

    File swtJar = null;
    swtJar = new File("lib/swt-win-x64.jar"); 
    if(swtJar == null)
    {
        return;
    }
    addJarToClasspath(swtJar);

    Display display = new Display();
    Shell shell = new Shell(display);

    shell.setText("Hello, world!");

    shell.open();
    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in the event queue
        display.sleep();
      }
    }
    display.dispose();
}


public static void addJarToClasspath(File jarFile) 
{ 
   try 
   { 
       URL url = jarFile.toURI().toURL(); 
       URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); 
       Class<?> urlClass = URLClassLoader.class; 
       Method method = urlClass.getDeclaredMethod("addURL", new Class<?>[] { URL.class }); 
       method.setAccessible(true);         
       method.invoke(urlClassLoader, new Object[] { url });             
   } 
   catch (Throwable t) 
   { 
       t.printStackTrace(); 
   } 
}

}

当我编译时,我得到了行上的错误

Display display = new Display();

Shell shell = new Shell(display);

似乎无法检测到jar文件。

我试图将这个项目导出,但它也不起作用。

有没有人知道如何导出项目或使其正常运行?

PS。如果有人为我提供了逐步解决方案,那将会很有帮助。

感谢

0 个答案:

没有答案