【问题标题】:java 7 features not working on ubuntu with java version "1.7.0_51"java 7 功能不适用于 java 版本“1.7.0_51”的 ubuntu
【发布时间】:2014-04-16 03:59:49
【问题描述】:

根据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 的提示。 ;)(如果您正在阅读这篇文章并且遇到同样的问题,请阅读 cmets。我链接到描述如何在 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 中发现的菱形符号语法不正确,或者在正确的情况下不正确。此错误在 cmets 中显示为 1。

在 try 块中创建 Scanner 对象产生的其他错误是对资源的尝试,这也是 Java 7 的一个特性。此行在源码中上面标有2。

有人知道我错过了什么吗?

【问题讨论】:

  • 现在做javac -version
  • 另外,它是useDelimiter
  • 你是从任何 IDE 运行它还是直接用 javac 编译?
  • @JigarJoshi 直接从 shell 编译
  • 我更新了我的问题,谢谢@SotiriosDelimanolis :D 你知道我在使用javac 时如何更改运行的java 版本吗?

标签: java ubuntu java-7 diamond-operator


【解决方案1】:

检查您的 PATH 环境变量,似乎它指向的是旧的 JDK。

您可以通过 using 查看正在使用的 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

有用的链接:

Environment variables in Ubuntu

Setting a PATH value permanently

【讨论】:

  • 太棒了。我只是使用update-alternatives 命令来选择要运行的javac 的哪个版本并且它有效。 :D 你在这里发布的内容非常有帮助。我将不得不考虑修改我的 $PATH 变量。感谢您解决这个复杂的问题。我也忘记了which 命令。这里的东西很棒。谢谢@lex
【解决方案2】:

听起来您的代码没有在 JDK 7 下编译。检查编译器的版本(如 Sotirios 所述)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多