2012-01-07 94 views
3

我已经使用Adobe本机进程从我的air应用程序运行java程序。这里的代码和它工作正常。但我应该写绝对路径到java运行库:从Adobe AIR的本机进程运行Java程序

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java。

如果用户在diff文件夹中安装了Java运行时,或者有diff版本,那么这段代码将不起作用。我如何检测java的安装位置或者是否有另一种正确的方式来从空中应用程序运行java应用程序?如果我从终端命令行运行java库,那么我可以只写“java -jar pdfbox-app-1.6.0.jar”等,它运行良好。

private function convertPdf2Txt():void{ 
     var arg:Vector.<String> = new Vector.<String>; 
     arg.push("-jar"); 
     arg.push(File.applicationDirectory.resolvePath("pdfbox-app-1.6.0.jar").nativePath); 
     arg.push("ExtractText"); 
     arg.push("-force"); 
     arg.push(File.applicationStorageDirectory.resolvePath("Data/1.pdf").nativePath); 
     arg.push(File.applicationStorageDirectory.resolvePath("Data/1.txt").nativePath); 

     var fjava:File = new File("/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java"); 
     if (fjava.exists==false){ 
      Alert.show("Can't find Java Runtime in default folder.","Idea Rover",mx.controls.Alert.OK, null,null,imgInfo); 
      return; 
     } 

     var npInfo:NativeProcessStartupInfo; 
     npInfo = new NativeProcessStartupInfo(); 
     npInfo.executable = fjava; 
     npInfo.arguments = arg; 

     var nativeProcess:NativeProcess; 
     nativeProcess = new NativeProcess(); 
     nativeProcess.addEventListener(NativeProcessExitEvent.EXIT,onNativeProcessExit); 
     nativeProcess.start(npInfo); 

    } 
+0

你有没有找到这个解决方案? – ericsoco 2012-02-21 04:57:23

回答

0

绝对路径是:

  • 的Mac OS:在/ usr/bin中/ JAVA
  • 赢OS:(默认)

    • 64位:C:\ Program Files文件\的Java
    • 32位:C:\ Program Files文件(x86)\ Java
0

而不是弹出警报,您可以使用File.browseForOpen()打开文件选择对话框。那么,你想要的文件被包含在Event.SELECT处理程序传递的事件中。这个流程似乎是我使用过的需要访问其他应用程序的应用程序的标准,但不知道在哪里可以找到他们的可执行文件。

var npInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
// setup npInfo, nativeProcess... 

var fjava:File = new File("/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java"); 
if (!fjava.exists) { 
    fjava.addEventListener(Event.SELECT, onFileSelected); 
    fjava.browseForOpen("Where is Java located?"); 
} 

private function onFileSelected (evt:Event) :void { 
    npInfo.executable = evt.target; 
    nativeProcess.start(npInfo); 
    fjava.removeEventListener(Event.SELECT, onFileSelected); 
} 

当然,您可以使用相同的逻辑来查找java需要启动的文件。

0

您可以通过查看JAVA_HOME环境变量来确定Java二进制文件的位置。我想和你一样做同样的事情,所以在我做更多的研究之后我会发布更多信息。

+0

你试过了吗? – 2012-12-19 10:09:12

+0

不,我结束了切换到不同的技术 – 2012-12-22 20:46:02

相关问题