В настоящее время я работаю с Java 6, я не могу обновить. Я не могу использовать Java Web Start или превратить это настольное приложение в апплет. С учетом сказанного, я остался с копированием нового обновленного файла jar из папки общего доступа и вставки его в папку пользователя. Я не профессиональный кодер, я или код в Perl, но последние 6 месяцев работал с Java. Таким образом, вы можете увидеть некоторые проблемы, не стесняйтесь указывать их. Мне нравится учиться.Java two jvm update system, no jws или applet
Я реализовал две сессии JVM просто отлично (я думаю). Я, тем не менее работает в следующем номере:
Exception in thread "main" java.lang.NoClassDefFoundError:
Я получаю эту ошибку, когда новая Manifest версия не соответствует первоначально запущен Manifest версии. Как только я убью сеанс (потому что он зависает после этой ошибки), и перезапустите, он обнаруживает обновление и работает нормально. Конечно, я не могу заставить пользователя пройти этот процесс.
Вот как я запускаю вторую 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();
}
После того, как второй файл банка, который, отвечающие за обновление запусков. У меня есть это в основном метод этого файла (с другим кодом исключенного конечно):
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 или бросить его на апплет. –