2009-02-03 17 views
5

uso la riga di comando in Windows per compilare e quindi eseguire i miei programmi java. sono andato a http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html e ho provato a compilare la classe HelloWorldSwing.java. ha funzionato, ma quando provo "java HelloWorldSwing" mi dà un po 'di erros e dice qualcosa sulla falsariga di Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldSwing (nome sbagliato: start/HelloWorldSwing)non è possibile eseguire l'oscillazione dalla riga di comando

provo a correre con java start/HelloWorldSwing e dice noClassDefFoundError. Neanche io ho errori con javac. ecco il codice dal 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: usato javaw

finestra si apre

"un'eccezione Java si è verificato"

un'altra finestra

"errore: potrebbe non trovare la classe principale. errore: si è verificato un errore jni, controlla l'installazione e riprova. "

non ha mai avuto problemi durante l'esecuzione di programmi java, mi manca qualcosa? c'è un modo per sapere di cosa si tratta?

Sto anche eseguendo il comando nello stesso percorso dove sono .java e .class.

non vi è alcuna cartella di inizio nel percorso in cui ho compilato il programma.

EDIT2 Ho provato sia start/HelloWorldSwing che HelloWorldSwing con java.

Non ho alcun errore con javac anche. Ottengo 2 finestre pop-up con i messaggi che ho digitato in precedenza quando uso javaw e java mi dà l'eccezione NoClassDefFoundException, quindi parla dei ClassLoaders e di quant'altro.

EDIT3 Ho ottenuto il lavoro rimuovendo il "pacchetto start"; linea. cosa dovrei fare per farlo funzionare?

javaw funziona anche ora che ho rimosso la linea del pacchetto.

+0

Potresti incollare l'output della tua console iniziando da dove digiti "javac etc etc" continuando dove scrivi javac etc.etc? – OscarRyz

risposta

2

Yep. Quella pagina ha un leggero errore:

la classe utilizza un pacchetto, ma nelle istruzioni eseguire il pacchetto non viene utilizzato

Si possono fare due cose:

a) far cadere il nome del pacchetto (eliminare il linea pacakge start;) ed eseguire come indicato

O

b) Lascia la linea package start; nel codice e aggiungere l'opzione -d-javac e utilizzare il pieno nome della classe.

Spero che questo aiuti.

+1

Le immagini sono sparite ora, potresti modificare il post? – Mhmd

+0

Ecco perché dovresti caricare le immagini su imgur usando le funzioni dell'editor incorporato piuttosto che gestirle tu stesso. O meglio ancora, non usare le immagini e utilizzare invece i blocchi di codice (come [hai fatto mezz'ora prima] (http://stackoverflow.com/a/509330/119540) postando questa risposta). ': - /' – Synetech

+0

L'editor integrato non esisteva quando ho creato questa risposta per la prima volta quasi 7 anni fa. – OscarRyz

2

Prova questo:

java HelloWorldSwing

Piuttosto che:

java start/HelloWorldSwing

L'argomento al compilatore Java (javac) è un file (che è il motivo per Start/HelloWorldSwing.java probabilmente ha funzionato), ma l'argomento all'interprete Java (java) è un nome di classe.

Ecco perché non si aggiunge i .class nella riga di comando, e dal momento che non esiste una categoria denominata start/HelloWorldSwing Si ottiene quel messaggio di errore (NoClassDefFoundError), che recita "Non c'è definizione di classe trovato con quel nome)

Per semplificare le cose, compilare ed eseguire i primi programmi dalla stessa directory in cui si trovano i file .java.

+0

Ha fatto; guarda il primo paragrafo della domanda. –

+0

@mmyers. Non l'ho notato – OscarRyz

1

provato il codice funziona bene assicurarsi che il proprio nella stessa directory del file Java e fare

javac HelloWorldSwing.java 
java HelloWorldSwing 
3

Dove stai invocando il comando java da? Dalla tua descrizione, HelloWorldSwing.class si trova nella cartella "start", ma non è in un pacchetto. Questa è probabilmente la fonte dell'errore. Prova:

cd start 
java HelloWorldSwing 

EDIT: il codice dal tutorial ha ancora una "package start;" dichiarazione in esso. L'hai rimosso? In caso contrario, metti HelloWorldSwing nella cartella "start" ed esegui

java start.HelloWorldSwing 

dalla cartella corrente.

Vedere anche lo package tutorial.

+0

Non se la classe contiene una direttiva di pacchetto. –

+0

@Pourquoi Litytestdata: cosa non succede? –

+0

@mmyers: Yeap, probabilmente l'errore è lì, nel pacchetto di partenza. :) – OscarRyz

1

Il codice che hai collegato non è lo stesso del codice che hai incluso nella tua domanda. Ha questa riga nella parte superiore:

package start; 

In Java, la struttura del pacchetto deve essere rispecchiata dalla struttura di directory. Quindi se le tue classi sono in un pacchetto chiamato 'start', i file di classe compilati devono trovarsi in una directory chiamata 'start'. Quindi, assicurarsi che HelloWorldSwing.class si trova nella directory 'start' ed eseguire il seguente modulo la directory principale:

java start.HelloWorldSwing 
0

Basta aggiungere una riga:

import java.awt.*;

0

si può compilarlo da:

javac HelloWorldSwing.java 

è possibile eseguirlo da:

java -cp . HelloWorldSwing.java 

questo funziona davvero.

Problemi correlati