2012-03-12 53 views
3

我想讓用戶等待一定的時間(10秒)。我知道在JSP或servlet中我們使用META標籤<META HTTP-EQUIV="Refresh" CONTENT="3">。 Swing中有什麼方法可以讓用戶等待一段時間。我正在使用Swing;我想讓用戶等待一段時間,並且我想顯示一些將從數據庫中獲取的信息。是否可以通過Swing?讓用戶等待使用Swing

+0

是否想要在某段時間重新填充某個控件,或者是否要重新加載整個表單?任何方式使用線程你可以使內容加載10秒後 – 2012-03-12 05:42:56

回答

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

你是否嘗試過使用線程。使用

Thread.sleep(10000); 

您可以輕鬆獲得它。您可以獲得更多信息here

3

此前的WebSockets,HTTP服務器無法發送HTTP客戶端 '事件';!交互基本上是請求響應。許多應用程序使用(客戶端)輪詢方法解決此問題。刷新元標記是實現輪詢的一種方式。

搖擺是非常不同的 - 你有充分的事件的力量。所以讓用戶等待預定時間的想法通常是不正確的交互。 (某些類型的遊戲/測驗/動畫是一些例外情況,其中簡單的等待很有意義。)

您應該設計一個功能強大且響應快速的Swing GUI,而不會計算/接收結果。一旦結果可用,更新模型,然後觸發事件通知模型已更改。

該模型本身可以做後臺計算,輪詢等必要的;該代碼不是特定的。如果你想在這方面提供幫助,可以考慮在Stack Overflow上單獨查詢/詢問。

最後,請記住,在擺動線程上睡覺會使UI無響應。並且在相關說明中,您的模型觸發的任何事件應排隊到Swing事件線程上。請參閱SwingUtilities.invokeLater(...)關於如何完成。

+0

不錯的總結:-) – kleopatra 2012-03-12 10:05:16