2017-07-12 6 views
0

Lorsque j'appelle VirtualMachine.list(), il fonctionne correctement lorsque je suis sur eclipse et avec jdk. Mais dès que je change de jre, ou que j'essaye mon application avec eclipse, cette méthode semble renvoyer une liste vide à chaque fois. Je dois être capable de lancer mon application n'importe où avec un JRE.VirtualMachine.list() renvoie la liste vide

for(VirtualMachineDescriptor jvm : VirtualMachine.list()){ 
     System.out.println("jvm: " + jvm.displayName()); 
} 
+0

possible en double https://stackoverflow.com/questions/31493980/how-can-i-able-to-compile-and-run-java-programs-without-jdk-with-just-jre – Eliwa

+0

I Je ne pense pas que ce soit, je peux compiler mon code très bien. Le problème est que je ne peux pas trouver la liste de VirtualMachineDescriptor correctement, même en incluant le tools.jar dans mon pot. – hugo4715

Répondre

1

Je dois pouvoir exécuter mon application n'importe où avec juste un JRE.

Dans ce cas, vous ne devez pas utiliser com.sun.tools.attach.VirtualMachine classe, puisque VirtualMachine est seulement une partie de JDK, et non JRE.

  • Le contrat de licence Oracle ne permet pas de distribute tools.jar avec votre application sans distribuer le JDK entier.
  • Même si vous incluez tools.jar dans votre application, vous ne serez pas toujours en mesure de l'exécuter sur toute JRE, car tools.jar a des pièces spécifiques à la plateforme, et il dépend d'une bibliothèque native (libattach.so) qui est également manquant dans JRE.

Donc, il y a les options suivantes:

  1. , il faut installer JDK avant de lancer votre application.
  2. Regroupez l'ensemble du JDK avec votre application.
  3. Implémentez la fonctionnalité manquante à partir de zéro. Si vous cherchez à lister les JVM en cours d'exécution sans utiliser tools.jar, this answer pourrait vous donner une idée.
0

Je suis un peu confus. À mon avis, la classe VirtualMachine ne fait pas partie d'un environnement JRE car elle est incluse dans tools.jar, elle est donc uniquement disponible à partir de JDK. Il est possible que vous souhaitiez placer le contenu de tools.jar dans votre fichier jar d'application, ou distribuer tools.jar et l'ajouter au classpath lors de l'exécution. Votre code s'exécutera comme prévu et affichera le fichier jvm que votre programme exécute, ainsi que tout programme exécuté dans le même fichier jvm.

+0

tools.jar est déjà inclus dans mon pot – hugo4715

+0

@ hugo peut-être vous avez besoin de jdk dll aussi. – ugo