Функции Java 7 не работают на Ubuntu с Java версии "1.7.0_51"
В соответствии с java -version
Вот как выглядит моя среда Ubuntu Java:
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
мой javac -version
является:
javac 1.6.0_30
Как мне изменить версию Javac? Спасибо за подсказку @SotiriosDelimanolis.;) (Если вы читаете это и у вас возникла та же проблема, прочитайте комментарии. Я ссылаюсь на страницу, которая описывает, как это сделать в Ubuntu).
Я пытаюсь запустить следующую программу:
import java.util.*;
class Separate {
public static void main(String[] args) {
String text = "<head>first program</head> <body>hello world</body>";
Set<String> words = new TreeSet<>(); //1 Compiler error
try(Scanner tokenizingScanner = new Scanner(text)) { //2 Compiler Error
tokenizingScanner.useDelimeter("\\W");
while(tokenizingScanner.hasNext()) {
String word = tokenizingScanner.next();
if(!word.trim().equals("")) {
words.add(word);
}
} //end while
} //end try
for(String word: words) {
System.out.print(word + " ");
} //end for
}
Я получаю эти ошибки при попытке компиляции:
Separate.java:8: illegal start of type
Set<String> words = new TreeSet<>();
^
Separate.java:9: '{' expected
try(Scanner tokenizingScanner = new Scanner(text)) {
^
Separate.java:9: ')' expected
try(Scanner tokenizingScanner = new Scanner(text)) {
^
Separate.java:9: ';' expected
try(Scanner tokenizingScanner = new Scanner(text)) {
^
Separate.java:9: 'try' without 'catch' or 'finally'
try(Scanner tokenizingScanner = new Scanner(text)) {
^
Separate.java:24: reached end of file while parsing
}
^
6 errors
Кажется, что эти ошибки не должны быть ошибками. Первая ошибка показывает, что обозначение ромба, найденное в Java 7, не является правильным синтаксисом или чем-то еще, когда это правильно. Эта ошибка показана с 1 выше в комментариях.
Другие ошибки, связанные с созданием объекта Scanner в блоке try, - это попытка использования ресурсов, которая также является функцией Java 7. Эта строка отмечена 2 выше в исходном коде.
Кто-нибудь знает, чего мне не хватает?
2 ответа
Похоже, ваш код не скомпилирован под JDK 7. Проверьте версию вашего компилятора (как упоминал Sotirios)
Проверьте переменную среды PATH, похоже, она указывает на более старый JDK.
Вы можете проверить, какой javac используется, используя
which javac
Вы можете напрямую вызвать новый JDK, используя его полный путь, например
/usr/java/jdk1.7.0_51/bin/javac
Но если вы хотите вызывать javac в любом месте, вам придется изменить переменную среды PATH, чтобы она указала на более новый JDK.
Как вы изменяете свой PATH, зависит от ваших настроек. Вам придется удалить старый путь из PATH, который указывает на JDK1.6, и добавить новый путь, который указывает на JDK1.7
Пример:
Если
which javac
производит
/usr/java/jdk1.6.0_30/bin/javac
Тогда ваш путь может выглядеть примерно так, обратите внимание на jdk1.6.0_30
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/java/jdk1.6.0_30/bin
Измените это на правильный путь (jdk1.7.0_51)PATH=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/java/jdk1.7.0_51/bin
Полезные ссылки: