Forums Développement Multimédia

Aller au contenu

NativeProcess supporté mais pourtant rien ne se passe ✔

nativeProcess mxmlc CODE Actionscript

1 réponse à ce sujet

#1 ZePiou

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 28 January 2012 - 18:29 PM

Bonjour à tous,

Je travaille sur Mac sous Flash CS 5.5
Je désire créer une application bureau AIR, qui permettrait de compiler un fichier .as. Je pensais me servir de la classe NativeProcess pour cela et appeller le compileur (mxmlc) de flex en envoyant des arguments au terminal. Or cela ne fonctionne pas.. :cry:

J'ai le fichier Test.as suivant dans mon repertoire d'utilisateur

package
{
import flash.display.MovieClip;
  [SWF(backgroundColor="#ffffff", frameRate="24", width="400", height="224")]
  public class HelloWorld extends MovieClip
  {  
        public function HelloWorld():void
        {
        }
  }
}
 
Et voici le code de mon appli AIR

package
{
import flash.display.MovieClip;
import flash.desktop.NativeProcess;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.NativeProcessExitEvent;

public class PersoMaker extends MovieClip
{

public var process:NativeProcess;

  public function PersoMaker()
  {
  var vector:Vector.<String> = new Vector.<String>();
  vector[0]='flex_sdk_4.6/bin/mxmlc -static-link-runtime-shared-libraries=true "HelloWorld.as"';
  var startUpInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
  startUpInfo.arguments = vector;  
  t_trace.appendText("NativeProcessSupported = "+NativeProcess.isSupported+"\n");
  t_trace.appendText("startUpArgs = "+startUpInfo.arguments+"\n");
                   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);
   process.start(startUpInfo);
  t_trace.appendText("Process Started\n");
                }
                public function onOutputData(evt:ProgressEvent):void
                {
                        t_trace.appendText("Got: "+process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)+"\n");
                }
         
                public function onErrorData(evt:ProgressEvent):void
                {
                        t_trace.appendText("ERROR -"+process.standardError.readUTFBytes(process.standardError.bytesAvailable)+"\n");
                }
         
                public function onExit(evt:NativeProcessExitEvent):void
                {
                        t_trace.appendText("Process exited with "+evt.exitCode);
                }
         
                public function onIOError(evt:IOErrorEvent):void
                {
                         t_trace.appendText(evt.toString());
                }
}
}
 

Le flex SDK est également placé dans mon repertoire d'utilisateur.

Je me sers d'un textfield t_trace sur la scène pour "tracer" les retours d'évènements et autres informations, NativeProcess m'est bien retourné true, et les arguments du startUpInfo représentent bien la commande necessaire à la compilation (je l'ai testée dans le terminal et POUF! un beau .swf!)

En revanche dès que je start le NativeProcess, plus rien... Meme la ligne suivante (un bête appendText) n'est pas lue, ce qui me fait dire que le programme plante.. :evil:

Quelqu'un(une) pourrait-il(elle) m'éclairer?

Ps:Je précise que j'ai bien exporté mon appli sous package (.dmg sous mac) et que le NativeProcess.isSupported retourne bien true;

#2 ZePiou

    Ceinture Blanche

  • Members
  • Pip
  • 10 messages

Posté 28 January 2012 - 19:35 PM

Bon j'ai finalement compris mon erreur, pour les mous du bulbe comme moi la voici:

Il faut d'abord attribuer un executable au startUPInfo (dans mon cas mxmlc) et ensuite entrer les arguments un à un dans le tableau d'arguments

  var vector:Vector.<String> = new Vector.<String>();
  vector[0]='-static-link-runtime-shared-libraries=true';
  vector[1]='HelloWorld.as';
  var startUpInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
  startUpInfo.arguments = vector;  
  var file:File=File.userDirectory;
  file=file.resolvePath("flex_sdk_4.6/bin/mxmlc");
  startUpInfo.executable = file;
 




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)