从出现在windows文件资源管理器后面的bat启动javawjframe

rur96b6h  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(307)

我有一个批处理文件,很长一段时间都没有问题,在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是一个简单的main:

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);
    }
}

有了上面的新球棒,我可以评论出任何 fc -s或 xcopy 它将开始在前面,但如果三个都在那里,问题就出现了。在这一点上,我不知道为什么会出现这种不一致。如果我加一个 pause 之后 start 它出现在前面,但我不想让提示符保持打开状态。
为什么会这样?在维护所有命令(因为它们在运行我们的应用程序时有明确的任务)的同时,我能做些什么来缓解这个问题?
我的环境是最新的windows10,javaw是jre8。这个问题发生在具有类似设置的其他机器上,而我还没有测试过其他操作系统或JRE。

j2datikz

j2datikz1#

基于@mofi的输入,我最终通过做一个最小的 timeout 运行后的命令 javaw .
我的新 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,或者其他一些模糊的计时问题。

相关问题