通过Runtime.getRuntime()在java中启动java .app.exec与'Program quit unexpectedly'崩溃

时间:2013-09-05 11:20:59

标签: java macos crash runtime.exec .app

我想在Mac OS X 10.7.5上使用以下代码在java中启动.app应用程序:

Runtime.getRuntime().exec(new String[] { "/usr/bin/open",  filename });

文件名包含物理路径和文件名。

如果我在MAC文件管理器Finder上双击它,启动文件名,一切正常。

如果我执行上面显示的代码行,我会得到众所周知的错误消息“TeamViewerQS意外退出点击重新打开再次打开应用程序......”

如果我点击“重新打开”按钮,应用程序将启动没有任何问题。

那么我怎样才能避免这种令人不安的错误信息?

如果您需要有关此问题的任何进一步信息,请告诉我们。 谢谢。


2013年10月4日: 好的,现在我有时间再次执行此任务,这里出现了问题的工作代码(StreamGobbler与“当Runtime.exec()不会”时所描述的相同):

/**
* Start the teamviewer application on a mac. 
* 
* @param filename Full physical path and filename to be started
* @throws IOException
*/

protected void startTeamViewerOnMac(String filename) throws Throwable{
    String[] cmd = new String[] { "/usr/bin/open",  filename };
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);

    // Creation of the stout and errout handler
    StreamGobbler errorGobbler = new 
            StreamGobbler(proc.getErrorStream(), "TeamViewer start Error");
    StreamGobbler outputGobbler = new 
            StreamGobbler(proc.getInputStream(), "TeamViewer start STDOUT");
    // Start them
    errorGobbler.start();
    outputGobbler.start();

    int exitVal = proc.waitFor();
    JLog.submit(this, "ExitValue:" + exitVal, Level.WARN);
} // end of startTeamViewerOnMac

记录器的输出:

  04.10.2013 14:38:02 WARN  [main.frame.PdfHelpPanelSetlog->startTeamViewerOnMac] ExitValue:0

因此,在错误屏幕之前或之后没有生成STDOUT或ERROUT。


我也尝试使用二进制文件的完整路径。 =>不行。


我也试过这个:

protected void startTeamViewerOnMac(String filename) throws Throwable {

    ProcessBuilder pb = new ProcessBuilder("/usr/bin/open", filename);
    Process proc = pb.start();

    // Creation of the stout and errout handler
    StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "TeamViewer start Error");
    StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "TeamViewer start STDOUT");
    // Start them
    errorGobbler.start();
    outputGobbler.start();

    int exitVal = proc.waitFor();
    JLog.submit(this, "ExitValue:" + exitVal, Level.DEBUG);
}

=>出现相同的错误消息

0 个答案:

没有答案