[英]Making a Thread sleep until some other work is done
我的應用程序啟動,它將在其中自動創建一些數據庫表(如果不存在)並在這些表中創建一些默認值(使用swingworker在后台執行此操作)。 然后應用程序繼續並從那些表中讀取一些數據,我需要第二個過程(從那些表中讀取)等待幾秒鍾,直到從上一步創建表為止。 我用過Thread.sleep(2000); 但是在NetBeans中不接受它,因為當我像這樣打開窗口時,這是堆pepeWindowOpened(java.awt.event.WindowEvent evt)我該怎么做?
java.util.concurrent比Swing Worker更可移植。
使用執行程序“單線程”確保作業是順序的,並盡快執行。
import java.sql.Connection;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class DatabaseLayer {
private Connection _connection;
public DatabaseLayer( /* some args here */ ) {
// _connection = ... use args
final ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit( this::create );
executor.submit( this::read );
}
void create() {
_connection = null;
System.err.println( "Create database..." );
}
void read() {
System.err.println( "Read database..." );
}
}
public class Main /* extends swing JFrame or javafx Application */ {
private DatabaseLayer _dbLayer;
public void start() {
_dbLayer = new DatabaseLayer(
/* get parameters from properties file or command line */);
}
public static void main( String[] args ) {
// create user interface from args
}
}
您可以使用其他軟件包:
更好的方法是使用CompletableFuture(Java 8),通過此API,您可以鏈接執行並仍使用單獨的線程-> https://www.baeldung.com/java-completablefuture
實際上,我找到了一種解決問題的簡便方法,我只是在創建表的類中手動創建了一個JFrame,然后再將其處理掉,就像這個主線程以連續的方式繼續正常運行一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.