无法在动作侦听器中定义的内部类中引用非final变量

时间:2013-12-06 15:35:42

标签: java swing

我收到的错误是“无法引用在其他方法中定义的内部类中的非最终变量

当我尝试设置我的计时器引用我构建的动作侦听器时,会发生这种情况!这个构造函数只显示一个标签,定时器所需的效果是运行动作监听器10秒,但我无法通过此错误。下面的代码显示了他的动作监听器以及他发出的问题。我把星星放在了有问题的地方。感谢

**ActionListener actListner = new ActionListener() {                         
        public void actionPerformed(ActionEvent event) {        
            lblgreenImage.setBounds(150,410,50,40);
            repaint();          
        }       
    };**


    btnEnter.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent ae) 
        {

            String username = txtUserName.getText();
            String accessCode = txtPin.getText();


            String dataSourceName = "securitysystem";
            String dbUrl = "jdbc:odbc:" + dataSourceName;

            try{
                //Type of connection driver used    
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                //Connection variable or object param: dbPath, userName, password
                Connection con = DriverManager.getConnection(dbUrl, "", "");

                Statement statement = con.createStatement();

                ResultSet rs = statement.executeQuery("select username, pin from securitysystem.employee where username = '" + username + "' and pin = '" + accessCode + "'");

                boolean nomatches=true;
                while(rs.next())
                {   
                    String checkrs = rs.getString("username");
                    String checkPin = rs.getString("Pin");
                    if (username.equals(checkrs)) {
                        if (accessCode.equals(checkPin)) {
                            **Timer timer = new Timer(500, actListner);**
                            **timer.start();**

1 个答案:

答案 0 :(得分:0)

似乎您尝试访问lblgreenImage中的本地变量AbstractClass。为了解决问题,您可以:

1)为final添加lblgreenImage修饰符,当你创建它时,就像下一个:

final JLabel lblgreenImage = new JLabel("labeel");

2)将lblgreenImage作为实例变量。

在java中阅读有关variables的更多信息。