NullPointerException beim Versuch zu laufen .jar-Datei
Ich habe gerade angefangen java zu lernen, und wissen, dass nur eine kleine Menge code, aber das ist noch ein einfaches Programm. Es ist eher ein Streich-Programm, aber meistens nur, um zu testen, ob kann ich eine jar-Datei.
Hier ist der 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) {}
}
}
}
Speichere ich diese Datei namens randommouse.java
,
dann kompilieren Sie es mit
javac randommouse.java
Dies funktioniert und wenn ich es mit
java randommouse
funktioniert es auch.
Ich dann also versuchen, erstellen Sie eine jar-Datei. Ich benutze den Befehl
jar cvf randommouse.jar randommouse.class
und es funktioniert. Dann habe ich Doppelklick auf die jar Datei und es kommt ein Fehler Java Exception
.
So dann habe ich es in der cmd mit
java -jar randommouse.jar
diesen Fehler erhalten
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>
Brauche ich um in ein argument, und wenn ja, wo bekomme ich das und wie?
Danke im Voraus
Sam
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom die JDK-doc:
Müssen Sie legen Sie den Einstiegspunkt
Hast, Sie geben den Einstiegspunkt in das manifest?
http://download.oracle.com/javase/tutorial/deployment/jar/appman.html
Ein paar Probleme mit Ihrem code, der nicht in Bezug zu deinem eigentlichen problem, aber wichtig sind Sie dennoch.
1) Diese Aussage ist überflüssig:
Standardmäßig, jede Klasse in
java.lang
ist implizit importiert. Sie nicht brauchen, um es explizit tun.2) Dies ist gefährlich schlechten code:
Sind Sie Ausnahmen abfangen, die höchstwahrscheinlich durch Fehler in der Programmierung, und wegwerfen alle Beweise, dass Sie überhaupt passiert ist. Zumindest die, die Sie ausdrucken sollten Sie irgendeine Art von Fehlermeldung ... und das exception-stacktrace zu, dass Sie kann diagnostizieren.
In diesem bestimmten Kontext (in einem
main
- Methode), das folgende ist ein besserer Ansatz:Habe ich einen Blick in den Quellcode der Klasse und es scheint zu versuchen, um die main-class-Attribut aus einer Liste von Attributen, die Streicher und dann das aufrufen der trim () - Methode auf die Gefundene main-class-Attribut. Wenn die main-Klasse ist nicht festgelegt, es gibt keine main-class-Attribut, was bewirkt, dass der suchen-Methode null zurück, um anzuzeigen, also, und wenn trim() aufgerufen wird, es verursacht die NullPointerException da die Suche-Methode null zurückgegeben hat. Um dies zu vermeiden, werden Sie sicher, dass die main-Klasse angegeben wird, die in der jar-manifest:
[directory of class files]>jar -cvmf [name of manifest] MyApp.jar
Und sicher sein, dass Sie geschrieben haben das manifest Recht (mit Zeilenumbruch am Ende):