Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как получить доступ к перем-ой из actionPerformed


Автор: freshAngel 21.7.2009, 16:00
Привет.
Проблема заключается в следующем.
Файл Main.java:

Код


public class Main {

public static void main(String[] args) throws IOException, AWTException {

JFrame frame = new JFrame();
frame.setSize(200,300);
frame.setLocationRelativeTo(null);
frame.setVisible(false);
    
Tray trayWindow = new Tray(frame);

}

}


Файл: tray.java

Код

public class Tray{


private SystemTray systemTray = SystemTray.getSystemTray();
TrayIcon trayIcon = new TrayIcon(ImageIO.read(new File("C:\\Patterns\\patchwork1.gif")), "Tray test application");

public Tray(JFrame frame) throws IOException, AWTException
{
   frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

    // Не могу получить доступ к переменной frame

    trayIcon.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        if(!frame.isVisible()) setVisible(true);
        setState(frame.NORMAL);
        systemTray.remove(trayIcon);
      }
    });

   systemTray.add(trayIcon);
} // Constructor

} /// Class
    


Не получается обратиться к переменной frame из actionPerfomed.

Автор: jeank 21.7.2009, 16:03
 А не должен ли быть frame  - final?

Автор: freshAngel 21.7.2009, 16:10
Цитата(jeank @ 21.7.2009,  16:03)
А не должен ли быть frame  - final?

Должен наверное  smile 
По крайней мере подсказка в NetBeans тоже что - то про final пишет.
Только вот вопрос! Для чего нужен final!? Почему так не работает!?

Добавлено
Да, с параметром final все заработало.
Спасибо!
Только зачем он нужен и почему без него не работает!?

Автор: jeank 21.7.2009, 16:20
ну все очень просто - когда ссылка объявляется как финал, это значит, что один раз указав ей на объект нельзя потом вторично указать на другой объект. Т.е. она как бы "прилипает" намертво к объекту, хотя сам объект может меняться как пожелает программист.
Т.о. образом обходят плохие ситуации, когда в листенере используется ссылка, которая в процессе может ссылаться на разные объекты.

Автор: freshAngel 21.7.2009, 17:20
Как познавательно!
Я знал что спецификатор final может использоваться для обозначения констант и отмены наследования, но про "прилипание" не знал.
Спасибо большое! Просветили!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)