相关疑难解决方法(0)

如何停止"JavaFX应用程序线程"

我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我正在使用JavaFx框架(我需要一些函数,如文本的CSS样式)我只是生成一些形状和文本到一个隐藏的场景然后保存那些存档的,就是这样,

我知道要使用JavaFx我必须将图形操作传递给JavaFx线程,但是当一切都完成后我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开状态......我真的不会想要强制退出System.exit(),因为如果有什么东西被阻止我可能想知道/等待(我也不想将所有内容都作为JavaFx应用程序执行(因为JavaFx组件不到我主应用程序的1%)

代码非常简单,谷歌搜索我发现只使用

Platform.exit();
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我也试过玩平台参数,如

Platform.setImplicitExit(false);
Run Code Online (Sandbox Code Playgroud)

这是我可以运行的测试应用程序:

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;

public class SOTestFX {
    public static void main(String[] args) {
        SOTestFX t = new SOTestFX();
        t.runFxThread();
    }

    public  void runFxThread(){
        //Application.launch(args);
        final JFXPanel jfxPanel = new JFXPanel(); 
        Platform.runLater(new Runnable() {
            @Override
            public void run() {

                System.err.println("CREATING IMAGE");
                simpleFXoperations();
                System.err.println("NOW CALL EXIT");
                System.err.println("JAVA FX THREAD SHOULD BE EXITED NOW");
                Platform.exit();
            }
        });

        try {
            Thread.sleep(3000); // just wait a bit if something should happen, let it …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2

17
推荐指数
2
解决办法
2万
查看次数

如何在退出应用程序时关闭所有Executor?

根据Brian Goetz的Java Concurrency in Practice,JVM无法退出,直到所有(非守护程序)线程都终止,因此无法关闭Executor可能会阻止JVM退出.

即如果存在执行程序,System.exit(0)不一定按预期工作.似乎有必要放一些

public void stop() { exec.shutdown() }
Run Code Online (Sandbox Code Playgroud)

包含Executors的所有类的方法,然后在应用程序即将终止时调用它们.这是唯一的方法,还是有某种关闭所有Executors的快捷方式?

java concurrency

10
推荐指数
4
解决办法
1万
查看次数

一起使用Platform.exit()和System.exit(int)

我想关闭一个带有指定返回码的javafx应用程序.浏览SO上的答案,我发现了以下成语:

Platform.exit();
System.exit(0); 
Run Code Online (Sandbox Code Playgroud)

例如: 在关闭我的JavaFX程序
或此处之前停止线程:JavaFX应用程序在关闭后仍然运行

这两个方法一个接一个地执行,看起来我们正在尝试复制某些操作.我认为,如果Platform.exit()成功,它不应该返回到System.exit(0)被调用的地方.但是,如果Platform.exit()仅触发在另一个线程上运行的某些关闭操作,则返回并且System.exit(0)可以调用,这可能会导致某些竞争条件,其中两个线程正在尝试关闭同一个应用程序.

那么,这个成语究竟是如何运作的呢?

java multithreading javafx

8
推荐指数
2
解决办法
4921
查看次数

标签 统计

java ×3

javafx ×2

concurrency ×1

javafx-2 ×1

multithreading ×1