Java启动过程仅在后台进行

时间:2011-05-25 15:27:19

标签: java swing process focus fullscreen

现在我有一个全屏独占模式的框架,它可以控制整个屏幕。该面板有一个按钮,用于启动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”而不触及我的主窗口并使其完全无缝?

2 个答案:

答案 0 :(得分:1)

在Linux中测试它,也许它不会在那里闪烁。如果没有多少人会在Windows中使用它,闪烁不应该是一个大问题。

我认为没有特定于Java的方法来处理这个问题,而是启动了一个外部流程。它的启动方式取决于操作系统。

答案 1 :(得分:1)

原则上这是一个窗口管理器特定的东西,至少在X系统上(比如Linux和大多数其他带GUI的Unix)。

一些窗口管理器总是在后台启动新程序,始终在前台,甚至要求用户使用鼠标绘制窗口区域。其他人则尊重正在启动的计划的愿望。

因此,您可以查看正在启动的程序的命令行选项,也许它们有一个选项,如“start minimize”或类似的选项。

如果您使用的是KDE(以及KDE窗口管理器),您可以使用kstart --onbottom ...kstart --minimize ...来启动程序,这会将窗口放在堆栈的底部,或启动它最小化。 (看看kstart选项,您还需要使用--window--windowclass来指示窗口。)