使用Swing让用户等待

3

我想让用户等待一定的时间(10秒)。我知道在JSP或servlet中我们使用META标签<META HTTP-EQUIV="Refresh" CONTENT="3">。在Swing中有没有办法让用户等待一段时间?我正使用Swing;我想让用户等待一段时间,并显示从数据库中获取的某些信息。这通过Swing是否可行?


你想在一段时间后重新填充某些控件,还是想重新加载整个表单。无论如何,使用线程可以使内容在10秒后加载。 - Amritpal Singh
4个回答

5
您可以使用javax.swing.Timer。例如:

enter image description here

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class SimpleTimer extends JFrame implements ActionListener 
{
    private JLabel label;
    private Timer timer;
    private int counter = 10; // the duration
    private int delay = 1000; // every 1 second
    private static final long serialVersionUID = 1L;

    public SimpleTimer()
    {
        super("Simple Timer");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 65);
        label = new JLabel("Wait for " + counter + " sec");
        getContentPane().add(label);
        timer = new Timer(delay, this);
        timer.setInitialDelay(0);
        timer.start();
        setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new SimpleTimer();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(counter == 0)
        {
            timer.stop();
            label.setText("The time is up!");
        }
        else
        {
            label.setText("Wait for " + counter + " sec");
            counter--;
        }
    }
}

3
在WebSockets出现之前,HTTP服务器无法向HTTP客户端发送“事件”;交互基本上是请求-响应。许多应用程序使用(客户端)轮询方法来解决这个问题。刷新meta标签是实现轮询的一种方式。
Swing非常不同——您可以充分利用事件的优势。因此,让用户等待预定时间通常是不正确的交互方式。(某些游戏/测验/动画是几个例外,其中简单地等待是有意义的。)
您应该设计一个Swing GUI,使其在结果未被计算/接收时功能齐全且响应迅速。一旦结果可用,更新模型并触发一个事件,通知模型已更改。
模型本身可以进行后台计算、轮询等必要操作;该代码与Swing无关。如果您需要帮助,请考虑在Stack Overflow上寻找/询问此方面的问题。

最后,请记住,在摆动线程上睡觉会使UI无响应。另外,您的模型触发的任何事件都应该排队到Swing事件线程上。有关如何执行此操作,请参见SwingUtilities.invokeLater(...)


2

1

你尝试过使用线程吗?

   Thread.sleep(10000);

你可以轻松地实现它。你可以在这里获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接