JavaFX experiment
Thursday, 2 April 2009
I was having a lot of problems getting the simplest test case below to run without throwing an odd exception:
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.ext.swing.SwingTextField;
import javafx.ext.swing.SwingButton;
Stage {
title : "MyApp"
scene: Scene {
width: 200
height: 200
content: [
VBox{
content:
[
SwingTextField {
columns: 10
text: "TextField"
editable: true
},
SwingButton {
text: "Button"
action: function() { }
}]
}
]
}
}
SwingTextField barfs like this:
Exception in thread "AWT-EventQueue-1" java.lang.IllegalArgumentException: Zero length string passed to TextLayout constructor.
at java.awt.font.TextLayout.(TextLayout.java:364)
at sun.font.FontDesignMetrics.charsWidth(FontDesignMetrics.java:487)
at javax.swing.text.Utilities.getTabbedTextWidth(Utilities.java:262)
at javax.swing.text.Utilities.getTabbedTextWidth(Utilities.java:191)
at javax.swing.text.PlainView.modelToView(PlainView.java:335)
at javax.swing.text.FieldView.modelToView(FieldView.java:248)
at javax.swing.plaf.basic.BasicTextUI$RootView.modelToView(BasicTextUI.java:1496)
at javax.swing.plaf.basic.BasicTextUI.modelToView(BasicTextUI.java:1034)
at javax.swing.text.DefaultCaret.paint(DefaultCaret.java:600)
at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:730)
at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:868)
at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:847)
at javax.swing.JComponent.paintComponent(JComponent.java:758)
at javafx.ext.swing.JTextFieldImpl.paintComponent(JTextFieldImpl.java:77)
at javax.swing.JComponent.paint(JComponent.java:1022)
at javax.swing.JComponent.paintChildren(JComponent.java:859)
at javax.swing.JComponent.paint(JComponent.java:1031)
at com.sun.embeddedswing.EmbeddedPeer.paint(EmbeddedPeer.java:135)
at com.sun.scenario.scenegraph.SGComponent.paint(SGComponent.java:121)
at com.sun.scenario.scenegraph.SGLeaf.render(SGLeaf.java:179)
at com.sun.scenario.scenegraph.SGWrapper.render(SGWrapper.java:122)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:222)
at com.sun.scenario.scenegraph.SGWrapper.render(SGWrapper.java:122)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:222)
at com.sun.scenario.scenegraph.SGGroup.render(SGGroup.java:222)
at com.sun.scenario.scenegraph.JSGPanel.paintComponent(JSGPanel.java:582)
at javax.swing.JComponent.paint(JComponent.java:1022)
at javax.swing.JComponent.paintChildren(JComponent.java:859)
at javax.swing.JComponent.paint(JComponent.java:1031)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:564)
at javax.swing.JComponent.paintChildren(JComponent.java:859)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5111)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1386)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1317)
at javax.swing.RepaintManager.paint(RepaintManager.java:1132)
at javax.swing.JComponent.paint(JComponent.java:1008)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1797)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:667)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at com.sun.embeddedswing.EmbeddedEventQueue.dispatchEvent(EmbeddedEventQueue.java:369)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Running javafx with the verbose switch pointed the fault out
javafx -verbose:class test : : [Loaded java.awt.Container$EventTargetFilter from c:\Progra~1\Java\jdk1.6.0\jre\lib\rt.jar] :
I was running an old version of the JDK!
Unsetting the JAVA_HOME resolved the problem.
I hope this helps somebody.
You should follow me on twitter here