2013-07-23 125 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'类。 –