2016-12-31 45 views
0

我已經通過另一個問題建立了我正在使用JavaFX程序的問題,這是由於JDK中的錯誤不會在短時間內得到解決。我甚至被告知該錯誤在PrismTextLayout中。修補單個應用程序的JDK中的錯誤

所以找到了這個源代碼後,我將如何實現某種修補程序,這將允許我僅爲我的應用程序修復此錯誤。很明顯,如果我確實解決了這個問題,我會將它回饋給未來的JDK,但現在我只想快速修復。

我認爲一個簡單的谷歌搜索補丁的JDK,等會變成堆的信息,但實際上,虛無一無所獲。

有人可以解釋如何補丁,至少我可以在正確的方向上指出這方面的一些文檔。

+0

修復bug,編譯類,將其替換爲Java安裝的'rt.jar'文件。或者看看[這裏](http://stackoverflow.com/a/12119945/5221149) – Andreas

+0

有構建指令openJFX [這裏](https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX ):他們(當然)因平臺而異,如果您想要爲多個平臺分發您的應用程序,則需要爲每個平臺構建一個版本。如果您使用修改的JFX庫分發應用程序,我不知道您有什麼許可要求。 –

+2

@Andreas你錯了。 JavaFX不是'rt.jar'的一部分,它作爲單獨的jar文件與Oracle Java發行版捆綁在一起。 –

回答

1

修補JavaFX類而不實際構建整個JDK或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

另一種方法是在加載該類文件之前用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的第8版纔有效。隨着Java 9的一切變化,這個問題需要進一步調查。 – mipa