我爲jre 1.7,jre 1.6和jre 1.5編寫了一個屏幕截圖的小程序。該小程序必須爲其窗口使用透明背景。但對於半透明1.7版本(graphicDevice窗口半透明)和1.6(awtutilities)使用不同的API,並有1.5左右的工作。現在如何讓我的小程序兼容所有的三個版本?Java版本兼容性當在不同的版本中使用不同的API來處理相同的任務
我想我必須用不同的編譯器編譯不同的類。但是,如何在單個應用程序中使用這些單獨編譯的類?
我爲jre 1.7,jre 1.6和jre 1.5編寫了一個屏幕截圖的小程序。該小程序必須爲其窗口使用透明背景。但對於半透明1.7版本(graphicDevice窗口半透明)和1.6(awtutilities)使用不同的API,並有1.5左右的工作。現在如何讓我的小程序兼容所有的三個版本?Java版本兼容性當在不同的版本中使用不同的API來處理相同的任務
我想我必須用不同的編譯器編譯不同的類。但是,如何在單個應用程序中使用這些單獨編譯的類?
如果有存在於用於相同功能的不同版本的Java(如JWindow.setOpacity()在Java 1.7和AWTUtilities.setWindowOpacity()在Java 1.6),那麼我們可以使用的類動態加載不同的API根據類的wrt java版本的可用性使用API。下面是解決了我的情況下,代碼:
try
{
Class<?> cls = Class.forName("javax.swing.JWindow");
Method meth = cls.getMethod("setOpacity", float.class);
meth.invoke(transparentWindow, 0.50f);
}
catch (Throwable e)
{
e.printStackTrace();
try
{
Class<?> cls = Class.forName("com.sun.awt.AWTUtilities");
Method meth = cls.getMethod("setWindowOpacity", Window.class,
float.class);
meth.invoke(null, transparentWindow, 0.50f);
}
catch (Throwable e1)
{
e1.printStackTrace();
}
}
希望它可以幫助初學者像曾經我:)
按照提到的文章..
OK,我覺得我應該在這個階段下降的,因爲我上投@Alexie的評論..和寫的文章和小程序。 ;)
1st up。我很大程度上已經忘記了這個applet,並且會提出JWS /嵌入式applet的建議,但這隻能用於1.6_10 +(即當Sun發佈Plug-In 2 JRE時 - 與其他JRE製造商不同)。
然後當我審查小程序,很明顯,阿列克謝已經釘牢它。通過幾頁,一些特定版本的罐子和一些「跳躍籃球」,它可以滿足規格要求。
這是如何工作的。
applet.html
,使用archive="appletcommon.jar,applet7.jar"
)。使用Java Version Checker Applet檢查1.7(或更高)。如果不是可用:
applet6.html
,爲1.6 archive="appletcommon.jar,applet6.jar"
。如果不是可用:
applet5.html
,爲1.5 archive="appletcommon.jar"
。如果不是可用:
deployJava.js
來要求'1.2+ Java' - 甲骨文將提供最新的公開發布的版本 - 我不確定蘋果或* nix,但期望是相同的。這裏最重要的是各種檔案的內容的精細描述。分解到。
appletcommon.jar
與此applet可用的最低版本兼容的核心applet類(本例中爲1.5)。編譯期間的源代碼/目標必須== 1.5,並且applet6.jar
1.6類。同上編譯選項。applet7.jar
1.7級。同上編譯選項(除非使用1.7 SDK編譯)。
如何檢查Java版本,並重定向到相應的小程序:HTTP://www.pscode。 org/jre.html –
根據引用的文章...我必須使用三個小程序的不同版本,並檢查jre版本來選擇一個。但我想使用單個小程序並使用所有不同的編譯類。無論如何要這樣做? –
@AlexeiKaigorodov很棒的評論。 +1查看我的答案。 –