0

次のコードを使用して、Mac OS X 10.7.5 の Java で .app アプリケーションを開始したいと考えています。

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

ファイル名には、物理​​パスとファイル名が含まれます。

MACファイルマネージャーのFinderでファイル名をダブルクリックして開始すると、すべて正常に動作します。

上記のコード行を実行すると、よく知られたエラー メッセージ「TeamViewerQS が予期せず終了しました。アプリケーションを再度開くには、[再度開く] をクリックしてください...」が表示されます。

「再開」ボタンをクリックすると、アプリは問題なく起動します。

では、この厄介なエラー メッセージを回避するにはどうすればよいでしょうか。

この問題についてさらに情報が必要な場合は、お知らせください。ありがとうございました。


2013-10-04: わかりました、このタスクをもう一度実行する時間がありました。要求された作業コードがここにあります (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);
}

=> 同じエラー メッセージが表示される

4

0 に答える 0