我正在编写一个跨平台的程序,而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。如果有人为我提供了逐步解决方案,那将会很有帮助。
感谢