2012-05-03 81 views
0

我爲jre 1.7,jre 1.6和jre 1.5編寫了一個屏幕截圖的小程序。該小程序必須爲其窗口使用透明背景。但對於半透明1.7版本(graphicDevice窗口半透明)和1.6(awtutilities)使用不同的API,並有1.5左右的工作。現在如何讓我的小程序兼容所有的三個版本?Java版本兼容性當在不同的版本中使用不同的API來處理相同的任務

我想我必須用不同的編譯器編譯不同的類。但是,如何在單個應用程序中使用這些單獨編譯的類?

+2

如何檢查Java版本,並重定向到相應的小程序:HTTP://www.pscode。 org/jre.html –

+0

根據引用的文章...我必須使用三個小程序的不同版本,並檢查jre版本來選擇一個。但我想使用單個小程序並使用所有不同的編譯類。無論如何要這樣做? –

+0

@AlexeiKaigorodov很棒的評論。 +1查看我的答案。 –

回答

0

如果有存在於用於相同功能的不同版本的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(); 
     } 
    } 

希望它可以幫助初學者像曾經我:)

0

按照提到的文章..

OK,我覺得我應該在這個階段下降的,因爲我上投@Alexie的評論..和寫的文章和小程序。 ;)

1st up。我很大程度上已經忘記了這個applet,並且會提出JWS /嵌入式applet的建議,但這隻能用於1.6_10 +(即當Sun發佈Plug-In 2 JRE時 - 與其他JRE製造商不同)。

然後當我審查小程序,很明顯,阿列克謝已經釘牢它。通過幾頁,一些特定版本的罐子和一些「跳躍籃球」,它可以滿足規格要求。

這是如何工作的。

  • 有「公共鏈接」指向1.7+版本的小應用程序(例如稱爲: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"。如果不是可用:
        • 重定向到一個頁面,指出「對不起,需要1.4+插件,請參閱a,b,c進行安裝」。您可以在這裏使用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編譯)。
相關問題