Javafx支持启动自己的线程吗?

 2023-02-15    295  

问题描述

我已经写了一个简单的Javafx应用程序,该应用程序启动了一个新线程,并且可以从NetBeans开始使用.
但是我在编译过程中遵循警告:

explicit use of threads is not supported

这是否意味着现在可能在所有可能的设备(例如手机或浏览器)中工作?

Javafx支持启动自己的线程吗?

推荐答案

javafx本身必须在主Javafx线程上运行,因此目前不支持直接从Javafx启动线程.但是,您可以创建一个产生线程的Java类.因此,您的Javafx类调用Java类,然后启动线程.

从Java线程回到Javafx,您需要在主Javafx线程上.如何做到这一点的示例是:

import com.sun.javafx.runtime.Entry;
Entry.deferAction( new Runnable() {
                    @Override
                    public void run() {
                        fxListener.onMessage(copy);
                    }
                } );

您不应直接从Java操纵Javafx对象.如果您从Java进行此操作,则需要使用Javafx.Reflect类.

其他推荐答案

我必须推荐Jfxtras( http://jfxtras.org/)XWorker类.从本质上讲,这是您提到的问题的解决方法,即您可以在背景线程中使用Javafx代码.它适用于大多数任务,但是它也有点危险,因为您可以轻松地创建与此无线安全的代码.

请参阅: http://jfxtras.googlecode.com/svn/site/javadoc/release-0.6/org.jfxtras.async/org.jfxtras.jfxtras.ashnc.xworker.xworker.xworker.html

基本用法:

var currentImage:Image;
 var worker = XWorker {
     inBackground: function() {
         return Image {url: currentFile.toURL().toString(), height: imageHeight};
     }
     onDone: function(result) {
         currentImage = result as Image;
     }
 }

在背景秋千线程中完成了内置内完成的所有操作.该线程可以返回结果,该结果将传递给OnDone. OnDone在Javafx事件dispatch线程(所有其他Javafx代码都运行的主线程)中执行,因此您可以返回正常使用情况.将其视为前景.在大多数情况下,您不想访问也可以在”前景”中同时访问的任何返回地.只要线程之间共享的对象是线程安全的,您就可以对此规则进行例外.在大多数情况下,Javafx代码不能安全,但是您可以使用Java线程安全对象(例如JPA EntityManager工厂)或诸如BlockingQueue之类的容器.后者对于制作/消费者模型可能很有用.

另外,如果您的运行时间很长,并且要定期将更新发送到”前景”,则可以使用发布/流程.这是一个例子:

var worker = XWorker {
     inBackground: function() {
         while (true) {
           // Do something
           publish(someStuff);
         } 
     }
     process: function(someStuff: SomeStuff[]):Void {
       // Do something with some stuff. You are now in
       // "the foreground", so you can freely access 
       // JavaFX objects.
     }
     onDone: function(result) {
         currentImage = result as Image;
     }
 }

这对于从某种UI显示的背景线程发送诸如日志消息之类的内容很有用.

以上所述是小编给大家介绍的Javafx支持启动自己的线程吗?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33784.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。