2016-12-31 5 views
0

JavaFX 프로그램에서 발생하는 문제는 JDK의 버그로 인해 곧 수정 될 것이라는 점을 다른 질문을 통해 입증했습니다. 나는 그 버그가 PrismTextLayout에 있음을 알리기까지했다.개별 응용 프로그램의 JDK 버그 패치

그래서이 소스 코드를 찾으면 내 응용 프로그램에 대해서만이 버그를 해결할 수있는 일종의 패치를 어떻게 구현할 수 있습니까? 분명히 문제를 해결했다면, 나는 그것을 미래의 JDK로 되돌려 줄 것이다. 그러나 지금은 단지 빠른 수정을 원한다.

JDK를 패치하는 간단한 Google 검색이 정보의 힙을 표시하지만 실제로는 아무것도 아니라고 생각했습니다.

누군가 패치 할 방법을 설명하지 않으면 적어도이 주제에 대한 문서를 올바른 방향으로 가리키게 할 수 있습니까?

+0

버그를 수정하고, 클래스를 컴파일하고, 자바 설치의'rt.jar' 파일에서 바꾸십시오. 또는 [here] (http://stackoverflow.com/a/12119945/5221149)를 참조하십시오. – Andreas

+0

openJFX [여기] (https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX)에 대한 빌드 지침이 있습니다.) : 그들은 플랫폼에 따라 다르며 여러 플랫폼에 대한 응용 프로그램을 배포하려는 경우 각각에 대한 버전을 만들어야합니다. 수정 된 JFX 기반으로 애플리케이션을 배포 할 경우 어떤 라이선스 요구 사항이 적용되는지 알 수 없습니다. –

+2

@ Andreas 틀렸어. JavaFX는'rt.jar'의 일부가 아니며 Oracle Java 배포판과 별도의 jar 파일로 번들됩니다. –

답변

1

전체 JDK 또는 JavaFX를 실제로 빌드하지 않고 JavaFX 클래스에 패치를 적용하는 것은 매우 쉽습니다. 저는 예전 SVGPath 클래스를 위해 예전에 이것을했습니다.

  1. 의 압축을 JDK와 함께 배포하고 패키지 이름에 따라 올바른 폴더에 프로젝트에 추가 된 소스 우편에서 클래스 소스. 내 경우에는 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

내 대답은 자바의 8 번까지 유효합니다. Java 9에서는 모든 것이 바뀌므로이 문제는 추가 조사가 필요합니다. – mipa