让用户使用Swing等待

时间:2012-03-12 05:39:41

标签: java swing

我想让用户等待一段时间(10秒)。我知道在JSP或servlet中我们使用META标记<META HTTP-EQUIV="Refresh" CONTENT="3">。在Swing中是否有任何方法可以让用户等待一段时间。我正在使用Swing;我想让用户等待一段时间,我想显示一些将从数据库中提取的信息。可以通过Swing吗?

4 个答案:

答案 0 :(得分: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--;
        }
    }
}

答案 1 :(得分:3)

在WebSockets之前,HTTP服务器无法发送HTTP客户端的“事件”;交互基本上是请求 - 响应。许多应用程序使用(客户端)轮询方法解决此问题。刷新元标记是实现轮询的一种方式。

摆动是非常不同的 - 你有充分的事件力量。因此,使用户等待预定时间量的想法通常是不正确的交互。 (某种类型的游戏/测验/动画是一些例外情况,只需等待即可。)

您应该设计一个功能齐全且响应灵敏的Swing GUI,而不会计算/接收结果。结果可用后,更新模型,然后触发模型已更改的事件广告。

模型本身可以根据需要进行背景计算,轮询等;该代码不是针对特定的。如果您想在这方面提供帮助,请考虑在Stack Overflow上单独查找/询问。

最后,请记住,在swing线程上睡觉会使UI无法响应。在相关的说明中,模型触发的任何事件都应排队到Swing事件线程中。请参阅SwingUtilities.invokeLater(...)了解如何完成此操作。

答案 2 :(得分:2)

我认为你需要JProgressBar!...

答案 3 :(得分:1)

你尝试过线程吗?使用

   Thread.sleep(10000);

你可以轻松实现。您可以获得更多信息here