如何解决Java启动过程仅在后台进行
| 现在,我有一个全屏独占模式的框架,可以控制整个屏幕。面板上有一个按钮,可启动Windows本机计算器程序(仅用于测试目的)。是否有可能使该过程完全在后台启动?现在我有这个: this.parent.setAlwaysOnTop(true);
try {
Process p = Runtime.getRuntime().exec(\"calc\");
} catch (IOException e1) {
ErrorDialog error = new ErrorDialog(\"Error handling your shell action\");
e1.printStackTrace();
System.exit(0);
}
this.parent.setAlwaysOnTop(false);
这确实可以满足我的需求,但并不能使其美观。它首先“最小化”我的窗口,然后启动calc,然后重新最大化我的窗口。一切都很快发生,但是到处都是东西。是否可以在不触摸主窗口并使它完全无缝的情况下使“ calc”在后台运行?
解决方法
原则上,至少在X系统上(例如Linux和大多数其他具有GUI的Unix),这是窗口管理器特定的东西。
一些窗口管理器总是在后台,总是在前台启动新程序,甚至要求用户用鼠标绘制窗口区域。其他人尊重计划启动的愿望。
因此,您可以查看正在启动的程序的命令行选项,也许它们具有诸如“最小化启动”之类的选项。
如果您使用的是KDE(和KDE窗口管理器),则可以使用
kstart --onbottom ...
或ѭ2start启动程序,这会将窗口置于堆栈的底部,或最小化启动窗口。 (查看kstart选项,您还想使用--window
或--windowclass
指示窗口。)
,在Linux上进行测试,也许它不会在那里闪烁。如果没有很多人会在Windows中使用它,则闪烁不是大问题。
我不认为有一种特定于Java的方式来处理此问题,因为您正在启动一个外部进程。如何启动取决于操作系统。