我的应用程序启动,它将在其中自动创建一些数据库表(如果不存在)并在这些表中创建一些默认值(使用swingworker在后台执行此操作)。然后应用程序继续并从那些表中读取一些数据,我需要第二个过程(从那些表中读取)等待几秒钟,直到从上一步创建表为止。 我用过Thread.sleep(2000);但是在NetBeans中不接受它,因为当我打开像formWindowOpened(java.awt.event.WindowEvent evt)这样的窗口时,这是堆 我该怎么办?
答案 0 :(得分:0)
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
}
}
您可以使用其他软件包:
答案 1 :(得分:0)
更好的方法是使用CompletableFuture(Java 8),通过此API,您可以链接执行并仍然使用单独的线程-> https://www.baeldung.com/java-completablefuture
答案 2 :(得分:0)
实际上,我找到了一种解决问题的简便方法,我只是在类中手动创建了一个JFrame,该类正在创建表,然后对其进行处理,就像该主线程以连续的方式继续正常工作一样。