Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel不刷新而不需要额外线程?_Java_Swing_Jlabel_Event Dispatch Thread_Actionevent - Fatal编程技术网

Java JLabel不刷新而不需要额外线程?

Java JLabel不刷新而不需要额外线程?,java,swing,jlabel,event-dispatch-thread,actionevent,Java,Swing,Jlabel,Event Dispatch Thread,Actionevent,我正在制作一个倒数计时器,它每秒钟刷新一次 我一辈子都不知道如何让JLabel刷新。我搜索了其他线程,但它们都涉及使用其他线程。是否有办法使JLabel/面板刷新?(可能不需要面板)。如果我移除while循环,它会在原始时间为我提供一个静止的计时器字符串,并且不会减少。但是如果我包含while循环,它只会返回一个恒定的空白屏幕,直到计时器用完,然后返回到原始值 我应该如何刷新JLabel,使其在每次递减时都显示在GUI上(希望不使用线程..)?(或每次while循环运行时) “如果我删除whil

我正在制作一个倒数计时器,它每秒钟刷新一次

我一辈子都不知道如何让JLabel刷新。我搜索了其他线程,但它们都涉及使用其他线程。是否有办法使JLabel/面板刷新?(可能不需要面板)。如果我移除while循环,它会在原始时间为我提供一个静止的计时器字符串,并且不会减少。但是如果我包含while循环,它只会返回一个恒定的空白屏幕,直到计时器用完,然后返回到原始值

我应该如何刷新JLabel,使其在每次递减时都显示在GUI上(希望不使用线程..)?(或每次while循环运行时)

“如果我删除while循环,它会工作”

您正在阻止事件调度线程

Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容

有关更多详细信息,请参阅

最简单的解决方案是使用Swing
计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行

有关更多详细信息,请参阅

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        counter++;
        label.setText(count);
    }
});
“如果我删除while循环,它会工作”

您正在阻止事件调度线程

Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容

有关更多详细信息,请参阅

最简单的解决方案是使用Swing
计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行

有关更多详细信息,请参阅

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        counter++;
        label.setText(count);
    }
});
“如果我删除while循环,它会工作”

您正在阻止事件调度线程

Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容

有关更多详细信息,请参阅

最简单的解决方案是使用Swing
计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行

有关更多详细信息,请参阅

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        counter++;
        label.setText(count);
    }
});
“如果我删除while循环,它会工作”

您正在阻止事件调度线程

Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容

有关更多详细信息,请参阅

最简单的解决方案是使用Swing
计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行

有关更多详细信息,请参阅

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        counter++;
        label.setText(count);
    }
});

为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?