2013-12-10 78 views
0

據我所知,,我可以在命令外殼中做任何事情,我可以從JNI,JNA或Runtime.getRuntime().exec(String)。那麼在哪個時候使用?JNI/JNA vs Runtime.getRuntime()。exec(String)?

JNI/JNA是否允許我與運行本機應用程序的進行通信(進程間通信等),否則這些應用程序無法從命令shell執行?還是隻是Runtime.getRuntime().exec(String)是平臺無關的,而JNI/JNA要求你知道你的平臺才能使用它們?提前致謝!

+0

請勿像'..about 2005那樣使用'.exec'。更廣義地說:閱讀(並實現)*所有*的建議[當Runtime.exec()不會](http:// www。 javaworld.com/jw-12-2000/jw-1229-traps.html)。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 –

回答

1

簡而言之,

  • JNI和JNA許可證使用本地中相同的處理。
  • Runtime.exec(和它的新朋友ProcessBuilder)推出新的外部應用程序。

因爲每個都需要與主機操作系統和現有的本地二進制文件(無論是庫還是可運行程序)進行合作,它們都不是獨立於平臺的。

這三個許可中沒有一個與運行外部應用程序通信。爲此,您需要一個inter-process communication機制,例如,可以在共享內存,文件,管道或套接字上實現該機制。

相關問題