我为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查看我的答案。 –