繁体   English   中英

从出现在 Windows 文件资源管理器后面的 BAT 启动 javaw JFrame

[英]Start javaw JFrame from BAT appearing behind File Explorer in Windows

我有一个长期以来没有问题的批处理文件,并在 Windows 中使用 javaw.exe 启动了 JAR,然后出现在其他正在运行的 Windows 应用程序的前面。 最近批处理文件已更改,我现在一直遇到由 javaw.exe 打开的 JFrame 出现在用于打开 BAT 文件的文件资源管理器后面。

具体来说,它出现在任务栏上,闪烁,但在屏幕上不可见,因为它隐藏在生成它的文件资源管理器后面。 它没有被最小化。

以前,批次是这样的(有些简化):

rem BOM safeguard
@echo off
set APPDIR=%~dp0
fc "%APPDIR%a.txt" "%APPDIR%b.txt" > fc1.txt
start "" "%APPDIR%..\jre\bin\javaw" -jar "%APPDIR%Testorama.jar"

现在它是这样的:

rem BOM safeguard
@echo off
set APPDIR=%~dp0
fc "%APPDIR%a.txt" "%APPDIR%b.txt" > fc1.txt
fc "%APPDIR%a.txt" "%APPDIR%b.txt" > fc2.txt
xcopy /y "%APPDIR%Testorama.jar" "%APPDIR%Temp"
start "" "%APPDIR%..\jre\bin\javaw" -jar "%APPDIR%Testorama.jar"

为了排除 JAR 的问题,我已经更换了它,但它仍然存在。 目前 JAR 是一个简单的主要:

package testorama;

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

    public static void main(String[] args) {
        JFrame f = new TestFrame();
        JPanel p = new JPanel();
        p.setPreferredSize(new Dimension(600, 600));

        f.add(p);
        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

使用上面的新 bat,我可以注释掉任何fc -s 或xcopy并且它将开始在前面,但是如果所有三个都在那里,就会出现问题。 在这一点上,我不知道为什么会出现这种不一致。 如果我在start后添加一个pause ,它会出现在前面,但我不希望提示保持打开状态。

为什么会出现这种情况? 在维护所有命令的同时,我能做些什么来缓解这个问题(因为它们在运行我们的应用程序中有明确的任务)?

我的环境是最新的 Windows 10,javaw 是 JRE8。 该问题出现在具有类似设置的其他机器上,而我尚未测试其他操作系统或 JRE。

根据@Mofi 的输入,我最终通过在运行javaw后执行最小timeout命令来“解决”这个问题。

我的新 BAT 外观现在是:

rem BOM safeguard
@echo off
set APPDIR=%~dp0
fc "%APPDIR%a.txt" "%APPDIR%b.txt" > fc1.txt
fc "%APPDIR%a.txt" "%APPDIR%b.txt" > fc2.txt
xcopy /y "%APPDIR%Testorama.jar" "%APPDIR%Temp"
start "" "%APPDIR%..\jre\bin\javaw" -jar "%APPDIR%Testorama.jar"
timeout /T 0

我只能猜测这与父提示的存在有关,当时javaw想要显示 JFrame 或其他一些模糊的时序问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM