【发布时间】:2013-02-20 03:01:44
【问题描述】:
我为我的班级制作了一个简单的摇摆程序,它可以根据 ComboBox 中的选定索引更改时区和其他一些内容。当方法 run() 如下所示时工作正常:
public void run() {
while(true){
Calendar c = Calendar.getInstance();
int h = c.get(Calendar.HOUR);
int m = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
l.setText(""+h+":"+m+":"+(s<10?"0"+s:s));
try {
t.sleep(1000);
} catch (InterruptedException ex) {}
}
}
但是,当我尝试重新定义它并使时间更改起作用时,我在这一行中得到一个空指针异常:
p.cb.addItemListener(new ItemListener() {
方法 run() 看起来像这样,它不会工作。有什么想法吗?
public void run() {
while(true){
p.cb.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Calendar c = Calendar.getInstance();
int h = c.get(Calendar.HOUR);
int m = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
int index = p.cb.getSelectedIndex();
if(index == 0){
l.setText(""+h+":"+m+":"+(s<10?"0"+s:s));
}
else if(index == 1){
l.setText(""+(h-6)+":"+m+":"+(s<10?"0"+s:s));
}
else if(index == 2){
l.setText(""+(h-1)+":"+m+":"+(s<10?"0"+s:s));
}
else if(index == 3){
l.setText(""+(h-6)+":"+m+":"+(s<10?"0"+s:s));
}
else if(index == 4){
l.setText(""+(h+8)+":"+m+":"+(s<10?"0"+s:s));
}
}
});
try {
t.sleep(1000);
} catch (InterruptedException ex) {}
}
}
如果有人感到困惑,p 是 JFrame 类的一个实例,而 cb 是对 JFrame 类中 ComboBox 的引用。
【问题讨论】:
-
你在哪里初始化
ComboBox? -
发布堆栈跟踪,以防 BloodShura 不正确。顺便说一句:您每秒添加一个 ItemListener 。那不是那么好......
-
感谢有关 ItemListener 的提示。我觉得自己像个白痴,但我想问一下,堆栈跟踪到底是什么?
-
堆栈跟踪是在程序崩溃/停止之前进行的方法调用的列表(实际上是:堆栈)。当你得到 NullPointerException 时,它通常会写更多的行。这就是调用堆栈。
-
pastebin.com/W3tg35fq 这就是cb所在的整个班级。 pastebin.com/KXwNdTKb - 线程所在的类。
标签: java multithreading swing user-interface calendar