2011-11-10 38 views
6

Tôi đã cố gắng tìm ra điều này, tôi đã chạy nó trong các chương trình khác nhau vì vậy nó chắc chắn trong mã. Có lẽ là một cái gì đó dễ dàng quá. Các lỗi nóiNguyên nhân "Không thể tìm thấy biểu tượng" và cách khắc phục?

Password2.java:90: error: cannot find symbol if(pw.equals(password)) ^ symbol: variable password location: class Password2.EnterButtonHandler 1 error

Đây là mã:

// Password1.java 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Password2 extends JFrame // inherits from the JFrame class 
{ 
    // static final variables to hold frame dimensions (in pixels) 
    private static final int WIDTH = 400; 
    private static final int HEIGHT = 120; 

    //declare labels, fields, buttons, etc. 
    private JLabel enterLabel, validLabel, resultLabel; 
    private JTextField pwTextField; 
    private JButton enterB, clearB; 

    private EnterButtonHandler ebHandler; 
    private ClearButtonHandler cbHandler; 

    public Password2() // constructor defines frame 
    { 
      setTitle("Password Checker"); // set the title of the frame 
     setSize(WIDTH, HEIGHT); // set the frame size 

     // prepare the container 
     Container pane = getContentPane(); 
     GridLayout aGrid = new GridLayout(3, 2, 5, 5); // create a 3 row 2 column layout 
     pane.setLayout(aGrid); // set the layout for the frame 

     String password = "hello"; 

     //instantiate JLabels 
     enterLabel = new JLabel("Enter Password: "); 
     validLabel = new JLabel("Validation: "); 
     resultLabel = new JLabel(""); 

     //instantiate text fields 
     pwTextField = new JPasswordField(30); 

     //instantiate buttons 
     enterB = new JButton("Enter"); 
     clearB = new JButton("Clear"); 

     //initialize button handler 
     ebHandler = new EnterButtonHandler(); 
     enterB.addActionListener(ebHandler); 

     //initialize button handler 
     cbHandler = new ClearButtonHandler(); 
     clearB.addActionListener(cbHandler); 


     pane.add(enterLabel); 
     pane.add(pwTextField); 
     pane.add(validLabel); 
     pane.add(resultLabel); 
     pane.add(enterB); 
     pane.add(clearB); 

     //calls center frame method 
     centerFrame(WIDTH, HEIGHT); 

    }// end constructor 

    //methood to center GUI on screen 
    public void centerFrame(int frameWidth, int frameHeight) 
    { 
     //create toolkit object 
     Toolkit aToolkit = Toolkit.getDefaultToolkit(); 

     //create a dimension object with user screen information 
     Dimension screen = aToolkit.getScreenSize(); 

     //assign x, y position of upper left corner of frame 
     int xUpperLeft = (screen.width - frameWidth)/2; 
     int yUpperLeft = (screen.height - frameHeight)/2; 

     //method to position frame on user's screen 
     setBounds(xUpperLeft, yUpperLeft, frameWidth, frameHeight); 
    } 

    private class EnterButtonHandler implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      String pw = pwTextField.getText(); 

      if(pw.equals(password)) 
      { 
       resultLabel.setText("Password Accepted"); 
       pwTextField.setText(""); 
      } 
      else 
      { 
       resultLabel.setText("Password Rejected"); 
       pwTextField.setText(""); 
      } 
     } 
    } 
    private class ClearButtonHandler implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      resultLabel.setText(""); 
      pwTextField.setText(""); 
     } 

    } 
    public static void main(String [] args) 
    { 
     JFrame aPassword2 = new Password2(); // create the JFrame object 
     aPassword2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     aPassword2.setVisible(true); 
    } 
    } // end of class 
+1

@RobW Đang cố gắng quyết định xem đó có phải là mỉa mai -> –

Trả lời

11

Đọc thông báo lỗi, yêu thích thông báo lỗi.

Phải mất một thực tế, nhưng sau một lúc thật dễ dàng để nhìn thấy nó rõ ràng hơn: chỉ cần đọc qua văn bản in đậm dưới đây như là một câu :)

error: cannot find symbol [...]

symbol: variable password

location: [in] class Password2.EnterButtonHandler

Có gì tên passwordtrong đó phạm vi/bối cảnh (EnterButtonHandler).

Mã hóa vui vẻ.


Gợi ý: có một địa phương biến có cùng tên trong một khác nhau phạm vi/bối cảnh ... có lẽ nó không phải là một địa phương biến ? Xem The Java Tutorial: Variables để biết thêm :)

+1

+1 để đề xuất yêu thích :-) – kleopatra

0

password là địa phương để các nhà xây dựng Password2.

Nó phải được chuyển qua hoặc biến mẫu.

0

Lớp học của bạn không có định nghĩa cho password. Do đó, lỗi khi chuyển nó sang phương thức equals.

0

Nó không thể tìm thấy biến password, mà, như bạn đã mã hóa nó, chỉ tồn tại trong hàm tạo Password2. Bạn sẽ cần phải biến password biến thành viên của lớp hoặc chuyển nó cho hàm tạo của các lớp Handler của bạn, để chúng có thể tham chiếu đến nó.

0
password 

là biến cục bộ được khai báo trong hàm tạo của Password2. Nó không nằm trong phạm vi của bạn EnterButtonHandler.actionPerformed method. Biến nó trở thành một biến mẫu để giải quyết.

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