2009-02-03 3 views
5

nicht ausführen Ich verwende die Befehlszeile in Windows zu kompilieren und dann meine Java-Programme ausführen. Ich bin zu http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html gegangen und habe versucht, die HelloWorldSwing.java Klasse zu kompilieren. es hat funktioniert, aber wenn ich "java HelloWorldSwing" versuchen, es gibt mir ein Bündel von erros und sagt etwas entlang der Linien von Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldSwing (falscher Name: Start/HelloWorldSwing)kann Swing von der Befehlszeile

Ich versuche mit Java Start/HelloWorldSwing zu laufen und es sagt NoClassDefFoundError. ich bekomme auch keine fehler mit javac. hier ist der Code aus dem Tutorial:

import javax.swing.*;   

public class HelloWorldSwing { 
    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event-dispatching thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("HelloWorldSwing"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Add the ubiquitous "Hello World" label. 
     JLabel label = new JLabel("Hello World"); 
     frame.getContentPane().add(label); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

EDIT: gebrauchte javaw

Fenster öffnet sich

ein weiteres Fenster

„Fehler "eine Java-Ausnahme ist aufgetreten": konnte nicht die Hauptklasse finden. Fehler: Ein Jni-Fehler ist aufgetreten, bitte überprüfen Sie Ihre Installation und versuchen Sie es erneut. "

hatte nie Probleme beim Ausführen von Java-Programmen, habe ich etwas fehlt? Gibt es eine Möglichkeit zu wissen, was es ist?

Ich führe auch den Befehl in dem gleichen Pfad wo die .java und .class sind.

Es gibt keinen Ordner Start in dem Pfad, wo ich das Programm kompiliert.

EDIT2 Ich habe versucht sowohl Start/HelloWorldSwing und HelloWorldSwing mit Java.

Ich bekomme keine Fehler mit Javac auch. Ich bekomme 2 Popup-Fenster mit den Nachrichten, die ich vorher eingegeben habe, wenn ich javaw benutze und java gibt mir die NoClassDefFoundException, dann spricht ich über die ClassLoaders und whatnot.

EDIT3 Ich habe es durch Entfernen der "Paket starten;" Linie. Was müsste ich tun, damit es funktioniert?

javaw funktioniert auch jetzt, dass ich die Paketlinie entfernt habe.

+0

Könnten Sie die Ausgabe Ihrer Konsole einfügen, wo Sie "javac etc etc" eingeben, wo Sie javac etc.etc eingeben? – OscarRyz

Antwort

2

Yep. Die Seite hat einen leichten Fehler:

Die Klasse verwendet ein Paket, aber in den Lauf Anweisungen wird das Paket nicht verwendet

Sie können zwei Dinge tun:

a) Lassen Sie den Paketnamen (löschen die Linie pacakge start;) und

Oder

b) Lassen Sie die package start; Zeile im Code wie angegeben ausführen und die -d Option javac und verwenden Sie den vollständigen hängen Klassenname.

Ich hoffe, das hilft.

+1

Die Bilder sind jetzt weg, könnten Sie den Beitrag bearbeiten? – Mhmd

+0

Deshalb sollten Sie Bilder mithilfe der integrierten Editorfunktionen in Imgur hochladen, anstatt sie selbst zu verwalten. Oder noch besser, verwenden Sie keine Bilder und verwenden Sie stattdessen Codeblöcke (wie [eine halbe Stunde vorher] (http://stackoverflow.com/a/509330/119540) diese Antwort gepostet haben). ': - /' – Synetech

+0

Der eingebaute Editor existierte nicht, als ich diese Antwort vor fast 7 Jahren erstellte. – OscarRyz

2

Versuchen Sie folgendes:

java HelloWorldSwing

Statt:

java start/HelloWorldSwing

Das Argument der Java-Compiler (javac) ist eine Datei (das ist, warum Start/HelloWorldSwing.java wahrscheinlich gearbeitet hat), aber das Argument zum Java-Interpreter (Java) ist ein Klassenname.

Das ist, warum Sie nicht die .class in der Befehlszeile anhängen, und da gibt es keine Klasse Start benannt ist/HelloWorldSwing Sie erhalten die Fehlermeldung (NoClassDefFoundError), dass „Es gibt keine Klassendefinition gefunden liest mit

Um die Sache einfacher zu machen, kompilieren und starten Sie Ihre ersten Programme aus demselben Verzeichnis, in dem sich Ihre .java-Dateien befinden.

+0

Er tat es; siehe den ersten Absatz der Frage. –

+0

@ mmyers. Ich habe es nicht bemerkt. – OscarRyz

1

der Code Ihrer funktioniert gut, dass im selben Verzeichnis wie die Java-Datei machen versucht und tun

javac HelloWorldSwing.java 
java HelloWorldSwing 
3

Sie den Geburtstag von java Befehl aufrufen werden? Laut Ihrer Beschreibung befindet sich HelloWorldSwing.class im Ordner "start", ist aber nicht in einem Paket enthalten. Dies ist wahrscheinlich die Ursache des Fehlers. Versuchen:

cd start 
java HelloWorldSwing 

EDIT: Der Code aus dem Tutorial einen hat "package start;" Erklärung darin. Hast du es entfernt? Ist dies nicht der Fall, setzen Sie HelloWorldSwing in den Ordner "start" und führen Sie

java start.HelloWorldSwing 

aus dem aktuellen Ordner aus.

Siehe auch die package tutorial.

+0

Nicht, wenn die Klasse eine Paketanweisung enthält. –

+0

@Pourquoi Littytestdaten: Was passiert nicht? –

+0

@mmyers: Yeap, wahrscheinlich ist der Fehler dort, im Startpaket. :) – OscarRyz

1

Der Code, den Sie verknüpft haben, stimmt nicht mit dem Code überein, den Sie in Ihre Frage eingefügt haben. Es hat diese Zeile an der Spitze:

In Java muss die Paketstruktur von der Verzeichnisstruktur gespiegelt werden. Wenn sich Ihre Klassen in einem Paket namens "start" befinden, müssen sich die kompilierten Klassendateien in einem Verzeichnis namens "start" befinden. Also, stellen Sie sicher, dass HelloWorldSwing.class im ‚Start‘ Verzeichnis und führen Sie das folgende Formular, um das übergeordnete Verzeichnis:

java start.HelloWorldSwing 
0

Fügen Sie einfach eine Zeile:

import java.awt.*;

0

können Sie es kompilieren von:

javac HelloWorldSwing.java 

Sie es durch laufen kann:

java -cp . HelloWorldSwing.java 

Diese wirklich funktioniert.