2011-11-10 14 views
6

Ho cercato di capirlo, l'ho eseguito in diversi programmi quindi è sicuramente nel codice. Probabilmente anche qualcosa di facile. L'errore diceQuali sono le cause "Impossibile trovare il simbolo" e come risolverlo?

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

Ecco il codice:

// 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 Cercando di decidere se è il sarcasmo -> –

risposta

11

Leggere il messaggio di errore, amare il messaggio di errore.

Ci vuole una certa pratica, ma dopo un po 'E' facile vedere più chiaramente: appena letto tutto il testo in grassetto di seguito come una frase :)

error: cannot find symbol [...]

symbol: variable password

location: [in] class Password2.EnterButtonHandler

non c'è nulla chiamato passwordin tale ambito/contesto (EnterButtonHandler).

Felice codifica.


Suggerimento: c'è un locale variabile con lo stesso nome in un diverso portata/contesto ... forse non dovrebbe essere una variabile locale? Vedere The Java Tutorial: Variables per più :)

+1

+1 per raccomandare di amare :-) – kleopatra

0

password è locale al costruttore Password2.

Deve essere passato in giro o una variabile di istanza.

0

La classe non ha una definizione per password. Quindi, l'errore quando si passa al metodo equals.

0

Non è possibile trovare la variabile password, che, come è stato codificato, esiste solo nel costruttore Password2. Dovrai rendere password una variabile membro della classe o passarla al costruttore delle tue classi Handler, in modo che possano avere un riferimento.

0
password 

è una variabile locale dichiarata nel costruttore di Password2. Non è compreso nel tuo EnterButtonHandler.actionPerformed method. Rendilo una variabile di istanza da risolvere.

Problemi correlati