Mac OSX El Capitan上的JDK 7/JavaFX 2应用程序

Mac OSX El Capitan上的JDK 7/JavaFX 2应用程序,java,macos,javafx,javafx-2,Java,Macos,Javafx,Javafx 2,我刚刚升级到El Capitan,启动一个在JDK1.7.0u79(Oracle提供的最新版本)下运行的自定义JavaFX2应用程序时遇到问题 启动应用程序时,我遇到以下异常: Exception in thread "main" java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(L

我刚刚升级到El Capitan,启动一个在JDK1.7.0u79(Oracle提供的最新版本)下运行的自定义JavaFX2应用程序时遇到问题

启动应用程序时,我遇到以下异常:

 Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
    at java.lang.Thread.run(Thread.java:745)
 Caused by: java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:191)
    at javafx.scene.control.Control.loadClass(Control.java:115)
    at javafx.scene.control.Control.loadSkinClass(Control.java:1021)
    at javafx.scene.control.Control.access$500(Control.java:70)
    at javafx.scene.control.Control$12.invalidated(Control.java:972)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:127)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:161)
    at com.sun.javafx.css.StyleableStringProperty.set(StyleableStringProperty.java:71)
    at javafx.scene.control.Control$12.set(Control.java:964)
    at com.sun.javafx.css.StyleableStringProperty.applyStyle(StyleableStringProperty.java:59)
    at com.sun.javafx.css.StyleableStringProperty.applyStyle(StyleableStringProperty.java:31)
    at com.sun.javafx.css.StyleableProperty.set(StyleableProperty.java:70)
    at com.sun.javafx.css.StyleHelper.transitionToState(StyleHelper.java:900)
    at javafx.scene.Node.impl_processCSS(Node.java:7418)
    at javafx.scene.Parent.impl_processCSS(Parent.java:1146)
    at javafx.scene.control.Control.impl_processCSS(Control.java:1154)
    at javafx.scene.Parent.impl_processCSS(Parent.java:1153)
    at javafx.scene.Parent.impl_processCSS(Parent.java:1153)
    at javafx.scene.Node.processCSS(Node.java:7386)
    at javafx.scene.Scene.doCSSPass(Scene.java:454)
    at javafx.scene.Scene.preferredSize(Scene.java:1468)
    at javafx.scene.Scene.impl_preferredSize(Scene.java:1535)
    at javafx.stage.Window$9.invalidated(Window.java:717)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:127)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:161)
    at javafx.stage.Window.setShowing(Window.java:781)
    at javafx.stage.Window.show(Window.java:796)
    at javafx.stage.Stage.show(Stage.java:233)
    at au.com.religaresecurities.trademax.client.Start.start(Start.java:131)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:219)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
 Caused by: java.lang.NullPointerException
    at com.sun.t2k.MacFontFinder.initPSFontNameToPathMap(MacFontFinder.java:339)
    at com.sun.t2k.MacFontFinder.getFontNamesOfFontFamily(MacFontFinder.java:390)
    at com.sun.t2k.T2KFontFactory.getFontResource(T2KFontFactory.java:233)
    at com.sun.t2k.LogicalFont.getSlot0Resource(LogicalFont.java:184)
    at com.sun.t2k.LogicalFont.getSlotResource(LogicalFont.java:228)
    at com.sun.t2k.CompositeStrike.getStrikeSlot(CompositeStrike.java:86)
    at com.sun.t2k.CompositeStrike.getMetrics(CompositeStrike.java:132)
    at com.sun.javafx.font.PrismFontUtils.getFontMetrics(PrismFontUtils.java:31)
    at com.sun.javafx.font.PrismFontLoader.getFontMetrics(PrismFontLoader.java:466)
    at javafx.scene.text.Text.<init>(Text.java:153)
    at javafx.scene.text.Text.<init>(Text.java:162)
    at com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.<clinit>(ProgressIndicatorSkin.java:78)
    ... 37 more
线程“main”java.lang.RuntimeException中的异常:应用程序启动方法中的异常
位于com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:403)
访问com.sun.javafx.application.launchempl.access$000(launchempl.java:47)
位于com.sun.javafx.application.launchempl$1.run(launchempl.java:115)
运行(Thread.java:745)
原因:java.lang.ExceptionInInitializeError
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:191)
位于javafx.scene.control.control.loadClass(control.java:115)
位于javafx.scene.control.control.loadSkinClass(control.java:1021)
位于javafx.scene.control.control.access的$500(control.java:70)
位于javafx.scene.control.control$12.invalidated(control.java:972)
位于javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:127)
位于javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:161)
位于com.sun.javafx.css.StyleableStringProperty.set(StyleableStringProperty.java:71)
位于javafx.scene.control.control$12.set(control.java:964)
位于com.sun.javafx.css.StyleableStringProperty.applyStyle(StyleableStringProperty.java:59)
位于com.sun.javafx.css.StyleableStringProperty.applyStyle(StyleableStringProperty.java:31)
位于com.sun.javafx.css.StyleableProperty.set(StyleableProperty.java:70)
位于com.sun.javafx.css.StyleHelper.transitionState(StyleHelper.java:900)
位于javafx.scene.Node.impl_processCSS(Node.java:7418)
位于javafx.scene.Parent.impl_processCSS(Parent.java:1146)
位于javafx.scene.control.control.impl_processCSS(control.java:1154)
位于javafx.scene.Parent.impl_processCSS(Parent.java:1153)
位于javafx.scene.Parent.impl_processCSS(Parent.java:1153)
位于javafx.scene.Node.processCSS(Node.java:7386)
位于javafx.scene.scene.doCSSPass(scene.java:454)
位于javafx.scene.scene.preferredSize(scene.java:1468)
位于javafx.scene.scene.impl_preferredSize(scene.java:1535)
在javafx.stage.Window$9.invalidated(Window.java:717)
位于javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:127)
位于javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:161)
位于javafx.stage.Window.setShowing(Window.java:781)
在javafx.stage.Window.show(Window.java:796)
在javafx.stage.stage.show(stage.java:233)
位于au.com.religaresecurities.trademax.client.Start.Start(Start.java:131)
位于com.sun.javafx.application.launchempl$5.run(launchempl.java:319)
位于com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:219)
位于com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
位于com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:76)
原因:java.lang.NullPointerException
位于com.sun.t2k.MacFontFinder.initPSFontNameToPathMap(MacFontFinder.java:339)
在com.sun.t2k.MacFontFinder.getFontNamesOfFontFamily(MacFontFinder.java:390)上
位于com.sun.t2k.T2KFontFactory.getFontResource(T2KFontFactory.java:233)
位于com.sun.t2k.LogicalFont.getSlot0Resource(LogicalFont.java:184)
在com.sun.t2k.LogicalFont.getSlotResource上(LogicalFont.java:228)
在com.sun.t2k.CompositeStrike.getStrikeSlot(CompositeStrike.java:86)上
在com.sun.t2k.CompositeStrike.getMetrics(CompositeStrike.java:132)
位于com.sun.javafx.font.prismontutils.getFontMetrics(prismontutils.java:31)
位于com.sun.javafx.font.PrismFontLoader.getFontMetrics(PrismFontLoader.java:466)
在javafx.scene.text.text.(text.java:153)
位于javafx.scene.text.text.(text.java:162)
位于com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.(ProgressIndicatorSkin.java:78)
... 37多
我不能只是将应用程序迁移到Java8,所以非常感谢您的帮助

更新

通过将此添加到主方法的开头,我可以使应用程序再次运行。还有更好的解决方案吗

    try {
        Class<?> macFontFinderClass = Class.forName("com.sun.t2k.MacFontFinder");
        Field psNameToPathMap = macFontFinderClass.getDeclaredField("psNameToPathMap");
        psNameToPathMap.setAccessible(true);
        psNameToPathMap.set(null, new HashMap<String, String>());
    } catch (Exception e) {
        // ignore
    }
试试看{
Class macFontFinderClass=Class.forName(“com.sun.t2k.MacFontFinder”);
字段psNameToPathMap=macFontFinderClass.getDeclaredField(“psNameToPathMap”);
psNameToPathMap.setAccessible(true);
psNameToPathMap.set(null,newhashmap());
}捕获(例外e){
//忽略
}

我也有同样的问题。我将文本更改为标签。我不确定这在您的情况下是否可行。

在一个广泛的企业应用程序中使用了一个多星期后,我没有注意到UI中有任何问题

由于缺乏更好的解决方案,我接受上面的更新作为答案。也许这对某人有帮助

通过将此添加到主方法的开头,我可以使应用程序再次运行

    try {
        Class<?> macFontFinderClass = Class.forName("com.sun.t2k.MacFontFinder");
        Field psNameToPathMap = macFontFinderClass.getDeclaredField("psNameToPathMap");
        psNameToPathMap.setAccessible(true);
        psNameToPathMap.set(null, new HashMap<String, String>());
    } catch (Exception e) {
        // ignore
    }
试试看{
Class macFontFinderClass=Class.forName(“com.sun.t2k.MacFontFinder”);
字段psNameToPathMap=macFontFinderClass.getDeclaredField(“psNameToPathMap”);
psNameToPathMap.setAccessible(true);
psNameToPathMap.set(null,newhashmap());
}捕获(例外e){
//忽略
}

这不是一个直接的答案,但是我认为重要的是,这个错误已经在即将发布的Java版本中被识别和修复。请参见

不,这是一个相当复杂的应用程序,但令人失望的是,这需要很长时间才能得到正式的解决方案。2016年仍然破产。。。smhThis为我解决了同样的问题,谢谢分享