2011-11-10 22 views
6

Próbowałem to rozgryźć, uruchomiłem go w różnych programach, więc jest zdecydowanie w kodzie. Prawdopodobnie też jest to łatwe. Błąd mówiCo powoduje "Nie można znaleźć Symbol" i jak to naprawić?

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

Oto kod:

// 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 Próbuje zdecydować, czy to sarkazm -> –

Odpowiedz

11

Przeczytaj komunikat o błędzie, podoba mi się komunikat o błędzie.

To zajmuje trochę praktyki, ale po pewnym czasie łatwo to zobaczyć wyraźniej: wystarczy przeczytać całej pogrubioną czcionką poniżej jako zdanie :)

error: cannot find symbol [...]

symbol: variable password

location: [in] class Password2.EnterButtonHandler

Nie ma nic o nazwie passwordw tym zakresie/kontekście (EnterButtonHandler).

Szczęśliwe kodowanie.


Podpowiedź: jest lokalny zmienna o tej samej nazwie w inny zakres/kontekście ... Może to nie powinno być zmienną lokalną ? Zobacz The Java Tutorial: Variables dłużej :)

+1

+1 za polecanie miłości :-) – kleopatra

0

password jest lokalny do konstruktora Password2.

Powinny zostać przekazane dookoła lub zmienna instancji.

0

Twoja klasa nie ma definicji dla password. Stąd błąd podczas przekazywania go do metody equals.

0

Nie można znaleźć zmiennej password, która, jak już ją kodowałeś, istnieje tylko w konstruktorze Password2. Musisz albo utworzyć zmienną składową klasy password, albo przekazać ją do konstruktora klas Handler, aby mogły mieć do niej odniesienie.

0
password 

jest lokalna zmienna zadeklarowana w konstruktorze hasło2. To nie jest w zasięgu twojego EnterButtonHandler.actionPerformed method. Ustaw jako zmienną instancji do rozwiązania.

Powiązane problemy