2014-01-26 25 views
3

我在Eclipse中编程。我从不改变有关Eclipse的默认编译设置或其他任何东西。使用JDK 7进行编程是否允许应用程序在JRE 6上运行?

如果我有JDK 7我的电脑上安装。假如旧的JRE支持我所有的程序功能,我的编译的Runnable JAR是否有在旧JRE上运行的问题?

例如,如果我编程在Eclipse的应用程序,并安装最新的JDK - 应在程序上有一个年龄稍大的JRE运行的问题?

如果答案是“是” - 我怎样才能改变呢?我如何允许我的程序在比JDK更早的JRE上运行?由于

+2

当你尝试时会发生什么? –

+0

您可以告诉Eclipse关于您已安装的多个JDK,并选择为每个项目使用哪一个。 –

+0

@ greg-449这是允许我的应用程序在老版本的Java上运行的“标准”方式吗?如果我不这样做,是我的应用程序只能在适用于我编程的JDK的JRE上运行的“默认”? – user3150201

回答

5

您的代码只能在JRE 6运行编译它JRE 6.检查您的编译器设置(项目 - >属性 - > Java编译器),并确保您编译为Java 6,否则用户将得到一个如果它们没有安装Java 7,则为UnsupportedClassVersionError

您还必须确保不使用任何Java 7功能(例如java.nio.Path),或者安装Java 6 JDK并使用它来编译应用程序,否则在运行时会出现缺少方法/类异常Java 6上的应用程序(在使用JDK 6时,您会得到编译时错误)。该Eclipse使用没有

+0

我明白了。因此,让我问你一个问题:如果我很少使用在Java 7中引入的功能,那么简单地卸载JDK 7,安装JDK 6并以这种方式进行开发是否聪明?这将确保更多的人能够运行我的程序,对吗? – user3150201

+0

这样,Java 6和Java 7计算机都可以运行我的应用程序,对吧? – user3150201

+1

@ user3150201您可以将JDK 6安装在JDK 7中,只要确保将Eclipse配置为使用JDK 6即可用于您想要使用JRE 6运行的项目。 – Njol

2

Java运行时为您的项目使用相同的。您可以设置项目运行中的项目的属性:

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2FgettingStarted%2Fqs-ProjectConfiguration.htm

Java 7的是向后兼容的,这意味着旧的Java程序将在此版本的Java运行。但是,Java版本从未兼容。这意味着用Java 7编写的程序不一定会在Java 6中编译,而用Java 6编写的程序不一定会在Java 5中编译。这是因为Java 7包含Java 6不包含的特性(如switch语句中的字符串),以及Java 6包含Java 5不包含的功能,如脚本语言支持(请参阅https://en.wikipedia.org/wiki/Java_version_history以获得概述)。

而且缺乏向前的兼容性意味着在Java中的较新版本编译不会在旧版本的Java运行时运行Java程序。 java编译器特别保护具有版本标识符的已编译java类文件,以便在新版本的Java中编译它们时不会运行这些类。

如果您要小心避免Java 7功能,那么您可以在Java 7中编写Java程序,该程序将在Java 6中编译和运行。如果您知道您的程序需要在Java 6中运行,那么最好设置您的项目的运行时间到Java 6.

+0

感谢您的帮助。我知道不同的Java版本具有不同的功能。但是我想知道的是:假设我使用JDK 7创建了一个程序,但该程序不使用JRE 6不支持的任何功能。我的问题是,如果我需要以某种特殊方式编译我的程序,或者做特别的事情,那么它将能够在JRE 6上运行 - 或者像往常一样编译? – user3150201

+0

扩展我的答案。编译器不是转发兼容的。 –

+0

我明白了。所以基本上,如果我在Eclipse中编程并在计算机上安装了JDK 7,则需要*特别*告诉Eclipse编译程序以在JRE 6上运行。(即使我的程序没有使用JRE 6不支持)。它是否正确? – user3150201

相关问题