【问题标题】:Replace JLabel text multiple times on JButton action在 JButton 操作上多次替换 JLabel 文本
【发布时间】: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 exampleShort, 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


【解决方案1】:

感谢 Rocco 和 Andrew Thomson。您关于并发的建议使我研究了 Swing worker。我刚刚使用 Swing worker 分离了线程,我能够达到我的要求。

这个链接让我明白了 Swing 的工作原理很简单。 https://www.geeksforgeeks.org/swingworker-in-java/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多