簡體   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