В моем Java приложении, есть метод и имеют следующий код:Локальная переменная Java, доступная изнутри внутреннего класса; должен быть объявлен окончательным, почему он работает в NetBeans?
JButton Button = new JButton(Content);
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
doSomething(Button.getText());
}
});
Он собирает и работает отлично с NetBeans 8.1, но сегодня, когда я пытался скомпилировать проект из командной строки, он дал мне следующее сообщение об ошибке:
local variable Button is accessed from within inner class; needs to be declared final
Мой вопрос: почему же код соответствует и отлично работает с NetBeans 8.1, но не может скомпилировать в командной строке?
Моя командная строка Java версия: 1.8.0_77
И мой NetBeans Java версия: 1.8.0_65
Это не имеет значения, так почему NetBeans не считает ошибку?
Edit: Woo, BIG СЮРПРИЗ для меня, я просто сделал чек на JAVAC:
C: \ Users \ USER> Java -version Java версии "1.8.0_77"
C: \ Пользователи \ USER> javac -version javac 1.7.0_40
Подождите минуту, я на 100% смущен большим временем, сначала я никогда не знал, что есть команда «javac -version», я думал, что «java -verison» скажу мне как java, так и javac, и я предполагаю, что они одинаковы, во-вторых, когда я установил Java, я думал, что установщик автоматически обновит его, а javac - часть java, поэтому она должна быть внутренне непротиворечивой, но это определенно НЕ, поэтому как моя java -версия отличается от моей javac -version? Другими словами, как я могу доверять Oracle для установки java и javac в одно и то же время, если это не делает работу, значит ли это, что каждый раз, когда я обновляю Java, мне нужно как-то установить мой javac вручную? Я никогда этого не делал, так почему и как это могло произойти?
Какова целевая платформа для вашего проекта Netbeans? Вы уверены, что используете 'javac', который, как вы думаете, используете? Пути командной строки иногда могут вас удивить.Ваш код определенно выглядит так, как будто он должен компилироваться для Java 8. – biziclop
Является ли ваша командная строка предыдущей версией Java, до 1.8? – rgettman
Он должен скомпилировать, проверить версию 'Javac' на командной строке. – 11thdimension