2013-07-23 30 views
5

私はいくつかのプログラムをプログラムしていましたが、それらのいくつかをコンパイルしましたが、私はチャットメッセンジャーをプログラムしたことを知っています。そして、私がサーバーまたはクライアントをコンパイルするとき、私は常にjavacからエラーを受け取ります。 "エラー:シンボルを見つけることができません"。そして、両方とも、エラーは他のクラスのコンストラクタにあります。 例:あなたは、ファイルの先頭に次のインポート行を追加する必要があり機能なしJavacエラー:シンボルが見つかりません

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 

MAIN

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(); 
    } 
} 

} 

Frameクラス(のみコンストラクタ)

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

詳細を入力する必要があります。たとえば、 'Frame'を使うコードです。現時点では、ほとんどの人が 'java.awt.Frame'を参照していると仮定していますが、そうでない可能性もあります。 –

+1

私のお勧めは:EclipseのようなIDEを使うと、それが役に立ちます。そして明らかに、基礎を理解するのに十分なJavaを研究してください。 – logoff

答えて

7

Chat.javaでは、同じパッケージ内にある独自のFrame.classを参照しています。だから、輸入の必要はありません。

しかし、Frame.classは、コンパイラのクラスパスに追加するか、すべてのJavaファイルを単一のコンパイル呼び出しでコンパイルするかのどちらかでコンパイラにアクセスできる必要があります。 例えば:Frame.javaは何Frame.classがないようにコンパイルすることを妨げるコンパイルエラーを持っている場合

javac Frame.java Chat.java 

一つの問題はあるかもしれません。

+0

彼らは私がこれをインポートしなければならないと言った、これも偽ですか?そして、どうやってクラスパスを持つことができますか?または、1回の呼び出しですべてをコンパイルする方法はありますか? javac * .javaで? javac * .javaでコンパイルしてから起動しようとすると、NoClassDefFoundErrorが発生するためです。 –

+0

独自のFrame.classを使用する場合は、他のFrame.classをインポートしないでください。そうしないと、システムは間違ったものを使用します。 1996年にJavaを学びましたが、javac * .javaでコンパイルしていましたが、ずっと前にEclipseやNetbeansのようなIDEを使っていました。したがって、コマンドラインでjavacでコンパイルするときに変更があったかどうかはわかりません。ログオフは既に質問にコメントがあるので、IDEを使用することをお勧めします。これは技術的な問題を解決しますが(他の問題を引き起こすかもしれません) – mschenk74

+0

私はIDEを使用しますが、友人のために実行可能にしたいこれは彼のためだからね。だから私は他の人たちのためにそれを実行可能にすることができますか? –

1

import java.awt.Frame; 

あなたの好みに応じて、あなたがjava.awtパッケージ内の他のクラスを使用する場合は、これを使用することもできます。

import java.awt.*; 
+0

多分疑問な質問ですが、これをインポートすると、フレームからどのように関数を呼び出すことができますか? –

+0

何も変更する必要はありません。必要なのは、インポート行を追加することだけです。何も変更せずに 'Frame'関数を呼び出すことができます。 – tbodt

+0

@AlexanderKnotek 'Frame'は' java.awt'パッケージにあるクラスです。 'Frame frm = new Frame();'と言うとき、それはFrameクラスの作成インスタンスを意味します。そのインスタンスを通して、利用可能なメソッドを呼び出すことができます。 – Smit

1

すべての答えは、しかし、これは他のいくつかのFrameクラスがあるかもしれません、java.awt.Frameをインポートするために言っていますあなたはインポートする必要があります。このFrameクラスは、コンパイルしようとしているAPIパッケージに属します。

+0

問題は、私の方法よりもiport java.awt.Fraweです。エラーが発生します。メソッドはタイプフレームのために定義されていません –

+0

はい、私は知っています、それをしないでください。別の 'Frame'クラスが必要です。 –

関連する問題