Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
145 views
in Technique[技术] by (71.8m points)

java - JavaFX Test That fails in Windows and works in OSX and Linux

I have a JavaFX test that fails only in windows , but works fine in OSX and Linux

Here is the stacktrace :

Edit : 1

Running com.myproject.meditor.SLIVCodeAreaTest
Tests run: 17, Failures: 0, Errors: 17, Skipped: 0, Time elapsed: 6.656 sec <<< FAILURE! - in com.myproject.meditor.SLIVCodeAreaTest
testRHBlock(com.myproject.meditor.SLIVCodeAreaTest)  Time elapsed: 0 sec  <<< ERROR!
java.lang.ExceptionInInitializerError: null
    at com.sun.glass.ui.Screen.getScreens(Screen.java:70)
    at com.sun.glass.ui.Screen.getMainScreen(Screen.java:61)
    at com.sun.javafx.font.PrismFontFactory.getSystemFontSize(PrismFontFactory.java:1911)
    at com.sun.javafx.font.PrismFontLoader.getSystemFontSize(PrismFontLoader.java:240)
    at javafx.scene.text.Font.getDefaultSystemFontSize(Font.java:71)
    at javafx.scene.text.Font.getDefault(Font.java:86)
    at javafx.scene.text.Text.getFont(Text.java:478)
    at javafx.scene.text.Text.getFontInternal(Text.java:487)
    at javafx.scene.text.Text.access$100(Text.java:95)
    at javafx.scene.text.Text$1.getFont(Text.java:206)
    at com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:174)
    at com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:770)
    at com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1021)
    at com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:223)
    at com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:246)
    at javafx.scene.text.TextFlow.computePrefWidth(TextFlow.java:203)
    at javafx.scene.Parent.prefWidth(Parent.java:915)
    at javafx.scene.layout.Region.prefWidth(Region.java:1419)
    at org.fxmisc.richtext.ParagraphBox.computePrefWidth(ParagraphBox.java:199)
    at org.fxmisc.richtext.ParagraphBox.computeMinWidth(ParagraphBox.java:191)
    at javafx.scene.Parent.minWidth(Parent.java:943)
    at javafx.scene.layout.Region.minWidth(Region.java:1383)
    at org.fxmisc.flowless.VerticalHelper.minBreadth(OrientationHelper.java:234)
    at org.fxmisc.flowless.OrientationHelper.minBreadth(OrientationHelper.java:44)
    at org.reactfx.collection.MappedList.get(MappedList.java:27)
    at org.reactfx.collection.MemoizationListImpl.force(MemoizationList.java:121)
    at org.fxmisc.flowless.SizeTracker.breadthFor(SizeTracker.java:161)
    at org.fxmisc.flowless.CellPositioner.getSizedCell(CellPositioner.java:130)
    at org.fxmisc.flowless.CellPositioner.placeStartAt(CellPositioner.java:95)
    at org.fxmisc.flowless.Navigator.placeStartAtMayCrop(Navigator.java:183)
    at org.fxmisc.flowless.Navigator.visit(Navigator.java:111)
    at org.fxmisc.flowless.StartOffStart.accept(TargetPosition.java:49)
    at org.fxmisc.flowless.Navigator.layoutChildren(Navigator.java:67)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at org.fxmisc.flowless.VirtualFlow.layoutChildren(VirtualFlow.java:165)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at org.fxmisc.flowless.VirtualFlow.visibleCells(VirtualFlow.java:138)
    at com.myproject.util.javafx.codearea.SEditor.<init>(SEditor.java:659)
    at com.myproject.util.javafx.codearea.SEditor.<init>(SEditor.java:607)
    at com.myproject.util.javafx.codearea.SCodeArea.<init>(SCodeArea.java:122)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:124)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:114)
    at com.myproject.meditor.SLItemCodeArea.<init>(SLICodeArea.java:106)
    at com.myproject.meditor.SLItemCodeArea.<init>(SLICodeArea.java:103)
    at com.myproject.meditor.SLIVCodeAreaTest.<clinit>(SLIVCodeAreaTest.java:14)

EDIT: 2

From the stack trace, the part of code that triggered the exception (SLIVCodeAreaTest.java:14) is in the declaration of private static final SLIVCodeArea in the part of code :

import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class SLIVCodeAreaTest {     
    private static final SLIVCodeArea sEditor = new SLIVCodeArea(new SLICodeArea()) {

        @Override protected void updateVisibleParagraphRange() {}   };

    private static final VEditorProblemList sProblemList = 
        new VEditorProblemList(sEditor, new SimpleObjectProperty<>(), false);

    static { sEditor.aggregatedTextChanges().setAggregationEnabled(false); }

Edit : 3

If I remove the keyword static from the initialisation part above , the stacktrace of the error becomes :

Running com.myproject.meditor.SLIVCodeAreaTest
Tests run: 17, Failures: 0, Errors: 17, Skipped: 0, Time elapsed: 1.124 sec <<< FAILURE! - in Running com.myproject.meditor.SLIVCodeAreaTest
testRHBlock(com.myproject.meditor.SLIVCodeAreaTest)  Time elapsed: 0 sec  <<< ERROR!
java.lang.RuntimeException: Internal graphics not initialized yet
    at com.sun.glass.ui.Screen.getScreens(Screen.java:70)
    at com.sun.glass.ui.Screen.getMainScreen(Screen.java:61)
    at com.sun.javafx.font.PrismFontFactory.getSystemFontSize(PrismFontFactory.java:1911)
    at com.sun.javafx.font.PrismFontLoader.getSystemFontSize(PrismFontLoader.java:240)
    at javafx.scene.text.Font.getDefaultSystemFontSize(Font.java:71)
    at javafx.scene.text.Font.getDefault(Font.java:86)
    at javafx.scene.text.Text.getFont(Text.java:478)
    at javafx.scene.text.Text.getFontInternal(Text.java:487)
    at javafx.scene.text.Text.access$100(Text.java:95)
    at javafx.scene.text.Text$1.getFont(Text.java:206)
    at com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:174)
    at com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:770)
    at com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1021)
    at com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:223)
    at com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:246)
    at javafx.scene.text.TextFlow.computePrefWidth(TextFlow.java:203)
    at javafx.scene.Parent.prefWidth(Parent.java:915)
    at javafx.scene.layout.Region.prefWidth(Region.java:1419)
    at org.fxmisc.richtext.ParagraphBox.computePrefWidth(ParagraphBox.java:199)
    at org.fxmisc.richtext.ParagraphBox.computeMinWidth(ParagraphBox.java:191)
    at javafx.scene.Parent.minWidth(Parent.java:943)
    at javafx.scene.layout.Region.minWidth(Region.java:1383)
    at org.fxmisc.flowless.VerticalHelper.minBreadth(OrientationHelper.java:234)
    at org.fxmisc.flowless.OrientationHelper.minBreadth(OrientationHelper.java:44)
    at org.reactfx.collection.MappedList.get(MappedList.java:27)
    at org.reactfx.collection.MemoizationListImpl.force(MemoizationList.java:121)
    at org.fxmisc.flowless.SizeTracker.breadthFor(SizeTracker.java:161)
    at org.fxmisc.flowless.CellPositioner.getSizedCell(CellPositioner.java:130)
    at org.fxmisc.flowless.CellPositioner.placeStartAt(CellPositioner.java:95)
    at org.fxmisc.flowless.Navigator.placeStartAtMayCrop(Navigator.java:183)
    at org.fxmisc.flowless.Navigator.visit(Navigator.java:111)
    at org.fxmisc.flowless.StartOffStart.accept(TargetPosition.java:49)
    at org.fxmisc.flowless.Navigator.layoutChildren(Navigator.java:67)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at org.fxmisc.flowless.VirtualFlow.layoutChildren(VirtualFlow.java:165)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at org.fxmisc.flowless.VirtualFlow.visibleCells(VirtualFlow.java:138)
    at com.myproject.util.javafx.codearea.SEditor.<init>(SEditor.java:659)
    at com.myproject.util.javafx.codearea.SEditor.<init>(SEditor.java:607)
    at com.myproject.util.javafx.codearea.SCodeArea.<init>(SCodeArea.java:122)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:124)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:114)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:106)
    at com.myproject.meditor.SLICodeArea.<init>(SLICodeArea.java:103)
    at com.myproject.meditor.SLIVCodeAreaTest.<init>(SLIVCodeAreaTest.java:14)

PS : The test worked in OSX with and without static keyword.

The same code works fine in Linux and MacOS, but fails in windows. Does anyone have an idea why ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The combination of JavaFX, JUnit and any java.lang.ExceptionInInitializerError is an indicator of an suppressed occurrence of the exception Toolkit not initialized.

To initialise JavaFX you may wait for new JFXPanel() to finish before running the unit test.

See:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...