![](/img/trans.png)
[英]JavaFX 2.2 JFXPanel in Swing application showing Swing modal dialogs
[英]javafx JFXPanel embeded in swing application crash in mac
我在Mac中運行后,jfxpanel在擺動應用程序崩潰。 它在Windows中運行良好,但在Mac中出現以下錯誤,看起來與字體有關,但不確定為什么,請幫助
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.t2k.MacFontFinder.initPSFontNameToPathMap(MacFontFinder.java:339)
at com.sun.t2k.MacFontFinder.getAllAvailableFontFamilies(MacFontFinder.java:359)
at com.sun.t2k.T2KFontFactory.getFontFamilyNames(T2KFontFactory.java:1056)
at com.sun.prism.j2d.J2DFontFactory.getFontFamilyNames(J2DFontFactory.java:52)
at com.sun.webpane.sg.prism.WCFontImpl.getFont(WCFontImpl.java:37)
at com.sun.webpane.sg.prism.FXGraphicsManager.getWCFont(FXGraphicsManager.java:56)
at com.sun.webpane.webkit.network.URLLoader.twkDidFinishLoading(Native Method)
at com.sun.webpane.webkit.network.URLLoader.access$1300(URLLoader.java:44)
at com.sun.webpane.webkit.network.URLLoader$6.run(URLLoader.java:691)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
Invalid memory access of location 0x0 rip=0x11c8c7b64
Segmentation fault: 11
您正在使用與JavaFX不兼容的運行時環境。
這是不可取的。 從未發布過與Mac版Apple Java Runtime兼容的JavaFX版本。 如果希望JavaFX for Mac正常運行,則應使用Oracle Java 8+或OpenJDK 8+。 如果您不能使用這些兼容的運行時之一,則不建議使用JavaFX。
如果您使用Apple Java for Mac是因為擔心在用戶計算機上可以使用應用程序的Java運行時,請考慮將應用程序打包為自包含應用程序 ,該應用程序將兼容的運行時嵌入到您的應用程序中,並且不依賴在預安裝的運行時上。
您是否嘗試過這種骯臟的黑客行為? 我在某處讀到此問題發生在OS X / el Capitan上的JDK 7中,但很有可能永遠無法在JDK 7中解決。
所以我發現了這個骯臟的hack,對我有用...
if (isMac()) {
try {
final Class<?> macFontFinderClass = Class.forName("com.sun.t2k.MacFontFinder");
final Field psNameToPathMap = macFontFinderClass.getDeclaredField("psNameToPathMap");
psNameToPathMap.setAccessible(true);
if (psNameToPathMap.get(null) == null) {
psNameToPathMap.set(
null, new HashMap<String, String>());
}
final Field allAvailableFontFamilies = macFontFinderClass.getDeclaredField("allAvailableFontFamilies");
allAvailableFontFamilies.setAccessible(true);
if (allAvailableFontFamilies.get(null) == null) {
allAvailableFontFamilies.set(
null, new String[] {});
}
} catch (final Exception e) {
// ignore
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.