在主线程中执行数据库请求等繁重操作可能会冻结 GUI。多线程允许您异步执行此类操作。让我们探索如何在 JavaFX 中使用 Thread 和 Runnable 类。
在您的代码中,尝试更新 courseCodeLbl UI 时遇到 IllegalStateException来自使用 Thread 创建的后台线程的元素。这违反了一个关键的 JavaFX 规则:必须在 JavaFX 应用程序线程上对场景图中的节点进行修改。
1。使用 Thread 和 Runnable 类:
您可以通过实现 Runnable 接口在单独的线程中执行任务。 Runnable对象的run方法包含要执行的代码。
Thread t = new Thread(new Runnable() { @Override public void run() { // Perform database request here } });
2.在 run 中调用不同的方法:
您可以通过创建类的实例并调用其方法来在 run 方法中调用不同的方法。
MyClass myClass = new MyClass(); Thread t = new Thread(new Runnable() { @Override public void run() { myClass.method1(); myClass.method2(); } });
JavaFX 为多线程提供了 javafx.concurrent API,专为处理 UI 应用程序而设计。它提供:
- 任务类:
代表一次性后台任务,可以返回结果或引发异常。
- 回调:
setOnSucceeded 和 setOnFailed 等方便的方法可以自动调用 FX 上的处理程序应用程序线程。
使用 JavaFX 并发 API:
Task<Course> task = new Task<>() { @Override public Course call() { return myDAO.getCourseByCode(courseId); } }; task.setOnSucceeded(e -> { Course course = task.getValue(); courseCodeLbl.setText(course.getName()); }); exec.execute(task);
通过利用线程,您可以异步执行数据库请求,从而保持 JavaFX UI 的响应能力。请记住遵守JavaFX规则,以避免异常并确保顺利运行。
以上是Java 多线程如何提高数据库请求性能并防止 JavaFX 应用程序中的 UI 冻结?的详细内容。更多信息请关注PHP中文网其他相关文章!