gpt4 book ai didi

java - 为什么我重新启动的 Java 程序会失去键盘焦点?

转载 作者:行者123 更新时间:2023-11-30 07:51:20 25 4
gpt4 key购买 nike

我尝试创建一个简化的故障安全 Java 应用程序,每当强制关闭时(在 Windows 中,使用 CTRL+C 的 CMD 命令),该应用程序都会自行重新启动。

批处理代码如下所示:

@echo off
setlocal

start /wait java BatchWakeMeUpSomehow

if errorlevel 1 goto retry
echo Finished successfully
exit

:retry
echo retrying...
start /wait java BatchWakeMeUpSomehow

Java 代码是这样的:

public class WakeMeUpSomehow {
static class Message extends Thread {

public void run() {
try {

while(true)
{
System.out.println("Hello World from run");

}
} catch (Exception e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
try {
Runtime.getRuntime().addShutdownHook(new Message());
while(true)
{
System.out.println("Hello World");
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

我想澄清我的理解。我认为,由于Java运行在JVM环境中,因此它在重新启动强制关闭的JVM方面有一些限制(如果我们通过批处理文件重新启动强制关闭的JVM,那么它会失去光标焦点​​,并且它会丢失)。仅在无法获得键盘焦点的新 CMD 窗口中运行。

我的目标是让这个应用程序继续循环运行(类似于“数字怪胎”),但我只能重新运行它一次(它在无响应的 CMD 窗口中运行)

有人建议我查看 Apache Daemon 工具,但我不确定这有什么帮助。

最佳答案

要在错误级别 1 及以上的情况下进行无限循环,请在 start 行之前添加一个标签:

:run
start /wait java BatchWakeMeUpSomehow
if errorlevel 1 echo retrying... & goto run
echo Finished successfully

但是这也会打开一个新窗口,因此如果您想在已启动的窗口中重新启动 java 进程,您可以使用 typeperf 来检查其 CPU 使用情况(这样您就可以强制关闭进程并重新启动它)或者只需在执行返回到批处理文件中后重新启动 java 即可。

  • 如果 java 进程退出(未挂起),我们可以使用 tasklist 检测它:

    :run
    start java BatchWakeMeUpSomehow
    :check
    timeout 1 >nul
    tasklist /fi "imagename eq java.exe" | find "java.exe" >nul
    if errorlevel 1 echo retrying... & goto run
    goto check
  • 如果 java 进程挂起并且 CPU 使用率为 0% 持续 1 分钟:

    if not "%~1"=="childprocess" goto main
    :loop
    java BatchWakeMeUpSomehow
    goto loop

    :main
    start "" "%~dpnx0" childprocess
    :check
    for /f "skip=2 delims=, tokens=2" %%a in ('
    typeperf "\process(java)\%% processor time" -sc 1 -si 60
    ') do if %%a=="0.000000" taskkill /f /im java.exe
    goto check

关于java - 为什么我重新启动的 Java 程序会失去键盘焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com