2014-01-26 24 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

相關問題