Je développe une application de bureau utilisant javafx v8.0.40. J'ai créé un fichier exe avec inno 5. Lorsque je lance le fichier exe sur mon ordinateur, il est installé et fonctionne sans problème. D'autre part, lorsque j'essaie de l'installer et de l'exécuter sur un autre ordinateur, à la fin de l'installation, une boîte de dialogue apparaît: "Erreur lors de l'appel de la méthode", je clique sur OK. Une autre fenêtre apparaît disant "Impossible de lancer jvm". J'ai fait des recherches sur Internet, mais je n'ai pas trouvé grand chose à ce sujet. J'espère que j'aurai une solution à ce problème. Merci d'avance.
J'ai rencontré le même problème; Ce qui suit a fonctionné pour moi et m'a aidé à comprendre le sens de la méthode "Erreur d'invocation" et "Échec du lancement de la machine virtuelle Java":
.jar
AppData\Local\{ApplicationTitle}\app
(): raccourci: tapez% appdata% dans l'explorateur ); si votre projet s'appelle HelloWorld, vous y trouverez HelloWorld.jar
cd
name __ dans le même répertoire à l'aide de la commande Invite ) .jar
via la ligne de commande Java -jar "HelloWorld.jar"
et appuyez sur EnterTadah! Voici vos exceptions cachées (l'existence de laquelle "Erreur invoquant la méthode." Tente donc vaguement de vous communiquer). *
Si votre problème est similaire à le mien il provient d'une différence dans la structure de fichier entre le dossier out
du projet et le répertoire d'installation. C'est pourquoi le programme se compile parfaitement dans l'éditeur et se construit parfaitement. t un problème jusqu’à ce qu’il soit construit, et la structure de fichier est un peu différente.
* Si vous n'avez rien obtenu lorsque vous l'avez exécuté via la ligne de commande, recherchez les erreurs pouvant survenir au cours de cette méthode initialize()
; c'est là que se situe probablement votre problème. Vous pouvez exposer toutes les exceptions pendant l'exécution à l'aide d'un dialogue d'exception contextuelle, comme indiqué dans problème similaire, ici .
C'est probablement parce qu'il manque les dépendances dans le fichier jar de sortie. Donc, vous détestez ajouter les bibliothèques dans l'artefact et la génération .exe devrait être ok.
Voici un exemple avec Intellij, où les bibliothèques ont été manuellement déplacées de "Eléments disponibles" vers l'artefact
Je ne pouvais pas résoudre le problème, mais j'ai trouvé un moyen de le contourner. J'ai utilisé le bloc-notes pour créer un fichier de commandes pour lancer l'application. J'ai d'abord utilisé cd
pour accéder au répertoire du fichier .jar
, puis Java -jar
pour lancer l'application. Ça devrait ressembler a quelque chose comme ca:
cd C:\[wherever your project folder is located]\[name of project]\dist
Java -jar [name of project].jar
Enregistrez-le en tant que fichier .bat
sur le bureau, lancez le fichier de commandes et votre programme démarrera!
même si cette question est un peu ancienne - aujourd'hui, je rencontrais exactement le même problème et je ne trouvais aucune solution pour rechercher ces messages d'erreur autres qu'ici.
Le problème est à peu près identique: Application JavaFX construite (fonctionnant bien sur dev pc) utilisant Java 8 et intégrée dans un programme d’installation natif (exe) utilisant Inno 5. L’application a fonctionné correctement sur certaines de nos machines. - sur d’autres, il échouait avec exactement les messages d’erreur suivants:
Au démarrage de l'application, le chargeur fxml charge le premier contrôleur de vue et appelle sa méthode "initialize". Si - au cours de l'initialisation - une exception non gérée est générée, l'application se bloque et ces deux messages d'erreur Windows sont affichés.
J'espère que cela aidera quelqu'un qui, comme moi, se débat avec cela aussi.
La réponse de J.Dürr (réponse du 8 juin 2016 à 9h58) a permis de résoudre ma Erreur invoquant la méthode & Échec de lancement de JVM issue. J'ai utilisé le code suivant pour localiser le problème, qui s'est révélé être un chemin de ressource FXML erroné:
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();
}
}
}