猿问

使线程休眠,直到完成其他一些工作

我的应用程序启动,如果不存在,它将自动创建一些数据库表,并在这些表中创建一些默认值(使用 swingworker 在后台执行此操作)。然后应用程序继续并从这些表中读取一些数据,我需要第二个进程(从这些表中读取)等待几秒钟,直到从上一步创建表。我用过 Thread.sleep(2000); 但它在 NetBeans 中不被接受,因为当我像这样 formWindowOpened(java.awt.event.WindowEvent evt) 那样打开窗口时,我该怎么做?



蝴蝶刀刀
浏览 96回答 3
3回答

小怪兽爱吃肉

java.util.concurrent比 Swing 工作者更便携。使用执行器“单线程”确保作业是顺序的,尽快执行。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   }}您可以使用不同的软件包:db层:几个类应用逻辑:每个业务逻辑转换一个演示文稿:您可以在桌面(swing 或 javafx)或 web ui 之间进行选择

跃然一笑

更好的方法是使用 CompletableFuture (Java 8),使用此 API,您可以链接执行并仍然使用单独的线程-> https://www.baeldung.com/java-completablefuture

繁花如伊

实际上,我找到了一种更简单的方法来解决我的问题,我只是在创建表的类中手动创建了一个 JFrame,然后再将其处理掉,就像这样,主线程以顺序的方式继续正常。
随时随地看视频慕课网APP

相关分类

Java
我要回答