[英]Unable to run downloaded jar from other jar
我目前有以下問題:
我創建了一個更新器 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已運行。 但是,在其Main啟動之后,我從客戶端jar中獲得了異常。 客戶端jar中的Main試圖在上方窗格中加載FXML文件。 這是例外:
ClassNotFoundException: org.myApp.client.lockscreen.LockscreenController when loading a FXML file
我不知道是什么觸發了此錯誤。 當我獨立運行客戶端jar時,它應該按預期運行。
我是否需要從更新程序jar中加載客戶端jar中的所有類?
任何幫助是極大的贊賞!
大家謝謝您的幫助。 我能夠這樣修復它(感謝喬爾,您將獲得全部學分):
我下載並運行了客戶端jar,並假設它具有自己的引用。 但是,正如Jool所說,我必須將導演添加到課程路徑中。 我做錯了,是我添加了目錄,而不是Jar文件。 您還必須添加JAR文件! 我用這段代碼做到了:
public void addPath(String s) throws Exception {
File f = new File(s);
URI u = f.toURI();
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> urlClass = URLClassLoader.class;
Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(urlClassLoader, new Object[]{u.toURL()});
}
然后在運行客戶端jar之前,我只調用了addPath(url)
。
就是說找不到該類,因為它不在您的類路徑中。
這取決於您如何構建應用程序(Ant,Maven等),因為這確定了.jar文件的位置以及.jar文件的位置。
如果使用的是IDE,通常會有某種庫占位符,您可以在其中定義依賴的.jars。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.