【问题标题】:How to I check whether a process is started or not in Java如何在 Java 中检查进程是否已启动
【发布时间】:2021-10-09 13:44:38
【问题描述】:

我有一个与 java 中的进程创建有关的问题。主要场景是我想显示一个进度条/旋转加载器,直到进程开始 下面是使用java启动进程的代码。

ProcessBuilder processBuilder = new ProcessBuilder("python", filename);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();

我如何知道这个过程已经开始。 谢谢

【问题讨论】:

  • 你真正想要什么? start() 开始您的流程,您无需等待。
  • 在那段代码之后,你为什么认为它不会启动?
  • @Jean-BaptisteYunès 进程开始时有 3.4 秒的延迟
  • @AndyTurner 进程在 3.4 秒后开始,我想向用户显示一个等待进度条,直到进程开始
  • 启动时 3/4 秒究竟是什么意思?你在计算过程的响应性吗?那不是一回事。 start() 启动它,给定进程可能有一段时间没有响应。

标签: java multithreading process processbuilder


【解决方案1】:

ProcessBuilder#start() 方法在您调用该方法后立即启动该过程。如果找不到可执行文件,则会抛出IOException。如果一切正常,您的过程肯定已经开始。是的,该过程可能需要一些时间才能加载,但这是该过程响应所需的时间。它立即开始。

尝试通过此代码运行记事本

System.out.println("Starting...");
new ProcessBuilder("notepad").start();

只要打印了Starting...,您就会看到弹出的记事本窗口。 同样,这取决于您的处理器速度。像记事本这样的轻量级应用程序可能会立即弹出,但像 Android Studio 这样的重量级应用程序可能需要一些时间才能弹出。但无论过程如何,它都可能立即开始。

【讨论】:

  • 谢谢你的解释
【解决方案2】:

好的,所以我为我的问题制定了解决方案。 我使用线程类和进程来执行我需要的任务 这是我所做的

Loader loader = new Loader();
        loader.setVisible(true);
        Thread t1 = new Thread(new Runnable(){
            @Override
            public void run() {
                Timer timer = new Timer(1000, new ActionListener() {
                private int count = 4;
                @Override
                public void actionPerformed(ActionEvent e) {
                        if (count <= 0) {
                            loader.setVisible(false);
                            ((Timer)e.getSource()).stop();
                        } else {
                            count--;
                        }
                    }
                });
                timer.start();
            }
        });
        t1.start();

Loader 是我的简单类,它在面板中显示 4 秒的 gif

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2014-03-30
    • 2012-02-17
    相关资源
    最近更新 更多