Tôi mới sử dụng Java nói chung và đặc biệt với thư viện Swing. Khi tôi thử nghiệm với bản demo Notepad (bản demo tiêu chuẩn từ JDK), tôi gặp sự cố khi cố gắng thay đổi văn bản trong cửa sổ trình soạn thảo. mẫu mã của tôi:JTextArea/JTextComponent setText gây ra sự cố
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);
}
}
}
Tôi đã tìm kiếm ví dụ JTextComponent, cho đến khi tôi tìm thấy nó và sau đó thử nghiệm một số phương pháp. Tôi nghĩ rằng tôi đang thiếu một cái gì đó, một số chi tiết. Môi trường của tôi JDK 1.7, JRE 7.0, Win7 x64. Tôi sẽ rất vui khi được giúp đỡ. Cảm ơn bạn.
Cập nhật tôi thêm 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);
}
}
và có được điều này ..
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)
Cập nhật 2 phương pháp setText làm việc sau khi thêm khối xử lý ngoại lệ. Nhưng những gì tôi nhớ?
Có bất kỳ lỗi được báo cáo? – Brainbot
Ý của bạn là gì? Nó có ném một ngoại lệ không? Nếu có, nó là cái gì? –
Tôi có nghĩa là ứng dụng Notepad đã bị đóng băng và sẽ không phản hồi thao tác của tôi. – Darius