gpt4 book ai didi

java - 如何通过内部类itemListener修改类变量?

转载 作者:行者123 更新时间:2023-11-30 03:56:59 24 4
gpt4 key购买 nike

我这里有以下代码:

public class A extends Runnable {
ArrayList<String> choosenFiles;

run(){
/*graphic stuff such as JFrame,JLabel,JButtons*/
}

private ButtonListener implements ActionListener {
/*options*/
}

public class cbListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
Checkbox cb = (Checkbox)e.getItemSelectable();
String cbl = cb.getLabel();

if (e.getStateChange() == ItemEvent.SELECTED) {
JOptionPane.showMessageDialog(null, "selected:\n" + cbl);
choosenFiles.add(cbl);
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
JOptionPane.showMessageDialog(null, "deselected:\n" + cbl);
choosenFiles.remove(cbl);
}
}
}

问题似乎是 CBListener 无法访问 choosenFile,因为出现 AWT-EventQueue-0 java.lang.NullPointerException

这是堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FileDownloader.Client.User$cbListener.itemStateChanged(Unknown Source)
at java.awt.Checkbox.processItemEvent(Checkbox.java:563)
at java.awt.Checkbox.processEvent(Checkbox.java:530)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:674)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege
(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege
(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:647)
at java.awt.EventQueue$3.run(EventQueue.java:645)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege
(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:644)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

有办法解决这个问题吗?

最佳答案

看起来像choosenFiles尚未初始化;这应该尽早发生,例如在构造函数或初始化方法中。此外,尽可能使用最通用的界面也是一种很好的做法,因此如果没有充分的理由 choosenFiles确实被定义为 ArrayList<String> ,将其设为 List<String> .

关于java - 如何通过内部类itemListener修改类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com