2011-11-10 15 views
6

He estado tratando de resolver esto, lo he ejecutado en diferentes programas, así que definitivamente está en el código. Probablemente algo fácil también. El error dice¿Qué causa "No se puede encontrar el símbolo" y cómo solucionarlo?

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

Aquí está el código:

// 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 Tratando de decidir si eso es sarcasmo -> –

Respuesta

11

Lea el mensaje de error, me encanta el mensaje de error.

Toma algo de práctica, pero después de un tiempo que es fácil de ver con más claridad: acaba de leer todo el texto en negrita a continuación como una frase :)

error: cannot find symbol [...]

symbol: variable password

location: [in] class Password2.EnterButtonHandler

no hay nada nombrado passworden ese ámbito/contexto (EnterButtonHandler).

Happy coding.


Consejo: hay un local de variables con el mismo nombre en un diferente alcance/contexto ... tal vez no debería ser un local de variables ? Ver The Java Tutorial: Variables para más :)

+1

+1 por recomendar amar :-) – kleopatra

0

password es local a la Password2 constructor.

Se debe pasar o una variable de instancia.

0

Su clase no tiene una definición para password. Por lo tanto, el error al pasarlo al método equals.

0

No puede encontrar la variable password, que, como la ha codificado, solo existe en el constructor Password2. Tendrá que hacer que password sea una variable miembro de clase o pasarlo al constructor de sus clases Handler, para que puedan tener una referencia al mismo.

0
password 

es una variable local declarada en el constructor de Contraseña2. No está en el alcance en su EnterButtonHandler.actionPerformed method. Haz que sea una variable de instancia para resolver.

Cuestiones relacionadas