我有一个批处理文件,很长一段时间都没有问题,在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。
1条答案
按热度按时间j2datikz1#
基于@mofi的输入,我最终通过做一个最小的
timeout
运行后的命令javaw
.我的新 bat 外观现在是:
我只能猜测这与父提示符的存在有关,当时
javaw
想要显示jframe,或者其他一些模糊的计时问题。