2012-05-03 193 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编译)。
相关问题