Особенности Java 7 не работают на Ubuntu с Java версии «1.7.0_51»

1

Согласно java -version это то, на что похожа моя среда Java Ubuntu:

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, является неправильным синтаксисом или чем-то, когда это правильно. Эта ошибка показана в комментарии выше.

Другие ошибки, связанные с созданием объекта Scanner в блоке try, - это попытка с ресурсами, которая также является функцией Java 7. Эта строка отмечена 2 в исходном коде.

Кто-нибудь знает, что мне не хватает?

  • 2
    Теперь сделайте javac -version .
  • 1
    Также это useDelimiter .
Показать ещё 6 комментариев
Теги:
java-7
diamond-operator

2 ответа

0
Лучший ответ

Похоже, что ваш код не скомпилирован под JDK 7. Проверьте версию своего компилятора (как упоминал Сотириос)

1

Проверьте переменную среды 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

Полезные ссылки:

Переменные среды в Ubuntu

Постоянное значение PATH

  • 0
    классно. Я просто использовал команду update-alternatives чтобы выбрать версию javac для запуска, и это сработало. : D То, что вы публикуете здесь, очень полезно, хотя. Мне придется посмотреть на изменение моей переменной $ PATH. Спасибо за решение этой сложной проблемы. Также я забыл о том, which команда. Отличный материал здесь. Спасибо @lex

Ещё вопросы

Сообщество Overcoder
Наверх
Меню