2013-07-23 19 views
5

Avevo programmato diversi programmi e ne avevo compilati alcuni, ma so che ho programmato un Chat messenger. E quando compilo il server o il client ottengo sempre un errore da javac. "errore: impossibile trovare il simbolo". E sia per l'errore sia per il costruttore di un'altra classe come dovrebbe costruirvi. esempio:Errore Javac: Impossibile trovare il Simbolo

Chat.java:11 error: cannot find symbol 
         Frame frm = new Frame(); 
            ^
Symbol: class Frame 
location: class Chat 
Chat.java:11 error: cannot find symbol 
         Frame frm = new Frame(); 
        ^
Symbol: class Frame 
location: class Chat 

PRINCIPALI Classe

package main; 

public class Chat { 

public static void main(String args[]){ 

    Frame frm = new Frame(); 

    frm.setLayout(null); 
    frm.setVisible(true); 
    frm.setSize(800, 600); 
    frm.setResizable(false); 
    // a loop who wait for an true boolean 
    frm.abfrage(); 

    while(true){ 
     frm.readChat(); 
    } 
} 

} 

telaio senza funzioni (solo costruttore)

package main; 

//action + windowlistener + event import; 

//Inputreader,writer,reader and IOException import; 

//socket import + exception; 

//.. there are some Javax.swing imports; 

public class Frame extends JFrame { 

Client client; 

JPanel textPanel; 
static boolean start; 
static JTextArea messengerText; 
JTextField writenText; 
JTextField portInfo; 
JTextField hostInfo; 
JButton senden; 
JButton connect; 

public String writenString; 
public String chatString; 
int port; 
String adress; 

public Frame(){ 
    super("Chat by lionlak"); 

//  this.client = client; 

    client = new Client("localhost",5483); 

    setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
    //Deklarationen 
    start = false; 
    writenString = "Hallo vom Client"; 
    chatString = "Chat by lionlak"; 

    //Konstruktoren 
     //JPanel 
    textPanel = new JPanel(); 
     //JTextField 
    writenText = new JTextField(); 
    portInfo = new JTextField(); 
    hostInfo = new JTextField(); 

    messengerText = new JTextArea(); 
     //JButton 
    senden = new JButton("SENDEN"); 
    connect = new JButton("Connect"); 
    //Listener 
    senden.addActionListener(new actionListener()); 
    connect.addActionListener(new actionListener()); 

    addWindowListener(new windowHandler()); 

    //Eigenschaften 
     //JPanel 
    textPanel.setLayout(null); 
    textPanel.setBounds(10,150,490,780); 
     //JTextField 
    portInfo.setBounds(120,10,100,40); 
    portInfo.setText("5483"); 
    hostInfo.setBounds(10, 10, 100, 40); 
    hostInfo.setText("127.0.0.1"); 
    messengerText.setBounds(0,0,380,290); 
    messengerText.setText(chatString); 
    writenText.setBounds(0, 310, 280, 100); 
    writenText.setText("Deine Nachricht!"); 
     //JButton 
    senden.setBounds(290, 310, 100, 40); 
    connect.setBounds(230, 10, 100, 40); 

    //Add 
    textPanel.add(messengerText); 
    textPanel.add(writenText); 
    textPanel.add(senden); 
    add(hostInfo); 
    add(portInfo); 
    add(connect); 
    add(textPanel); 
} 
+1

import java.awt.Frame; –

+1

È necessario includere più informazioni. Ad esempio, il codice che usa 'Frame'. Al momento, la maggior parte delle persone presume che tu stia facendo riferimento a 'java.awt.Frame', tuttavia è possibile che tu non lo sia. –

+1

la mia raccomandazione è: usare un IDE come Eclipse, sarebbe d'aiuto. e, ovviamente, studia abbastanza Java per capire le basi. – logoff

risposta

7

Nel tuo Chat.java stai facendo riferimento al tuo Frame.class che si trova nello stesso pacchetto. Quindi non è necessario importare.

Ma Frame.class deve essere accessibile al compilatore, aggiungendolo al classpath del compilatore o meglio compilando tutti i file java in una singola chiamata di compilazione. Per esempio:

javac Frame.java Chat.java 

Un problema potrebbe essere se il Frame.java ha errori di compilazione che gli impedisce di compilazione in modo che non ci sia Frame.class.

+0

hanno detto che dovevo importarlo, anche questo è falso? E come posso avere il classpath o come posso compilare tutto in una sola chiamata? con javac * .java? Perché quando lo compilo con javac * .java e poi provo ad avviarlo, allora ottengo un NoClassDefFoundError. –

+0

Se si desidera utilizzare il proprio Frame.class, non è necessario importare nessun altro Frame.class, altrimenti il ​​sistema utilizzerà quello sbagliato. Quando ho imparato Java nel 1996, mi sono abituato a compilare con javac * .java, ma molto tempo fa sono passato a utilizzare IDE come eclipse o netbeans. Pertanto non sono sicuro che ci siano state alcune modifiche durante la compilazione con javac sulla riga di comando. Come logoff ha già menzionato un commento alla domanda, vorrei anche raccomandare di utilizzare un IDE poiché elimina questo tipo di problemi tecnici (ma potrebbe introdurre altri problemi) – mschenk74

+0

Io uso l'IDE, ma voglio renderlo eseguibile per un amico , perché questo è per lui. Come posso renderlo eseguibile per altre persone? –

1

è necessario aggiungere la seguente riga di importazione all'inizio del file:

import java.awt.Frame; 

A seconda dei vostri gusti, e se si utilizzano altre classi nel pacchetto java.awt, si può decidere di utilizzare questo:

import java.awt.*; 
+0

forse una domanda stupida, ma quando la importa, come posso chiamare le funzioni da Frame allora? –

+0

Non è necessario modificare nulla. Tutto ciò che serve è aggiungere la riga di importazione. È quindi possibile chiamare le funzioni 'Frame' senza modificare nulla. – tbodt

+0

@AlexanderKnotek 'Frame' è una classe che risiede nel pacchetto' java.awt'. Quando dici 'Frame frm = new Frame();', significa che stai creando l'istanza della classe Frame. e attraverso quell'istanza puoi chiamare i metodi disponibili. – Smit

1

Tutte le risposte dicono di importare java.awt.Frame, però, ci potrebbe essere qualche altro Frame classe che devi importare. Questa classe Frame apparterrà al pacchetto API che stai cercando di compilare.

+0

il problema è quando sono iport java.awt.Frawe rispetto al metodo che ottengo un errore! Il metodo non è definito per il tipo di frame –

+0

Sì, lo so, non farlo. Hai bisogno di una diversa classe 'Frame'. –

Problemi correlati