我在这里处理NativeProcess,特别是在mac os.So中的命令。我在我的应用程序的同一目录中有一个.sh文件。这个shell脚本我试图执行.jarfile(同样的目录) 。不知怎的,我正在做一些错误,这就是为什么它不起作用。
我的代码是下一个
<?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>
接下来是shell脚本部分
java -jar Test.jar
当我在mac系统上测试这个应用程序时,app显示警告框(问候.sh文件路径),但接下来没有其他事情发生。
使用NativeProcesses时没有太多可走的路。如果您发现任何错误或错误,请告诉我。
谢谢
答案 0 :(得分:0)
你有没有在这里试试,你有任何错误吗? http://forums.adobe.com/thread/721724
答案 1 :(得分: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>