2016-12-31 7 views
0

私はJavaFXプログラムで問題が発生しているということは、すぐには解決されないJDKのバグによるものだということを別の質問から確立しました。そのバグがPrismTextLayoutにあることさえ知りました。個々のアプリケーションのJDKのバグにパッチを付ける

このソースコードを見つけたので、アプリケーションのこのバグを修正するためのパッチをどのように実装すればよいでしょうか。明らかに私が問題を修正したなら、それを将来のJDKに戻すことになるでしょうが、今のところただちに修正が必要です。

私は、JDKなどのパッチを当てるための単純なgoogle検索では、情報のヒープが増えると思っていましたが、実際は何もありません。

誰かがパッチを当てる方法を説明していない場合、少なくともこのテーマに関するいくつかの文書のために正しい方向に向けることができますか?

+0

バグを修正し、クラスをコンパイルし、Javaインストールの 'rt.jar'ファイルに置き換えます。または、[ここ]を参照してください(http://stackoverflow.com/a/12119945/5221149) – Andreas

+0

openJFXのビルド手順はこちら[https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX ):それらは(もちろん)プラットフォームによって異なり、複数のプラットフォーム用にアプリケーションを配布する場合は、それぞれのバージョンをビルドする必要があります。変更されたJFXベースでアプリケーションを配布する場合、あなたにはどのようなライセンス要件があるのか​​わかりません。 –

+2

@アンドレアスあなたは間違っています。 JavaFXは 'rt.jar'の一部ではなく、別個のjarファイルとしてOracle Javaディストリビューションにバンドルされています。 –

答えて

1

実際にJDKまたはJavaFX全体を構築することなくJavaFXクラスにパッチを適用するのは簡単です。私はSVGPathクラスのためにこれをやっていました。

  1. JDKと一緒に配布し、そのパッケージ名に応じて適切なフォルダにプロジェクトに追加されたソースのzipからクラスのソースを解凍します。私の場合、これはjavafx/scene/shape/SVGPath.javaになります。
  2. 明示的に${JDK_HOME}/jre/lib/ext/jfxrt.jarをクラスパスに追加してください。
  3. Javaオプション "-Djava.ext.dirs ="を使用してプログラムを実行します。 この手順は、jfxrt.jar内の既存のクラスをオーバーライドするために不可欠です。

それです。

+0

私には良い音、私はそれを行こう。ありがとう。 – blissweb

+0

もう1つの方法は、クラスファイルをロードする前にASMまたはBCELでコードを置き換えて、クラスローダーにロードすることですが、これはそのクラスを使用する前に行う必要があります。拡張機構が[JDK9で削除される](https://bugs.openjdk.java.net/browse/JDK-8065702)ので、私は '-Djava.ext.dirs ='の使用法を提案しません。 JEP-220](http://openjdk.java.net/jeps/220)または[このブログ投稿](http://blog.codefx.org/java/dev/how-java-9-and-project -jigsaw-may-break-your-code /) – FibreFoX

+0

私の答えはJavaのverson 8まで有効です。 Java 9ではすべてが変わり、この問題はさらに調査する必要があります。 – mipa

関連する問題