嵌入mac中swing应用程序崩溃的JavaFXJFXPanel

嵌入mac中swing应用程序崩溃的JavaFXJFXPanel,java,javafx,Java,Javafx,我在mac上运行时,jfxpanel在swing应用程序中崩溃。它在windows下运行良好,但在mac下出现错误,看起来与字体有关,但不确定原因,请帮助 Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at com.sun.t2k.MacFontFinder.initPSFontNameToPathMap(MacFontFinder.java:339) at com.s

我在mac上运行时,jfxpanel在swing应用程序中崩溃。它在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不兼容

这是不可取的。与兼容的JavaFX版本从未发布。如果希望javafxformac正常工作,应该使用oraclejava8+或openjdk8+。如果不能使用这些兼容的运行时之一,则不建议使用JavaFX


如果您使用苹果java作为Mac,因为您担心java应用程序在用户机器上可用的Java运行时,那么考虑将应用程序打包为A,它将兼容的运行时嵌入到应用程序中,不依赖于预先安装的运行时。p> 你尝试过这种肮脏的黑客行为吗?我在某个地方读到,这个问题发生在OSX/ElCapitan上的JDK7中,但它很可能永远不会在JDK7中得到修复

所以我找到了这个肮脏的黑客,它对我有用

    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
        }
    }
if(isMac()){
试一试{
最终类macFontFinderClass=Class.forName(“com.sun.t2k.MacFontFinder”);
最终字段psNameToPathMap=macFontFinderClass.getDeclaredField(“psNameToPathMap”);
psNameToPathMap.setAccessible(true);
if(psNameToPathMap.get(null)==null){
psNameToPathMap.set(
null,新的HashMap());
}
最终字段allAvailableFontFamilies=macFontFinderClass.getDeclaredField(“allAvailableFontFamilies”);
allAvailableFontFamilies.setAccessible(true);
if(allAvailableFontFamilies.get(null)==null){
allAvailableFontFamilies.set(
空,新字符串[]{});
}
}捕获(最终异常e){
//忽略
}
}

与原始海报中使用Java 8而不是Java 7修复的类似。同样类似于jewelsea:谢谢你的回复。事实上,我们正在使用java进行mac。并使用mac提供的最新版本。所以我不能使用oracle的java。