对审阅者的注意:这可能是NimbusLookAndFeel中的一个(可能已知的)错误,并且(到目前为止)还不是规范NPE问题的dup。
我有多个类,但我不知道其中哪个类可能是异常。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.synth.SynthTreeUI.paint(SynthTreeUI.java:382)
at javax.swing.plaf.synth.SynthTreeUI.update(SynthTreeUI.java:269)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)正如您所看到的,异常不会链接我的代码。
对于create a Minimal, Complete, and Verifiable example,我不能通过我所有的项目,因为它很长,而且我不能将一段代码放在上面,因为我没有发现源代码的线索。
我提出:
DefaultMutableTreeNode到
@覆盖公共字符串toString()DefaultTreeCellRenderer到
@重写公共组件getTreeCellRendererComponent(JTree树、对象值、布尔选择、布尔展开、布尔叶、整数行、布尔hasFocus)现在的情况是:
//Fails
//javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
//Works
//javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
//Works
//javax.swing.UIManager.setLookAndFeel("com.apple.laf.AquaLookAndFeel");注意:,我不需要解决方案。这是不合逻辑的,不提供代码!
问题:,特别是我应该在哪里寻找问题的根源?
发布于 2019-03-03 01:51:06
我和JTree有类似的情况,我问题的原因是(更新线程内部的JTree ),拯救是使用SwingWorker。这一解释是基于类似的帖子
https://www.javacodegeeks.com/2012/12/multi-threading-in-java-swing-with-swingworker.html
我并不假装给出了一个严格的函数解决方案或代码,我只是给您一个如何解决问题的想法。
class SwingWorkerCustomDTO extends SwingWorker<Void, CustomDTO> {
@Override
protected Void doInBackground() throws Exception {
//Initialization and Iterative Operation over JTree
myJTree = new JTree(/**/); // or Set the Model
//someLongTask(arguments);
/*long time/delayed Task that he sometimes performs o operations on JTree.*/
return null;
}
@Override
protected void done() {
//reload or update JTree /*or what you imagine doing*/
//removeOrUpdateTask();
//example
DefaultTreeModel treeModel = ((DefaultTreeModel)myJTree.getModel());
DefaultMutableTreeNode rootTreeNode = (DefaultMutableTreeNode) treeModel.getRoot();
treeModel.reload(rootTreeNode);
}
@Override
protected void process(List<CustomDTO> chunks) {
for (final CustomDTO chunk : chunks) {
//The Operation (Add/Remove/Update) of JTree are performed here!.
switch (chunk.getOperarionType()) {
case ADD_CONSTANT: /*or what you define*/
//Add Node(Object or Objects[]) to Some JTree;
break;
case UPDATE_CONSTANT: /*or what you define*/
//Update Node(Object or Objects[]) to Some JTree;
break;
case REMOVE_CONSTANT:
//Remove Node(Object or Objects[]) from Some JTree;
break;
}
}
}
public void callPublish(CustomDTO customDTO) {
/*I expose a public method to pass arguments that make functionalities
(Add/Remove/Update Node) required in the JTree invoked externally.*/
publish(customDTO);
}
}外部您可以调用您自己的自定义类
swingWorkerCustomDTO.callPublish(
new CustomDTO(int OperationType/*or what you define*/,
Object argument /*or Object[] arguments*/));CustomDTO是一个由您定义的类,其中包含操作(您想要做什么),比如int属性,以及需要的另一个属性。
https://stackoverflow.com/questions/50548764
复制相似问题