NullPointerException lors de l'exécution .fichier jar
J'ai juste commencé à apprendre le java, et ne connaissent qu'une petite quantité de code, mais c'est encore un simple programme. C'est plus une blague programme, mais la plupart du temps juste pour tester si je peux faire un fichier jar.
Voici le code:
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.util.Random;
public class randommouse {
public static void main(String[] args) {
for (int i=1; i<1000; i++) {
Random rand = new Random();
int w = rand.nextInt(1024) + 1;
int h = rand.nextInt(768) + 1;
int t = rand.nextInt(2000) + 1;
try {
Robot r = new Robot();
r.mouseMove(w,h);
Thread.sleep(t);
} catch (AWTException e) {}
catch (InterruptedException e) {}
catch (NullPointerException e) {}
}
}
}
Je enregistrer ce fichier appelé randommouse.java
,
puis le compiler à l'aide de
javac randommouse.java
Ce qui fonctionne et quand je l'exécute à l'aide de
java randommouse
il fonctionne très bien aussi.
Alors j'ai essayer de créer un fichier jar. J'utilise la commande
jar cvf randommouse.jar randommouse.class
et il fonctionne. Ensuite, j'ai double-cliquez sur le fichier jar et elle vient avec une erreur Java Exception
.
Alors je me suis lancer dans le cmd avec
java -jar randommouse.jar
et obtenez cette erreur
F:\Java>java -jar randommouse.jar
Exception in thread "main" java.lang.NullPointerException
at sun.launcher.LauncherHelper.getMainClassFromJar(LauncherHelper.java:3
99)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:463)
F:\Java>
Dois-je mettre dans un argument, et si oui, où dois-je mettre à qui et comment?
Je vous remercie à l'avance
Sam
OriginalL'auteur Sam | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
De le JDK doc:
OriginalL'auteur Ed Staub
Vous devez définir le point d'entrée
OriginalL'auteur Fu86
Avez-vous spécifier le point d'entrée dans le manifeste?
http://download.oracle.com/javase/tutorial/deployment/jar/appman.html
OriginalL'auteur Anthony
Quelques problèmes avec votre code qui ne sont pas liés à votre problème réel, mais sont malgré tout important.
1) la Présente déclaration est inutile:
Par défaut, chaque classe dans
java.lang
est implicitement importés. Vous n'avez pas besoin de le faire explicitement.2) C'est dangereusement mauvais code:
Vous attraper les exceptions qui sont probablement dus à des erreurs de programmation, et de jeter tous les éléments de preuve qu'ils ne s'était passé. À tout le moins, vous devez imprimer une sorte de message d'erreur ... et l'exception stacktrace, vous pouvez diagnostiquer.
Dans ce contexte particulier (dans un
main
méthode), ce qui suit est une meilleure approche:OriginalL'auteur Stephen C
J'ai pris un coup d'oeil au code source de la classe et il semble que vous essayez d'obtenir le principal attribut de classe à partir d'une liste d'attributs, qui sont des Chaînes de caractères, et est ensuite invoquer le trim() la méthode sur la trouvé principal attribut de classe. Lorsque la classe principale n'est pas spécifié, il n'est pas principal attribut de classe, ce qui provoque la recherche de la méthode renvoie une valeur null pour indiquer si, et quand le trim() est appelée, elle est à l'origine de la NullPointerException depuis la méthode de recherche a retourné null. Pour éviter cela, assurez-vous que la classe principale est spécifié dans le pot manifeste:
[directory of class files]>jar -cvmf [name of manifest] MyApp.jar
Et assurez-vous que vous avez écrit le manifeste droite (avec le saut de ligne à la fin):
OriginalL'auteur gparyani