运行下载JAR目前,我有以下问题:无法从其他jar
我创建了一个更新罐子从一个客户罐子被下载并放置在一些目录(只是某个磁盘上,不与更新器jar的目录关联)。我使用下面的代码运行的客户端jar从更新:
private void startApplication() {
String url = getFilePath()+"client.jar";
URL parsedURL = null;
try {
parsedURL = new File(url).toURI().toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
ClassLoader loader = URLClassLoader.newInstance(new URL[]{parsedURL}, getClass().getClassLoader());
Class<?> cl = null;
try {
cl = Class.forName("org.myApp.client.mainPackage.Main", true, loader);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally {
loader = null;
}
Class<? extends Application> runClass = cl.asSubclass(Application.class);
// Avoid Class.newInstance, for it is evil.
Constructor<? extends Application> ctor = null;
try {
ctor = runClass.getConstructor();
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
Application doRun = null;
try {
doRun = ctor.newInstance();
} catch (InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
try {
doRun.start(primaryStage);
} catch (Exception e) {
e.printStackTrace();
}
}
此代码似乎工作,因为client.jar的主被拼命地跑。但是,在Main启动后,我从客户端jar中得到一个异常。客户端jar中的Main尝试在上面的窗格中加载一个FXML文件。这是个例外:
ClassNotFoundException: org.myApp.client.lockscreen.LockscreenController when loading a FXML file
我不知道是什么触发了这个错误。当我独立运行它时,客户机jar就像应该那样运行。
我需要从更新罐子的客户端jar加载的所有类?
任何帮助,非常感谢!
感谢您的回答!我正在动态加载jar,所以当我构建updater jar时它还不存在。此外,我不想将它添加到库中,因为我希望更新程序从磁盘上的目录中打开它。 – bashoogzaad
在这种情况下,您需要确保您使用的是正确的URI/URL形式,并明确了相对或绝对地址。 – Jool
我不知道你的意思是什么。客户端jar运行正常,只有屏幕无法打开,因为它找不到控制器类。也许你可以更新你的答案? – bashoogzaad