2011-12-21 8 views
1

MacでWindowsでCDから使用する必要のある小さなアプリケーションをJavaで作成しています。JavaからMacに外部インストーラアプリを起動します。

このアプリの基本的な考え方は、ちょうどあなたがいくつかのオプションを選択することができます(MacとWindowsで異なる)のメインメニューを持つことである(、CDのコンテンツを視聴するヘルプマニュアルを表示、アプリをインストール...など)会社のロゴ入り...など。

インストールするアプリは、WindowsとMacでは異なるでしょう。

私は何をしたいの外部インストーラを起動して、一度インストールされて、私は、アプリを起動します。

私が持っている主な問題は、私は別のプロセスでインストーラを立ち上げたら、WAITFOR()は、有効なexitvalueを返し、続けていることです。

私はそれを実行しようとする前にこのアプリが完全にインストールされるまで待ちたいです。

File instFolder = new File(System.getProperty("user.dir") + "ExternalAppforMac.pkg") 
Process p = Runtime.getRuntime().exec(new String[] { "open", instFolder.toString() }); 
int exitVal = p.waitFor(); 
if (exitVal==0) 

...

マック

のWindows

Runtime.getRuntime().exec(" \"c:/.../ExternalAppforWin.exe\""); 

ため

あなたは私を助けてもらえますか?

ありがとうございました。

答えて

0

あなたのシステム上のインストールウィンドウではなく、実行ファイルが存在するかどうかをチェックする必要があると思われます。私が知る限り、Javaではこれを行うシステムに依存しない方法はありませんが、sunのJNA(WindowsとMacの両方でサポートされており、hereがサポートされています)のような強力なライブラリを使用すれば、適切な方法OS API呼び出し。ここ

を使用すると、MACコールが似べきである、Windows上でやりたいことが何の例です。

import com.sun.jna.platform.win32.User32; 
    import com.sun.jna.platform.win32.WinDef; 

     . 
     . 
     . 

    //execute process 
    Process p = Runtime.getRuntime().exec(" \"c:/.../ExternalAppforWin.exe\""); 

    //wait for return value 
    int res = p.waitFor(); 

    //if we have a valid return code begin waiting for window to be closed 
    if(res == 0) 
    { 
     //define a window handle variable 
     WinDef.HWND windowHandle = null; 
     do 
     { 
      //sleep a little while before polling the value 
      try{Thread.sleep(100);}catch(InterruptedException e){} 

      //try to fetch the window by title 
      windowHandle = User32.INSTANCE.FindWindow(null, "<Window Title>"); 

      //if the handle is not null, the window is still open so sleep and then try try again 
     }while(windowHandle != null && windowHandle.getPointer() != Pointer.NULL); 

     //continue on with your code 
    } 
+0

あなたは、ウィンドウの状態がしばしば –

+0

こんにちはアーロン・ポーリングされていると感じた場合、あなたが睡眠時間を増やすことができます。私たちの助けをありがとう。私はcom.sun.jna.platformをMac用に研究してきましたが、hasTrash()とmoveToTrash(File [] files)という2つのメソッドを持つcom.sun.jna.platform.Mac.MacFileUtilsしか見つかりませんでした。彼らが私を助けるだろうと思っています。他のアイデア? – user897013

+0

私は、それがデフォルトでこれらの関数へのバインドを組み込んでいない理由は、ユーザーインターフェイスとのインターフェイスのためのすべてのダイナミックリンクライブラリを非推奨にしているようですが、私は行ったjnaの拡張を見つける目的のcライブラリー、より具体的にはココアのフレームワークに結合する。拡張機能はrococoaと呼ばれ、http://code.google.com/p/cocoa/で見つけることができます。私はMacで開発したことがないので、私はココアの機能を知っていませんが、必要なバインディングを持っているはずです –

関連する問題