2009-02-03 7 views
5

J'utilise la ligne de commande dans les fenêtres pour compiler, puis exécuter mes programmes Java. Je suis allé à http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html et j'ai essayé de compiler la classe HelloWorldSwing.java. cela a fonctionné, mais quand j'essaye "java HelloWorldSwing" il me donne un tas d'erreurs et dit quelque chose le long des lignes d'exception dans le fil "principal" java.lang.NoClassDefFoundError: HelloWorldSwing (mauvais nom: start/HelloWorldSwing)ne peut pas exécuter swing à partir de la ligne de commande

J'essaie de courir avec java start/HelloWorldSwing et ça dit noClassDefFoundError. Je n'ai pas non plus d'erreurs avec javac. voici le code du tutoriel:

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: utilisé javaw

fenêtre

saute vers le haut

"une exception java est produite"

une autre fenêtre

« erreur: pourrait pas trouvé la classe principale Erreur : une erreur jni s'est produite, vérifiez votre installation et réessayez. "

n'a jamais eu de problèmes à exécuter des programmes Java, ai-je raté quelque chose? Y a-t-il un moyen de savoir ce que c'est?

Je cours également la commande dans le même chemin où le .java et .class sont.

Il n'y a pas de début de dossier dans le chemin où j'ai compilé le programme.

EDIT2 J'ai essayé à la fois start/HelloWorldSwing et HelloWorldSwing avec java.

Je n'ai pas non plus d'erreur avec javac. Je reçois 2 fenêtres pop-up avec les messages que j'ai tapés précédemment lorsque j'utilise javaw et java me donne le NoClassDefFoundException, puis parle des ClassLoaders et autres joyeusetés.

EDIT3 Je l'ai eu pour travailler en supprimant le "début de paquet;" ligne. qu'est-ce que je devrais faire pour le faire fonctionner avec ça? Javaw fonctionne également maintenant que j'ai supprimé la ligne de l'emballage.

+0

Pourriez-vous coller la sortie de votre console à partir de laquelle vous tapez "javac etc etc" en continuant où vous tapez javac etcetc? – OscarRyz

Répondre

2

Yep. Cette page a un petit bug:

La classe utilise un package, mais dans les instructions de l'exécution du package n'est pas utilisé

Vous pouvez faire deux choses:

a) Laissez tomber le nom du package (supprimer ligne pacakge start;) et exécuter comme indiqué

Ou

b) Laisser la ligne package start; dans le code et append l'option -d-javac et utilisez la version complète nom du cours.

J'espère que cela aide.

+1

Les images ont disparu maintenant, pourriez-vous éditer le poste? – Mhmd

+0

C'est pourquoi vous êtes supposé télécharger des images dans imgur en utilisant les fonctions de l'éditeur intégré plutôt que de les gérer vous-même. Ou mieux encore, ne pas utiliser d'images du tout et utiliser des blocs de code à la place (comme [vous avez fait une demi-heure avant] (http://stackoverflow.com/a/509330/119540) affichant cette réponse). ': - /' – Synetech

+0

L'éditeur intégré n'existait pas lorsque j'ai créé cette réponse il y a presque 7 ans. – OscarRyz

2

Essayez ceci:

java HelloWorldSwing

Plutôt que:

java start/HelloWorldSwing

L'argument du compilateur Java (javac) est un fichier (c'est pourquoi démarrer/HelloWorldSwing.java probablement travaillé) mais l'argument à l'interpréteur Java (java) est un nom de classe.

C'est la raison pour laquelle vous ne rajoutez pas .class dans la ligne de commande, et puisqu'il n'y a pas de classe nommé start/HelloWorldSwing Vous obtenez ce message d'erreur (NoClassDefFoundError), qui se lit « Il n'y a pas à la définition de la classe trouvée avec Pour faciliter la tâche, compilez et exécutez vos premiers programmes à partir du même répertoire que vos fichiers .java.

+0

Il l'a fait; voir le premier paragraphe de la question. –

+0

@mmyers. Je n'ai pas remarqué. – OscarRyz

1

Essayé le code fonctionne bien faire que votre dans le même répertoire que le fichier Java et faire

javac HelloWorldSwing.java 
java HelloWorldSwing 
3

Où invoquez la commande java-vous? De votre description, HelloWorldSwing.class est dans le dossier "start", mais n'est pas dans un paquet. C'est probablement la source de l'erreur. Essayez:

cd start 
java HelloWorldSwing 

EDIT: Le code du tutoriel a une déclaration "package start;" en elle. L'avez-vous retiré? Sinon, mettez HelloWorldSwing dans le dossier « Démarrer » et exécutez

java start.HelloWorldSwing 

du dossier en cours. Voir aussi le package tutorial.

+0

Non si la classe contient une directive de package. –

+0

@Pourquoi Litytestdata: Qu'est-ce qui ne se passe pas? –

+0

@mmyers: Yeap, probablement l'erreur est là, dans le paquet de départ. :) – OscarRyz

1

Le code auquel vous avez lié n'est pas le même que le code que vous avez inclus dans votre question. Il a cette ligne en haut:

package start; 

En Java, la structure du package doit être reflété par la structure de répertoire. Donc, si vos classes sont dans un paquet appelé 'start', les fichiers de classe compilés doivent se trouver dans un répertoire appelé 'start'. Donc, assurez-vous que HelloWorldSwing.class est dans le répertoire « départ » et exécutez le formulaire ci-dessous le répertoire parent:

java start.HelloWorldSwing 
0

Il suffit d'ajouter une ligne:

import java.awt.*;

0

vous pouvez compiler par:

javac HelloWorldSwing.java 

vous pouvez l'exécuter par:

java -cp . HelloWorldSwing.java 

Celui-ci fonctionne vraiment.

Questions connexes