0

jre 1.7、jre 1.6、jre1.5のスクリーンキャプチャ用のアプレットを作成しました。アプレットは、ウィンドウに透明な背景を使用する必要があります。ただし、半透明の場合、jre 1.7(graphicDevice window Translucency)と1.6(awtutilities)は異なるAPIを使用し、jre1.5には回避策があります。では、アプレットを3つのバージョンすべてと互換性を持たせるにはどうすればよいですか?

異なるコンパイラで異なるクラスをコンパイルする必要があると思います。しかし、これらの別々にコンパイルされたクラスを単一のアプリケーションでどのように使用するのでしょうか。

4

2 に答える 2

0

参照記事によると。

OK、@ Alexieのコメントに賛成票を投じ、記事とアプレットを書いたので、この段階で立ち寄るべきだと思います。;)

1位。私はそのアプレットをほとんど忘れていて、JWS /埋め込みアプレットを提案しようとしていましたが、それは1.6_10 +でしか機能しませんでした(つまり、SunがPlug-In 2 JREをリリースしたとき-他のJREメーカーとは異なります)。

次に、アプレットを確認すると、Alexieがアプレットを釘付けにしたことが明らかになりました。いくつかのページ、いくつかのバージョン固有のJars、および少しの「フープを飛び越える」ことで、仕様を満たすことができます。

これがどのように機能するかです。

  • アプレットの1.7以降のバージョンを指す「パブリックリンク」を作成します(たとえば、:applet.html、using archive="appletcommon.jar,applet7.jar")。Javaバージョンチェッカーアプレットを使用して、1.7(またはそれ以降)をチェックします。利用できない場合:
    • applet6.html1.6の場合は、にリダイレクトしますarchive="appletcommon.jar,applet6.jar"利用できない場合:
      • applet5.html1.5の場合は、にリダイレクトしますarchive="appletcommon.jar"利用できない場合:
        • 「申し訳ありませんが、1.4以降のプラグインが必要です。インストールについてはa、b、cを参照してください」というページにリダイレクトします。ここを使用しdeployJava.jsて「1.2+Java」を要求することができます-Oracleは最新の公開バージョンを提供します-Appleまたは*nixについてはわかりませんが、同じことを期待します。

ここで重要なのは、さまざまなアーカイブの内容の詳細な説明です。それはに分解されます。

  • appletcommon.jarこのアプレットが使用可能な最小バージョン(この場合は-1.5)と互換性のあるコアアプレットクラス。-コンパイル中のソース/ターゲットは==1.5でなければならず、
  • applet6.jar1.6クラスで。コンパイルオプションも同様です。
  • applet7.jar1.7クラスで。コンパイルオプションも同様です(1.7 SDKでコンパイルする場合を除く)。
于 2012-05-04T11:49:10.960 に答える
0

同じ機能(java 1.7のJWindow.setOpacity()およびjava 1.6のAWTUtilities.setWindowOpacity()など)に対して異なるバージョンのjavaに異なるAPIが存在する場合、クラスの動的ロードを使用して、以下に応じてAPIを使用できます。クラスwrtjavaバージョンの可用性。これが私のケースを解決したコードです:

    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 に答える