【发布时间】:2021-08-06 17:51:05
【问题描述】:
点击JButton 时,我需要使用setText 清空JLabel。在actionPerformed 内部,我还有另一个Java 类调用。
如果它返回异常,那么我必须将标签更改为setText("Error occurred")。
如果它返回结果,我必须将相同的标签更改为setText("Process completed")。
我试图生成一个异常并且它工作正常,但是当我再次单击该按钮时,文本不会被空字符串替换。相反,它仍然显示“发生错误”。
请查看下面的代码,让我知道我需要更改什么。
btnConvert.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label1.setText("");
if(lblSource.getText().isEmpty()) {
label2.setText("You have missed to select!! Please select it");
}
else {
label1.setText("processing... ");
VelConverter v = new VelConverter(locations);
String response = v.convert();
if(response.startsWith("Exception")) {
//code
label1.setText("Error Occurred");
}
else {
//code
label1.setText("Completed");
}
}
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 问题听起来像是代码阻塞了 EDT。不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing。
-
空值和“处理中...”消息将永远不会显示,因为 GUI 只能在处理未决事件之后更新。根据您的代码,处理后只有“已完成”和“发生错误”是可能的标签值。请记住,Swing 是单线程的,如果您在 ActionListener 中进行长时间处理,您应该考虑使用 SwingWorker 来完成繁重的工作。
-
Andrew Thompson 编辑了代码。我还将检查 Swing 中的并发性
-
“编辑了代码。” 你为什么告诉我?更重要的是,我们什么时候可以看到 MRE / SSCCE?
-
提示:添加@Rocco(或任何重要的
@)以通知此人有新评论。很高兴你解决了。 :)
标签: java swing awt jbutton jlabel