我已将SWT文件“.jar”作为外部jar添加到我的项目中。所以它被导入到我的项目中,我可以通过以下方式调用它的方法:
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
当我这样做时没有导入错误,所以我怀疑一切都正常工作。但是,当我将其导出为“.jar”并使用它时,有错误说“org.eclipse.swt。[etc] ...”不存在。
我正在尝试制作一个使用GUI(SWT)的Bukkit插件,我不知道为什么这不起作用 - 有什么建议吗?
答案 0 :(得分:0)
在eclipse中运行主课程后,请转到File > Export > Runnable JAR
。选择与文件匹配的配置。
你应该得到:
如果您需要动态加载swt:
public static String getArchFilename(String prefix)
{
return prefix + "_" + getOSName() + "_" + getArchName() + ".jar";
}
private static String getOSName()
{
String osNameProperty = System.getProperty("os.name");
if (osNameProperty == null)
{
throw new RuntimeException("os.name property is not set");
}
else
{
osNameProperty = osNameProperty.toLowerCase();
}
if (osNameProperty.contains("win"))
{
return "win";
}
else if (osNameProperty.contains("mac"))
{
return "osx";
}
else if (osNameProperty.contains("linux") || osNameProperty.contains("nix"))
{
return "linux";
}
else
{
throw new RuntimeException("Unknown OS name: " + osNameProperty);
}
}
private static String getArchName()
{
String osArch = System.getProperty("os.arch");
if (osArch != null && osArch.contains("64"))
{
return "64";
}
else
{
return "32";
}
}
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();
}
}
然后:
File swtJar = new File(getArchFilename("lib/swt"));
addJarToClasspath(swtJar);
假设jar外面的te结构是:
lib/swt_win_32.jar
lib/swt_win_64.jar
lib/swt_linux_32.jar
lib/swt_linux_64.jar
来自http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191