I am new to Java in general and in particular with the Swing library. When I experimented with the Notepad demo (standard demo from JDK), I got a crash when trying to change text in the editor window. My sample code:
void Filter(Component f){
if (f instanceof JTextComponent){
JTextComponent textComponent = (JTextComponent) f;
textComponent.setVisible(false); //Works
textComponent.setVisible(true); //Works
textComponent.getText(); //Works
textComponent.updateUI(); //Works
textComponent.setText("Hello world!"); //Crashes
}else{
RecursiveGet(f);
}
}
void RecursiveGet(Component c){
for (Component f : ((JComponent) c).getComponents()) {
if (f instanceof JComponent) {
Filter(f);
}
}
}
I searched for instance JTextComponent, until I found it and then tested some methods. I think I am missing something, some details. My environment JDK 1.7, JRE 7.0, Win7 x64. I will be glad to have any help. Thank you.
Update
I add Exception handler
void Filter(Component f){
if (f instanceof JTextComponent){
JTextComponent textComponent = (JTextComponent) f;
textComponent.setVisible(false); //Work
textComponent.setVisible(true); //Work
textComponent.getText(); //Work
textComponent.updateUI(); //Work
try {
textComponent.setText("Hello world!"); //Crash
} catch (Exception e) {
e.printStackTrace();
}
}else{
RecursiveGet(f);
}
}
and get this..
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.synth.SynthContext.getPainter(Unknown Source)
at javax.swing.plaf.synth.SynthTextAreaUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown S
ource)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$700(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Update 2
setText method work after add Exception handler block. But what i miss?
No comments:
Post a Comment