2013-07-23 93 views
5

Tôi đã lập trình một số chương trình và tôi đã biên soạn một số chương trình, nhưng biết tôi đã lập trình Trình nhắn tin trò chuyện. Và khi tôi biên dịch Máy chủ hoặc Máy khách, tôi luôn gặp lỗi từ javac. "lỗi: không thể tìm thấy biểu tượng". Và bởi cả hai lỗi là tại các nhà xây dựng của lớp khác làm thế nào nên xây dựng ở đó. dụ:Lỗi Javac: Không thể tìm thấy Symbol

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 

CHỦ

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

} 

KHUNG lớp mà không cần chức năng (chỉ Constructor)

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

nhập java.awt.Frame; –

+1

Bạn cần thêm thông tin. Ví dụ, mã sử dụng 'Frame'. Tại thời điểm này, hầu hết mọi người cho rằng bạn đang đề cập đến 'java.awt.Frame', tuy nhiên có thể bạn không có. –

+1

khuyến nghị của tôi là: sử dụng một IDE như Eclipse, nó sẽ giúp ích. và rõ ràng là nghiên cứu đủ Java để hiểu cơ sở. – logoff

Trả lời

7

Trong Chat.java, bạn đang tham chiếu Frame.class của riêng bạn nằm trong cùng một gói. Vì vậy, không cần nhập khẩu.

Nhưng Frame.class phải được truy cập vào trình biên dịch, hoặc bằng cách thêm nó vào đường dẫn lớp của trình biên dịch hoặc tốt hơn bằng cách biên dịch tất cả các tệp java của bạn trong một cuộc gọi biên dịch đơn. Ví dụ:

javac Frame.java Chat.java 

Một vấn đề có thể là nếu Frame.java có lỗi biên dịch có thể ngăn chặn nó từ biên soạn sao cho không có Frame.class.

+0

họ nói rằng tôi đã phải nhập khẩu này, cũng là sai? Và làm thế nào tôi có thể có classpath hoặc làm thế nào tôi có thể biên dịch tất cả trong một cuộc gọi? với javac * .java? Bởi vì khi tôi biên dịch nó với javac * .java và sau đó cố gắng để bắt đầu nó, sau đó tôi nhận được một NoClassDefFoundError. –

+0

Nếu bạn muốn sử dụng Frame.class của riêng bạn, sau đó bạn không phải nhập bất kỳ Frame.class khác, nếu không hệ thống sẽ sử dụng sai. Khi tôi học Java vào năm 1996, tôi đã từng biên dịch với javac * .java, nhưng từ lâu tôi đã chuyển sang sử dụng IDE như eclipse hoặc netbeans. Vì vậy, tôi không chắc chắn nếu có một số thay đổi khi biên dịch với javac trên dòng lệnh. Khi đăng xuất đã đề cập đến nó một bình luận cho câu hỏi, tôi cũng khuyên bạn nên sử dụng IDE vì nó loại bỏ những vấn đề kỹ thuật này (nhưng có thể giới thiệu các vấn đề khác) – mschenk74

+0

Tôi sử dụng IDE, nhưng tôi muốn làm cho nó chạy được cho một người bạn bởi vì điều này là dành cho anh ấy. Làm thế nào tôi có thể làm cho nó có thể chạy được cho người khác? –

1

Bạn cần phải thêm dòng nhập khẩu sau vào phần đầu của tập tin của bạn:

import java.awt.Frame; 

Tùy thuộc vào sở thích của bạn, và nếu bạn sử dụng các lớp khác trong gói java.awt, bạn có thể muốn sử dụng này:

import java.awt.*; 
+0

có thể là một câu hỏi ngớ ngẩn, nhưng khi tôi nhập này, làm thế nào tôi có thể gọi các chức năng từ Frame sau đó? –

+0

Bạn không cần phải thay đổi bất cứ điều gì. Tất cả những gì bạn cần là thêm dòng nhập. Sau đó, bạn có thể gọi các chức năng 'Khung hình' mà không thay đổi bất cứ điều gì. – tbodt

+0

@AlexanderKnotek 'Khung' là một lớp nằm trong gói' java.awt'. Khi bạn nói 'Frame frm = new Frame();', điều đó có nghĩa là trường hợp tạo của bạn trong lớp Frame. và thông qua ví dụ đó, bạn có thể gọi các phương thức có sẵn. – Smit

1

Tất cả các câu trả lời đang nói để nhập khẩu java.awt.Frame, tuy nhiên, có thể có một số lớp Frame khác bạn cần nhập. Lớp học Frame này sẽ thuộc về gói API bạn đang cố gắng biên dịch.

+0

vấn đề là khi tôi iport java.awt.Frawe so với methode của tôi bị lỗi! Các methode là undefine cho các loại khung –

+0

Vâng, tôi biết, không làm điều đó. Bạn cần một lớp 'Frame' khác. –

Các vấn đề liên quan