У меня проблема с кодом 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 для каждой переменной или есть способ вернуться к «нормальному»?