Я разрабатываю настольное приложение, используя javafx v8.0.40. Я создал exe файл с inno 5. Когда я запускаю exe файл на своем компьютере, он устанавливается и запускается без каких-либо проблем. С другой стороны, когда я пытаюсь установить и запустить его на другом компьютере, в конце установки появится диалоговое окно окна: "Метод вызова ошибки", нажмите "ОК". Появилось другое окно, в котором говорилось: "Не удалось запустить jvm". Я искал весь интернет, но я не мог найти много об этой теме. Надеюсь, я получу решение этой проблемы. Заранее благодарю вас.
Ошибка вызова метода, не удалось запустить jvm
Ответ 1
Я столкнулся с той же проблемой; следующее работало на меня и помогло мне разобраться в том, что они взорвали "метод вызова ошибок". и "Не удалось запустить JVM":
- Найдите файл
.jar
- Он имеет то же имя, что и ваш проект, и он находится в каталоге установки приложения под
AppData\Local\{ApplicationTitle}\app
(ярлык: введите% appdata% в проводник); если ваш проект был назван HelloWorld, там вы найдетеHelloWorld.jar
- Он имеет то же имя, что и ваш проект, и он находится в каталоге установки приложения под
- Перейдите в каталог в командной строке
- shift + Right Click любое пустое место в окне проводника и выберите "Открыть командное окно здесь" (это модный трюк, который я недавно узнал; альтернативно, вы бы
cd
в тот же каталог, используя командную строку)
- shift + Right Click любое пустое место в окне проводника и выберите "Открыть командное окно здесь" (это модный трюк, который я недавно узнал; альтернативно, вы бы
- Запустите
.jar
через командную строку- введите
java -jar "HelloWorld.jar"
и нажмите Enter
- введите
Tadah! Вот ваши скрытые исключения (существование которых "метод вызова ошибки" ) так смутно пытается связаться с вами). *
Если ваша проблема похожа на mine, это связано с различием файловой структуры между папкой проекта out
и каталогом установки, и поэтому программа компилирует только отлично в редакторе и строит просто отлично - проблема не возникает до тех пор, пока она не будет построена, а структура файла немного отличается.
* Если вы не получили ничего, когда вы запускали его через командную строку, найдите любые ошибки, которые могут произойти во время этого метода initialize()
; что, где ваша проблема, вероятно, есть. Вы можете выставить любые исключения во время выполнения, используя Диалог исключения всплывающих окон, как показано в аналогичной проблеме, здесь.
Ответ 2
Вероятно, это связано с тем, что в выходном банке не хватает зависимостей. Поэтому вы не хотите добавлять библиотеки в артефакт, а затем генерировать .exe должно быть хорошо.
Вот пример с Intellij, где библиотеки были перемещены вручную из "Доступных элементов" в артефакт
Ответ 3
хотя этот вопрос немного старый - сегодня я столкнулся с одной и той же проблемой и не смог найти решение, ищущее эти сообщения об ошибках, кроме этого.
Проблема в значительной степени идентична: Встроенное приложение JavaFX (отлично работает на dev pc) с использованием java 8 и упаковано в собственный установщик (exe) с помощью Inno 5. Приложение отлично работало на некоторых наших машинах - на других он не удался с точными сообщениями об ошибках:
- "Метод вызова ошибки" и после нажатия OK
- "Не удалось запустить jvm".
При запуске приложения загрузчик fxml загружает первый контроллер представления и вызывает его метод "initialize". Если - при инициализации - генерируется исключение из-под канделябра, приложение вылетает, и отображаются эти два сообщения об ошибках Windows.
Надеюсь, что это поможет тому, кто любит меня, тоже борется с этим.
Ответ 4
Ответ J.Dürr (ответил 8 июня в 9:58) помог решить мой метод вызова ошибки и не удалось запустить JVM-проблему. Я использовал следующий код для отслеживания проблемы, которая оказалась ошибочным путем для пути к файлу FXML:
public static void main(final String[] taArgs)
{
try
{
Main.launch(taArgs);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
try
{
PrintWriter pw = new PrintWriter(new File("<somefilename.txt>"));
e.printStackTrace(pw);
pw.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}