-1

我正在尝试从我相对较新的 linux 命令行运行所有内容。

我正在尝试编译一个使用一些外部库的类,当我执行 javac classname.java 时,我收到警告......

It is recommended that the compiler be upgraded.
warning: /opt/pi4j/lib/pi4j-core.jar(com/pi4j/io/gpio/GpioPinOutput.class): major version 51 is newer than 50, the highest major version supported by this compiler.

即使这只是一个警告 - 我已经尝试在类文件上运行 java,这会导致

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/pi4j/io/gpio/GpioFactory : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at ControlGpioExample.main(ControlGpioExample.java:9)

我搜索了stackoverflow,发现了一篇建议使用交叉编译的帖子——我试过了

javac -target 1.6 ControlGpioExample.java 

我怎么知道要使用哪个目标?我是不是一直都在经历它们,直到它起作用?!

谢谢

4

4 回答 4

2

问题不是你正在编译的代码——而是你正在编译的代码在 pi4j-core.jar 中,它似乎是用 Java 7 构建的。

我强烈建议你升级JDK,基本上。要么,要么:

  • 查找使用 Java 6 构建的 pi4j 版本
  • 自己重建
于 2013-10-29T20:30:41.173 回答
0

请查看 pi4j (pi4j-native) 构建要求。我从这里带走了它们

  • gcc 4.6.3 或更新版本 (sudo apt-get install gcc)
  • git-core (sudo apt-get install git-core)
  • 一个工作的 JDK(OpenJDK 或 Oracle JDK)(sudo apt-get install openjdk-7-jdk)
  • 有效定义的 JAVA_HOME 环境变量
  • 接线Pi源和平台编译的二进制文件(...)

因此,正如其他答案已经暗示的那样,最好升级到 JDK 7。

基本上,pi4j 可能会使用 JDK7 中可用的一些功能,而您目前的基于 JDK6 的编译器无法处理这些功能。

于 2013-10-29T20:36:10.903 回答
0

您正在使用 Java 6(版本 50)编译使用已使用 Java 7(版本 51)编译的库的代码。要么升级你的编译器,要么找到一个用 Java 6 编译的 pi4j 版本,你应该很高兴。升级到 JDK7 将是最好的选择。

作为参考,以下是版本号及其对应的内容:

  • J2SE 7 = 51
  • J2SE 6.0 = 50
  • J2SE 5.0 = 49
  • JDK 1.4 = 48
  • JDK 1.3 = 47
  • JDK 1.2 = 46
  • JDK 1.1 = 45
于 2013-10-29T20:32:54.900 回答
0

当您使用更高版本的 JDK 编译 Java 代码并尝试使用更低版本的 JDK 运行相同的代码时,会发生此问题。您知道您使用的是哪个版本的 Java 吗?

于 2013-10-29T20:38:06.887 回答