Java向后兼容性问题 - JDK 6的字节码未在JRE 6中运行

时间:2017-09-20 12:28:31

标签: java

在用于开发的计算机中,我安装了Java 8。因此,为了使我的应用程序与旧的Java版本兼容,我在编译代码时尽可能地追溯。但我还是得到了

  

无法找到主类:mypackage.MyClass。程序将退出。

这是我的开发环境:

> java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) Client VM (build 25.111-b14, mixed mode, sharing)

在Netbeans中,我使用

编译了项目
  

项目属性 - >来源 - >来源/二进制格式:JDK 6

确实我得到了:

> javap -verbose MyClass | "version"
  minor version: 0
  major version: 50

Major 50表示来自here的java 6。

应用程序在我的开发机器上运行良好。但是,当我尝试在另一台具有

的机器中运行我的jar文件时
> java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode)

我得到了这个:

> java -jar MyClass.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 12 more
Could not find the main class: mypackage.MyClass. Program will exit.

如果计算机具有Java 6并且编译的字节代码也兼容java 6,那么它是否运行正常?

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

原因可能是因为Java FX没有捆绑到JRE / JDK 6中。

我无法在package overview summary中找到相关的包 this表示

  

JavaFX现在是Java 8的JRE / JDK的一部分(3月18日发布,   2014)并具有相同的编号,即JavaFX 8。