2013-07-23 124 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 

主要

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

} 

框架類無功能(僅構造函數)

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文件在一個單一的編譯調用更好的可訪問編譯器。 例如:

javac Frame.java Chat.java 

一個問題可能是,如果Frame.java有阻止它編譯所以沒有Frame.class編譯錯誤。

+0

他們說我不得不導入這個,也是這個假嗎?而且我怎樣才能擁有類路徑,或者我怎樣才能在一次調用中編譯所有內容?與javac * .java?因爲當我用javac * .java編譯它,然後嘗試啓動它時,我得到一個NoClassDefFoundError。 –

+0

如果你想使用自己的Frame.class,那麼你不能導入任何其他的Frame.class,否則系統會使用錯誤的。當我在1996年學習Java時,我曾用javac * .java進行編譯,但很久以前我轉向使用IDE,如eclipse或netbeans。因此,我不確定在命令行上使用javac編譯時是否發生了一些更改。由於註銷已經提到它對這個問題的評論,所以我還建議使用IDE,因爲它消除了這些技術問題(但可能會引入其他問題) – mschenk74

+0

我使用IDE,但我想讓它可以運行於朋友,因爲這是他的。所以我怎樣才能讓它爲其他人運行? –

1

你需要在你的文件的開頭添加下面的導入行:

import java.awt.Frame; 

根據你的口味,如果你在java.awt包中使用其他類,你可能需要使用此:

import java.awt.*; 
+0

也許是一個愚蠢的問題,但是當我導入這個時,我怎麼能從Frame調用函數呢? –

+0

你不需要改變任何東西。所有你需要的是添加導入線。然後你可以調用'Frame'函數而不需要改變任何東西。 – tbodt

+0

@AlexanderKnotek'Frame'是一個駐留在java.awt'包中的類。當你說'Frame frm = new Frame();'時,這意味着你創建了Frame類的實例。並通過該實例可以調用可用的方法。 – Smit

1

所有的答案都在說進口java.awt.Frame,但是,可能會有一些其他Frame類你需要導入。這個Frame類將屬於您要編譯的API包。

+0

問題是當我的iport java.awt.Frawe比我的方法得到一個錯誤!該方法是不確定的類型框架 –

+0

是的,我知道,不要這樣做。你需要一個不同的'Frame'類。 –