«Не может ссылаться на неконечную локальную переменную, определенную во включающей области». после изменения среды выполнения - PullRequest
0 голосов
/ 26 мая 2020

У меня проблема с кодом Java в Eclipse. Когда я разрабатывал свою программу, всегда было предупреждение: «Путь сборки указывает среду выполнения JAVA SE 1.7 ...», и обнаружив это странным, я поискал его здесь и пришел к выводу, что мне нужно удалить Системная библиотека JRE [JSE-1.3] и добавить более свежую, что я и сделал.

Однако после применения новых библиотек все три моих файла в стадии разработки мгновенно получили множество предупреждений об ошибках. Не понимая, в чем была настоящая проблема, я попытался вернуть старые библиотеки в свойства своего проекта. Но после этого, хотя около 90% ошибок исчезли, некоторые еще остались. Заявление:

«Не может ссылаться на неконечную локальную переменную, определенную во включающей области». И он хочет, чтобы я поставил final для каждой отдельной переменной, которую я использую с ActionListener или MouseListener. Новое предупреждающее сообщение:

«Путь сборки указывает среду выполнения J2SE-1.3. В рабочей области нет установленных JRE, которые строго совместимы с этой средой».

Вот код, Прошу прощения, если я допустил ошибку, но я новичок в языке программирования и не могу найти решение для этого. Код упрощен до такой степени, что он не будет работать только с этим, показан только пример.

public class MainGUI {

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

        JFrame mainFrame = new JFrame("Physics Simulator");

            JButton exitButton = new JButton(" Exit ");
        exitButton.setVerticalAlignment(SwingConstants.TOP);
        exitButton.setBounds(331, 15, 80, 24);
        exitButton.setForeground(Color.BLACK);
        exitButton.setFont(new Font("Calibri", Font.PLAIN, 17));
        exitButton.setFocusPainted(false);
        exitButton.setBackground(SystemColor.scrollbar);

            JCheckBox exitAskingcheck = new JCheckBox("Exit without asking");
        exitAskingcheck.setSelected(false);
        exitAskingcheck.setFont(new Font("Verdana", Font.PLAIN, 11));
        exitAskingcheck.setBackground(SystemColor.scrollbar);
        exitAskingcheck.setBounds(775, 17, 133, 23);
        exitAskingcheck.setFocusPainted(false);

        exitButton.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent e) {

                if ( exitAskingcheck.isSelected() ) {
                System.exit(0); } else {

                    JFrame exitAsk = new JFrame("Physics Simulator");
                    exitAsk.getContentPane().setBackground(Color.BLACK);
                    exitAsk.setBackground(Color.BLACK);
                    exitAsk.setSize(400,200);

                    JButton no = new JButton("Not yet...");
                    no.setFont(new Font("Verdana", Font.PLAIN, 11));
                    no.setFocusPainted(false);
                    no.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {

                            exitAsk.setVisible(false);
                            exitAsk.removeAll();
                            exitAsk.setEnabled(false);

                        }
                    });

                    JButton yes = new JButton("Yes");
                    yes.setFont(new Font("Verdana", Font.PLAIN, 11));
                    yes.setFocusPainted(false);
                    yes.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            System.exit(0);
                        }
                    });

                    JLabel askText = new JLabel("Are you sure you want to leave?");
                    askText.setForeground(Color.WHITE);
                    askText.setFont(new Font("Verdana", Font.PLAIN, 15));
                    exitAsk.getContentPane().setLayout(null);
                    exitAsk.getContentPane().add(no);
                    exitAsk.getContentPane().add(yes);
                    exitAsk.getContentPane().add(askText);
                    no.setBounds(220,100,100,30);
                    yes.setBounds(40,100,100,30);
                    askText.setBounds(64,27,250,30);

                    exitAsk.setVisible(true);
                    exitAsk.setAlwaysOnTop(true);
                    exitAsk.setLocationRelativeTo(null);
                    exitAsk.setResizable(false);

                }
            }
        });

Сообщение об ошибке выдается в переменной exitAskingcheck on:

if ( exitAskingcheck.isSelected() ) {

А также при каждом exitAsk on:

          JButton no = new JButton("Not yet...");
        no.setFont(new Font("Verdana", Font.PLAIN, 11));
        no.setFocusPainted(false);

        no.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                    exitAsk.setVisible(false);
                    exitAsk.removeAll();
                    exitAsk.setEnabled(false);

            }
        });

РЕДАКТИРОВАТЬ: Я исправил предупреждение «Путь сборки», установив библиотеку рабочей области по умолчанию (я не устанавливал ее раньше, потому что ... Глупость). Однако он все еще просит меня классифицировать упомянутые переменные как final . До внесения всех этих изменений свойств они никогда не были необходимы. Я мог без проблем запускать как Action, так и Mouse Listeners, теперь кажется, что они неправильно распознают переменные при упоминании их внутри Listener.

Мой вопрос: поскольку они не спрашивали об этом раньше, нужно ли мне ставить final для каждой переменной или есть способ вернуться к «нормальному»?

1 Ответ

0 голосов
/ 26 мая 2020

Не используйте старую версию, слишком старую, попробуйте использовать более новую JDK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...