0

gmshというコマンド ライン バイナリ用のシンプルな GUI Cocoa-Applescript アプリケーションを作成したいと考えています。GUI経由で指定したいいくつかの引数で起動できます。起動すると、X11 ウィンドウが開きます。

複雑な GUI を作成する前に、1 つのテキスト フィールドと 1 つのボタンを備えた単純なインターフェイスを作成しました。テキストフィールド情報をバイナリに渡される 1 つの引数にし、バイナリのボタンをクリックすると引数で起動するようにします。

これを表示アラートで機能させることができます。たとえば、アラートは、ボタンが押されたときにテキストフィールド入力を表示します。ただし、表示アラートを do シェル スクリプトに置き換えようとすると、アプリケーションがフリーズし、何も起こりません。

gmsh バイナリを追加する適切な場所がわからないので、サポート ファイルに入れました。

これは私の動作していない AppDelegate.applscript です。

script AppDelegate
property parent : class "NSObject"

property argOne : ""

on buttonClicked_(sender)
    -- display alert "Argument one is " & argOne
    do shell script "gmsh " & argOne
end buttonClicked_

on applicationWillFinishLaunching_(aNotification)
    -- Insert code here to initialize your application before any files are opened 
end applicationWillFinishLaunching_

on applicationShouldTerminate_(sender)
    -- Insert code here to do any housekeeping before your application quits 
    return current application's NSTerminateNow
end applicationShouldTerminate_

end script

Cocoa-Applescript は単なる GUI ランチャーであるため、X11 アプリが起動したらアプリを開いたままにしておく必要はありません。

4

1 に答える 1

0

do シェル スクリプトを実行すると、シェル スクリプトが実行されている限り、GUI がフリーズします。プログラムがフリーズし続ける場合は、do シェル スクリプトがハングしていることを意味します。最初に目にするのは、シェル スクリプトを実行するために送信するコマンドと引数の間にスペースがないことです。それはおそらくあなたの最初の問題です、それは次のようなものでなければなりません

  do shell script "gmsh " & argOne

GUI の応答性を維持したい場合、AppleScriptObjC には 3 つのオプションがあります。

  1. バックグラウンドでシェル コマンドを実行する
  2. performSelectorInBackground_withObject_("NameOfHandler:", 引数) を使用する
  3. NSTask を作成する
于 2013-02-18T23:18:05.240 に答える