我目前正在使用Java 6,我無法更新。我無法使用Java Web Start或將此桌面應用程序轉換爲小程序。就這樣說,我只剩下從共享文件夾複製新的更新的jar文件並將其粘貼到用戶文件夾中。我不是一個專業的編碼人員,我使用Perl編寫代碼,但在過去的6個月中一直在使用Java。所以你可能會看到一些問題,隨時指出它們。我喜歡學習。Java兩個jvm更新系統,沒有jws或applet
我已經實現了兩個JVM會話就好(我認爲)。我,但運行到了以下問題:
Exception in thread "main" java.lang.NoClassDefFoundError:
我收到此錯誤時,新的清單版本不匹配,最初推出的清單版本。一旦我終止會話(因爲它在該錯誤後掛起),並重新啓動,它確實檢測到更新並且運行良好。當然,我不能讓用戶經歷這個過程。
這就是我發現版本不匹配時啓動第二個JVM的方式。我從第一個應用程序中使用它:
JOptionPane.showMessageDialog(null,
"Your version is outdated. I will try to update. Hold tight...", // Message
"Update Notice.", // Title
JOptionPane.INFORMATION_MESSAGE);
startSecondJVM();
<ClassName>.MainWindow.dispose();
System.exit(0);
似乎它沒有到達「System.exit(0)」部分。我需要執行線程還是其他?
這是方法調用它的:
public static void startSecondJVM() throws Exception {
String separator = System.getProperty("file.separator");
String javapath = System.getProperty("java.home");
//String javapath = "C:\\Program Files\\Java\\jre7\\";
String fullJavaPath = javapath + "bin" + separator + "java";
System.out.println("Java Path: " + fullJavaPath);
ProcessBuilder processBuilder =
new ProcessBuilder(fullJavaPath, "-jar",
updatePath); // AnotherClassWithMainMethod.class.getName()
Process process = processBuilder.start();
process.waitFor();
}
一旦第二jar文件這是負責更新的推出。我有這個在該文件的主要方法(排除在外的,當然其他代碼):
try {
Thread.sleep(3000);
FileCopy.copyFile(FileCopy.source, dest);
} catch (IOException e) {
e.printStackTrace();
}
其使用的方法是這樣的:
public static void copyFile(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} // End of copy file
因此,要回顧一下。文件複製過程似乎工作正常。原來的應用程序似乎並沒有完全退出。複製過程完成後,繼續打開。那是我遇到錯誤的地方。所以我的問題是我如何完全殺死第一個應用程序,而我更新第二個Java應用程序。
下載的文件位於共享驅動器中。但它可能位於下一個文件夾中。所以我不認爲這會有所作爲。所以我想這個答案不會。 –
舉個例子,分享地點很慢(美國的Coast to Coast)。其次,有可能破壞該文件。第三,如果該文件正在使用,我將無法更新/刪除/升級該文件。這些只是我能想到的一些原因,這使得這個建議成爲一個可怕的想法。我想我在第一段中闡述了我的要求,限制和期望。可悲的是我無法控制它們,否則我可以輕鬆使用JWS或將它放在小程序上。 –