现在我有一个全屏独占模式的框架,它可以控制整个屏幕。该面板有一个按钮,用于启动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”而不触及我的主窗口并使其完全无缝?
答案 0 :(得分:1)
在Linux中测试它,也许它不会在那里闪烁。如果没有多少人会在Windows中使用它,闪烁不应该是一个大问题。
我认为没有特定于Java的方法来处理这个问题,而是启动了一个外部流程。它的启动方式取决于操作系统。
答案 1 :(得分:1)
原则上这是一个窗口管理器特定的东西,至少在X系统上(比如Linux和大多数其他带GUI的Unix)。
一些窗口管理器总是在后台启动新程序,始终在前台,甚至要求用户使用鼠标绘制窗口区域。其他人则尊重正在启动的计划的愿望。
因此,您可以查看正在启动的程序的命令行选项,也许它们有一个选项,如“start minimize”或类似的选项。
如果您使用的是KDE(以及KDE窗口管理器),您可以使用kstart --onbottom ...
或kstart --minimize ...
来启动程序,这会将窗口放在堆栈的底部,或启动它最小化。 (看看kstart选项,您还需要使用--window
或--windowclass
来指示窗口。)