jjzjj

JavaFX : Use a Thread more than once

coder 2024-03-03 原文

我是 JavaFX 的新手,线程有点问题:我可以执行它两次,但找不到原因。

这是我的代码的总结:

Task<Void> task = new Task<Void>() {
    @Override public Void call() throws ImageLoadedException, HomographyException, IOException {
        try{
            System.out.println("GO !");
            return null;
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void succeeded() {
        super.succeeded();
        System.out.println("SUCCEEDED");
     }
};

@FXML protected void launch(ActionEvent event){
    new Thread(task).start();
}

当我第一次点击启动线程的按钮时,我的任务运行没有任何问题(我的控制台显示“开始!”和“成功”)。

但是,如果我第二次单击,则不会添加任何内容。难道我做错了什么 ?我们不能多次使用一个线程吗?

最佳答案

来自Thread.start()文档:

It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

来自Concurrency in JavaFX教程:

The Task class defines a one-time object that cannot be reused. If you need a reusable Worker object, use the Service class.

因此,您必须考虑 Service类而不是 Task .


编辑:这应该适合您:

Service service = new Service<>(task);

//Updated use this to create a new Service object instead
    Service service = new Service() {
    @Override
    protected Task createTask() {
        return new Task() {
            @Override
            protected Void call() throws Exception {
                //Your codes here
                return null;
            }
        };
    }
};

@FXML protected void launch(ActionEvent event){
     if (!service.isRunning()) {
        service.reset();
        service.start();
    }
}

关于JavaFX : Use a Thread more than once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16037062/

有关JavaFX : Use a Thread more than once的更多相关文章

  1. java - 从 JavaFX 程序为 WebView 执行 Javascript 函数 - 2

    我正在尝试从Java程序执行Javascript函数。Javascript函数获取HTML文件的内容并突出显示特定单词的出现。是否可以从webview对象调用Javascript函数? 最佳答案 要在WebView中运行javascript,您可以使用WebEngine.executeScript()方法。并且有很多方法可以通过javascript突出显示文本。例如。HighlightwordinHTMLtext(butnotmarkup)一起:WebViewwebView=newWebView();finalWebEngineen

  2. javascript - JavaFX WebView 禁用同源策略(允许跨域请求) - 2

    我正在开发一个主要是美化网页的JavaFX应用程序。它是一个桌面应用程序(它没有嵌入到网页中)并且它有一个用于主UI的WebView。该应用程序本身的唯一目的是使用Bluecove访问蓝牙设备,因为在Web浏览器上直接使用JavaScript是不可能的。概念验证工作正常(我能够从Java调用JavaScript代码,反之亦然)但我有一个额外的要求,即从JavaScript中调用任意Web服务/API,但这违反了同源策略(类似于这在Android上:AllowremoteajaxcallsinanAndroidWebview+jquerymobile)。这在JavaFX上可行吗?有什么建

  3. java - 如何解决 netbean javafx 应用程序中不存在 com.sun.org.apache.xml.internal.security 包 - 2

    我想在NetBean8.0.2中构建.jar。我开发了一个基于javafx应用程序的小项目。我的项目使用诸如com.sun.org.apache.xml.internal.security、com.sun.org.apache.xml.internal.security.c14n和com.sun.org.apache.xml.internal.security.utils.我的项目在Netbean上运行良好,没有警告或错误。但是当我将这个项目构建为jar文件时,发生了以下错误:**error:packagecom.sun.org.apache.xml.internal.security

  4. JavaFX 只允许用户编辑特定的文本区域 - 2

    我正在使用javafx设计自定义XMLView。想象一下以下XML。EmpireBurlesqueBobDylanUSAColumbia10.901985现在我希望用户能够编辑标题、艺术家等,而他不能更改XML的其余部分。请注意,我的目标是使用XML样式实现此目的,而不是向用户显示输入、对话框。有什么办法可以实现吗? 最佳答案 你可以使用TextFormatter使用正则表达式过滤器以确保格式:这只是一个小示例:(您应该根据需要调整正则表达式)TextAreata=newTextArea();ta.setText("\nEmpire

  5. JavaFx TableView 列不填充 TableView 宽度 - 2

    我有一个用SceneBuilder生成的TableView,所有列都是从其他View导入的FXML,直到没有问题,但列没有填满宽度。我试图用场景构建器和FXML解决这个问题,但没有成功,所有的尺寸都被计算出来了。我尝试使用更改监听器对其进行编码,该监听器会在每次窗口更改大小以适应列的大小时进行检查。这行得通并且列的大小调整到适当的宽度(基本上我得到TableView宽度并将其除以列数),但由于某种原因列开始的点没有改变并且它们与彼此。有什么建议吗? 最佳答案 在Scenebuilder中选择TableView,然后转到属性,将“Co

  6. xml - 即时动态构建 JavaFX UI - 2

    我是JavaFX的新手。仍在摆弄一些示例,以尝试确定这是否适用于我们正在尝试构建的应用程序。我们应用程序的第一阶段是一种数据输入阶段,用户将准备好提出很多问题并记录他的回答。这里的问题是,另一个团队正在构建问题集,并且这些问题在XML中,如下所示。EnterthenameoftheComponentSelectmechanismtypeType1Type2Type3Type4Whetherthepartshavebeenverifiedbythesupervisor?WhetherthecomponentisavailablewithinthedomicileEnterthequant

  7. java - 尝试运行 javafx 应用程序时出现 "FXMLLoader.constructLoadException" - 2

    我已经在互联网的最深处进行了搜索,但似乎找不到答案-.-问题出在我要编写的javaFx程序中。但除了添加Controller类之外,我无法做任何进一步的事情。我几乎遵循了所有可以找到的教程,但我仍然不知道这个问题。这是异常(exception)情况:javafx.fxml.LoadException:/U:/BankingSolutions/MediaCenterFX/bin/main/ressources/view/MainUI.fxml:12atjavafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617)at

  8. xml - Javafx fxml 文件 TextArea 文本中的换行符和制表符 - 2

    如何在`.fxml文件的TextArea中编辑text我可以使用linebreaks和tabs。文本区域是预定义的,无法编辑。支持图片FXML文件View 最佳答案 如果你想直接使用文本你可以使用一些东西:如果你想在SceneBuilder中使用,你可以切换到多行模式。切换到多行模式,场景构建器将插入: for\n for\t 关于xml-Javafxfxml文件TextArea文本中的换行符和制表符,我们在StackOverflow上找到一个类似的问题:

  9. java - 即使应用程序在 java/javafx 中关闭,它也会在后台运行 - 2

    我正在用Java和JavaFX创建一个闹钟。问题是,即使应用程序已关闭,我如何运行该应用程序计时器。例如:-有人在上午9:00设置了闹钟,但当前时间是上午8:00并关闭了应用程序,然后预定的闹钟重置并且不起作用(在我的情况下)。我想像Windows中的闹钟一样。即使有人关闭闹钟应用程序,它也会在指定时间显示通知并响起。我也用谷歌搜索了这个问题,但到处都发现只有android和一些警报管理器功能(我对此一无所知),这就是我自己发布的原因。提前感谢您的帮助。 最佳答案 默认情况下,当最后一个阶段关闭时,JavaFX会终止您的应用程序。您

  10. java - 如何在 Windows 的任务栏上阻止或更改我自己的 javafx 应用程序符号的右键单击菜单 - 2

    我需要删除“关闭窗口”,它是右键单击任务栏程序时窗口中的菜单项。我该怎么做? 最佳答案 你不能。这是适用于所有最小化应用程序的Windows功能。它与JavaFX或Java本身无关。 关于java-如何在Windows的任务栏上阻止或更改我自己的javafx应用程序符号的右键单击菜单,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/46542844/

随机推荐