2 Replies Latest reply on Jul 22, 2010 1:43 AM by ArK_1

    Invoking Java Process


      I am successfully running the Application show in the following link
      http://tv.adobe.com/watch/adc-presents/invoking-java-process-from-adobe-air-2-applications /
      i.e Invoking Java Process from Air Application .

      the application runs on Flash Builder 4

      but when i create Native Installer and run the app after installation it is unable to invoke java process.

        • 1. Re: Invoking Java Process
          Aaronius9er9er Level 1

          What error do you encounter?  This might help shed some light on the issue, depending on what the issue is:



          • 2. Re: Invoking Java Process
            ArK_1 Level 1

            Hi there,


            I've recently run into exactly the same problem, although I wish I had seen that video!


            If the Java process is starting when run from within Flash Builder, but failing after exporting release build:


            You need to use ADT to compile the .air file into a native executable for NativeProcess to work.


            You can find more information on doing this at: http://help.adobe.com/en_US/air/build/WS789ea67d3e73a8b22388411123785d839c-8000.html


            The simplest method of compiling to a native executable (which compiles without using a developer license is


            adt -package -target native <URL_of_Destination_executable_file> <URL_of_AIR_file>


            e.g. adt -package -target native C:\myapp.exe C:\myapp.air


            If the Java process is not starting when run from within Flash Builder:


            1. Ensure you have included the extendedDesktop profile in the supportedProfiles section of your main-app.xml


            eg: <supportedProfiles>extendedDesktop desktop</supportedProfiles>


            2. Ensure you are starting the NativeProcess correctly:





            private var process:NativeProcess = new NativeProcess();
            private var args:Vector.<String> = new Vector.<String>();
            private var processStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
            private var javaPath:File = new File("C:\PathToJava.exe");
            private var jarFilePath:File = new File("C:\PathToJarFile.jar");
            // Use working directory if there are sub-folders the java process needs to access (for example a config folder)
            private var workingDirectory:File = new File("C:\WorkingDirectory");
            private function startJava():void {
                // This needs some checking to make sure the files actually exist (file.exists)
                processStartupInfo.executable = javaPath;
                processStartupInfo.workingDirectory = workingDirectory;
                processStartupInfo.arguments.push("-jar", jarFilePath.nativePath);
                // Add event listeners
                process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
                process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
                process.addEventListener(Event.STANDARD_ERROR_CLOSE, standardErrorClose);
                process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
                process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
                process.addEventListener(Event.STANDARD_INPUT_CLOSE, standardInputClose);
                process.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR, onIOError); 
                process.addEventListener(Event.STANDARD_OUTPUT_CLOSE, standardOutputClose);
                process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
            /*------------- Java Process Event Listeners -----------------*/
            private function standardOutputClose(evt:Event):void {
                trace("Java: [CLOSED] due to output.");
            private function standardInputClose(event:Event):void {
                trace("Java: [CLOSED] due to input.");
            private function standardErrorClose(event:Event):void {
                trace("Java: [CLOSED] due to Error.");
            private function onOutputData(event:ProgressEvent):void {
                var outputText:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
                trace("Java: " + outputText); 
            private function onErrorData(event:ProgressEvent):void {
                trace("Java: [ERROR] " + process.standardError.readUTFBytes(process.standardError.bytesAvailable));           
            private function onExit(event:NativeProcessExitEvent):void {
                trace("Java: [EXIT] with code", event.exitCode);
                DADEventManager.Dispatcher.dispatchEvent(new JavaEvent(JavaEvent.MERAPI_SHUTDOWN));
            private function onIOError(event:IOErrorEvent):void {
                trace("Java: [IOERROR] " + event.toString());
            /*------------------ End of event listeners ------------------*/