我想让用户等待一段时间(10秒)。我知道在JSP或servlet中我们使用META标记<META HTTP-EQUIV="Refresh" CONTENT="3">
。在Swing中是否有任何方法可以让用户等待一段时间。我正在使用Swing;我想让用户等待一段时间,我想显示一些将从数据库中提取的信息。可以通过Swing吗?
答案 0 :(得分:5)
您可以使用javax.swing.Timer
。例如:
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)