[英]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.