Функции 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

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

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

Установка значения PATH навсегда

Другие вопросы по тегам