javafx JFXPanel嵌入了mac中的swing应用程序崩溃

时间:2015-10-26 19:18:44

标签: java javafx

我在mac中运行时,swing应用程序中的jfxpanel崩溃了。它在windows中运行良好但在mac下面出现错误,看起来与字体有关,但不确定原因,请帮助

select listagg(SUBSTR(currentField,1,5), ',') within group (order by        
   SUBSTR(currentField,1,5))

2 个答案:

答案 0 :(得分:2)

您正在使用与JavaFX不兼容的运行时环境。

这是不可取的。从未发布与Apple Java Runtime for Mac兼容的JavaFX版本。如果您希望JavaFX for Mac正常工作,您应该使用Oracle Java 8+或OpenJDK 8+。如果您不能使用其中一个兼容的运行时,则不建议使用JavaFX。

如果您使用的是Apple Java for Mac,因为您担心应用程序的Java运行时在用户计算机上可用,那么请考虑将您的应用程序打包为self-contained application,它会在您的应用程序中嵌入兼容的运行时并且不依赖于预安装的运行时。

答案 1 :(得分:2)

你试过这个肮脏的黑客攻击吗?我在某处看到OS X / el Capitan上的JDK 7中出现了这个问题,但它很可能永远不会在JDK 7中得到修复。

所以我发现这个肮脏的黑客,它对我有用......

    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
        }
    }