2016-06-17 69 views
3

我知道一個Java app can be bundled as a Mac app,它帶有由Java Swing或JavaFX驅動的用戶界面,以及捆綁的Java運行時(JRE)。但我想在Xcode中編寫一個本地應用程序,用Cocoa用戶界面編寫,它調用Java庫來處理一些數據。在Xcode應用程序中調用Swift中的Java

我需要調用捆綁的JRE,調用所需的庫(JAR文件),將引用傳遞給Mac存儲中的文件(否則將文件的內容作爲內存中的大字符串),並獲取字符串(XML或CSV或製表符分隔的數據)。

這個問題是類似於this Question但更新的斯威夫特和現代的MacOS和Java 8

回答

3

除非你希望所有參與過類似JNI直接在內存中進行通信的痛苦,唯一的辦法就是發動外部過程使用NSTaskfor example)讀取/寫入文件或讀取標準。

如果所有Java組件都在您的.app中,您可以直接引用捆綁的JRE和程序JAR。

/Applications/MyApp.app/.../java -jar /Applications/MyApp.app/.../MyAppJar.jar 

不知道你打算如何捆綁JRE,因爲這不會是一個Swing應用程序。也許你會用appbundler來製作一個假的Swing .app,然後把文件結構複製到你的本地應用程序。

如果是這樣,請記住,您可能需要手動複製bin/java,因爲appbundler不會自動包含在內。

+0

爲什麼選擇倒票?非常有用答案,謝謝。 –

+0

我應該在應用程序包中嵌入java嗎? – Johnykutty

+0

**更新:** [Java 9現在模塊化](https://en.wikipedia.org/wiki/Java_Platform_Module_System)。請參閱[jlink](http://docs.oracle.com/javase/9​​/tools/jlink.htm)工具和[spec](http://openjdk.java.net/jeps/282),[鏈接器](https://en.wikipedia.org/wiki/Linker_%28computing%29)for Java。這意味着更小的運行時間大小將與您的應用程序捆綁在一起。其他鏈接時間優化也可以實現,以提高性能。 –

相關問題