2014-01-31 3 views
0

Я имею дело здесь с NativeProcess и специально с командами в mac os.So, у меня есть .sh-файл в том же каталоге, что и мое приложение. Этот сценарий оболочки я пытаюсь выполнить .jarfile (тот же каталог). Почему-то я ошибаюсь, поэтому это не сработало.Execute Shell Script из Flex для mac os

мой код следующий

<?xml version="1.0" encoding="utf-8"?> 
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx" 
          creationComplete="init()"> 
     <fx:Declarations> 
      <!-- Place non-visual elements (e.g., services, value objects) here --> 
     </fx:Declarations> 
     <fx:Script> 
      <![CDATA[ 
       import mx.controls.Alert; 
       var process:NativeProcess; 
       private function init():void 
       { 
        if (NativeProcess.isSupported) 
        { 
         Alert.show("suport native process."); 
          setupAndLaunch(); 
        } 
       } 
       private function setupAndLaunch():void 
       { 
       var cmdFile:File = File.applicationDirectory.resolvePath("InvokeJar.sh"); 
       Alert.show(cmdFile.nativePath,".Sh File Path"); 
       var processArgs:Vector.<String> = new Vector.<String>; 
       processArgs.push('chmod -x "'+cmdFile.nativePath+'"'); 

        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
       nativeProcessStartupInfo.arguments = processArgs; 
       nativeProcessStartupInfo.executable = cmdFile; 
       nativeProcessStartupInfo.workingDirectory = File.applicationDirectory; 

        process = new NativeProcess(); 
        process.start(nativeProcessStartupInfo); 
        process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
        process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
        process.addEventListener(NativeProcessExitEvent.EXIT, onExit); 
        process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
        process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 
       } 

       public function onOutputData(event:ProgressEvent):void 
       { 
        trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
       } 

       public function onErrorData(event:ProgressEvent):void 
       { 
        trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
       } 

       public function onExit(event:NativeProcessExitEvent):void 
       { 
        trace("Process exited with ", event.exitCode); 
       } 

       public function onIOError(event:IOErrorEvent):void 
       { 
        trace(event.toString()); 
       } 
      ]]> 
     </fx:Script> 
    </s:WindowedApplication> 

Следующая является сценариев оболочки часть

java -jar Test.jar 

когда я тестирование этого приложения на системе Mac, приложение дисплей окно предупреждения (привет .sh Путь к файлу), но больше ничего не происходит дальше.

Нельзя много ходить при работе с NativeProcesses.если вы видите что-нибудь странное или неправильное, сообщите мне.

Спасибо

ответ

0

Вот код, который отлично работает

<?xml version="1.0" encoding="utf-8"?> 
     <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           creationComplete="init()"> 
      <fx:Declarations> 
       <!-- Place non-visual elements (e.g., services, value objects) here --> 
      </fx:Declarations> 
      <fx:Script> 
       <![CDATA[ 
        import mx.controls.Alert; 
        var process:NativeProcess; 
        private function init():void 
        { 
         if (NativeProcess.isSupported) 
         { 
          Alert.show("suport native process."); 
           setupAndLaunch(); 
         } 
        } 
        private function setupAndLaunch():void 
        { 
        var shFilePath:String= File.applicationDirectory.resolvePath('invokeJAR.sh').nativePath; 
         Alert.show(shFilePath,".Sh File Path"); 
         var cmdFile:File=new File('/bin/bash'); 
         var processArgs:Vector.<String>= new Vector.<String>; 
         processArgs.push('-c');   
         processArgs.push('bash invokeJAR.sh'); 
         var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
        nativeProcessStartupInfo.arguments = processArgs; 
        nativeProcessStartupInfo.executable = cmdFile; 
        nativeProcessStartupInfo.workingDirectory = File.applicationDirectory; 

         process = new NativeProcess(); 
         process.start(nativeProcessStartupInfo); 
         process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
         process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
         process.addEventListener(NativeProcessExitEvent.EXIT, onExit); 
         process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
         process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 
       try 
       { 
        process.start(nativeProcessStartupInfo); 
       } 
       catch(e:Error) 
       { 
        Alert.show(e.message,"startup Error"); 
       } 
        } 

        public function onOutputData(event:ProgressEvent):void 
        { 
         trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
        } 

        public function onErrorData(event:ProgressEvent):void 
        { 
         trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
        } 

        public function onExit(event:NativeProcessExitEvent):void 
        { 
         trace("Process exited with ", event.exitCode); 
        } 

        public function onIOError(event:IOErrorEvent):void 
        { 
         trace(event.toString()); 
        } 
       ]]> 
      </fx:Script> 
     </s:WindowedApplication> 
Смежные вопросы