0

我为 jre 1.7、jre 1.6 和 jre 1.5 编写了一个用于屏幕捕获的小程序。小程序必须为其窗口使用透明背景。但是对于半透明 jre 1.7(graphicDevice window Translucency) 和 1.6(awtutilities) 使用不同的 api 并且 jre 1.5 有解决方法。现在如何使我的小程序兼容所有三个版本?

我想我必须用不同的编译器编译不同的类。但是如何在单个应用程序中使用这些单独编译的类呢?

4

2 回答 2

0

根据参考文章..

好的,我觉得我应该在这个阶段加入,因为我对@Alexie 的评论投了赞成票......并写了这篇文章和小程序。;)

第 1 名。我基本上已经忘记了那个小程序,并打算建议使用 JWS/嵌入式小程序,但这仅适用于 1.6_10+(那是 Sun 发布 Plug-In 2 JRE 的时候——与其他 JRE 制造商不同)。

然后,当我查看小程序时,很明显 Alexie 已经成功了。只需几页,一些特定于版本的罐子和一点“跳过箍”,它就可以满足规范。

这是它的工作原理。

  • 让“公共链接”指向 1.7+ 版本的小程序(例如称为:applet.html,使用archive="appletcommon.jar,applet7.jar")。使用Java 版本检查器小程序检查 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”——甲骨文将提供最新的公开发布版本——我不确定 Apple 或 *nix,但希望相同。

这里重要的是对各种档案内容的精细描述。那分解为。

  • appletcommon.jar与此小程序可用的最低版本(在本例中为 1.5)兼容的核心小程序类。- 编译期间的源/目标必须==1.5,并且
  • applet6.jar有 1.6 节课。同上编译选项。
  • applet7.jar有 1.7 节课。同上编译选项(除非使用 1.7 SDK 编译)。
于 2012-05-04T11:49:10.960 回答
0

如果在不同版本的 java 中存在相同功能的不同 API(如 java 1.7 中的 JWindow.setOpacity() 和 java 1.6 中的 AWTUtilities.setWindowOpacity()),那么我们可以使用类的动态加载来使用 API,具体取决于类 wrt java 版本的可用性。这是解决我的情况的代码:

    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();
        }
    }

希望它像以前一样对初学者有所帮助:)

于 2014-04-01T09:08:25.603 回答