簡體   English   中英

javafx JFXPanel嵌入Mac的swing應用程序崩潰

[英]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不兼容的運行時環境。

這是不可取的。 從未發布過與MacApple 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM