Jython(原JPython),是一個用Java語言寫的Python解釋器。
創新互聯成立以來不斷整合自身及行業資源、不斷突破觀念以使企業策略得到完善和成熟,建立了一套“以技術為基點,以客戶需求中心、市場為導向”的快速反應體系。對公司的主營項目,如中高端企業網站企劃 / 設計、行業 / 企業門戶設計推廣、行業門戶平臺運營、app軟件定制開發、成都手機網站制作、微信網站制作、軟件開發、電信內江機房等實行標準化操作,讓客戶可以直觀的預知到從創新互聯可以獲得的服務效果。
在沒有第三方模塊的情況下,通常選擇利用Jython來調用Python代碼,
它是一個開源的JAR包,你可以到官網下載
一個HelloPython程序
import?org.python.util.PythonInterpreter;
public?class?HelloPython?{
public?static?void?main(String[]?args)?{
PythonInterpreter?interpreter?=?new?PythonInterpreter();
interpreter.exec("print('hello')");
}
}
什么是PythonInterpreter?它的中文意思即是“Python解釋器”。我們知道Python程序都是通過解釋器來執行的,我們在Java中創建一個“解釋器”對象,模擬Python解釋器的行為,通過exec("Python語句")直接在JVM中執行Python代碼,上面代碼的輸出結果為:hello
在Jvm中執行Python腳本
interpreter.execfile("D:/labs/mytest/hello.py");
如上,將exec改為execfile就可以了。需要注意的是,這個.py文件不能含有第三方模塊,因為這個“Python腳本”最終還是在JVM環境下執行的,如果有第三方模塊將會報錯:java?ImportError:?No?module?named?xxx
僅在Java中調用Python編寫的函數
先完成一個hello.py代碼:
def?hello():
return?'Hello'
在Java代碼中調用這個函數:
import?org.python.core.PyFunction;
import?org.python.core.PyObject;
import?org.python.util.PythonInterpreter;
public?class?HelloPython?{
public?static?void?main(String[]?args)?{
PythonInterpreter?interpreter?=?new?PythonInterpreter();
interpreter.execfile("D:/labs/hello.py");
PyFunction?pyFunction?=?interpreter.get("hello",?PyFunction.class);?//?第一個參數為期望獲得的函數(變量)的名字,第二個參數為期望返回的對象類型
PyObject?pyObject?=?pyFunction.__call__();?//?調用函數
System.out.println(pyObject);
}
}
上面的代碼執行結果為:Hello
即便只是調用一個函數,也必須先加載這個.py文件,之后再通過Jython包中所定義的類獲取、調用這個函數。
如果函數需要參數,在Java中必須先將參數轉化為對應的“Python類型”,例如:
__call__(new?PyInteger(a),?new?PyInteger(b))
a,b的類型為Java中的int型,還有諸如:PyString(String?string)、PyList(IteratorPyObject?iter)?等。
詳細可以參考官方的api文檔。
包含第三方模塊的情況:一個手寫識別程序
這是我和舍友合作寫的一個小程序,完整代碼在這里:
,界面上引用了core?java上的一段代碼。Python代碼是舍友寫的,因為在Python程序中使用了第三方的NumPy模塊,導致無法通過Jython執行。下面這個方法純粹是個人思路,沒有深入查資料。?核心代碼如下:
import?java.io.*;
class?PyCaller?{
private?static?final?String?DATA_SWAP?=?"temp.txt";
private?static?final?String?PY_URL?=?System.getProperty("user.dir")?+?"\\test.py";
public?static?void?writeImagePath(String?path)?{
PrintWriter?pw?=?null;
try?{
pw?=?new?PrintWriter(new?FileWriter(new?File(DATA_SWAP)));
}?catch?(IOException?e)?{
e.printStackTrace();
}
pw.print(path);
pw.close();
}
public?static?String?readAnswer()?{
BufferedReader?br;
String?answer?=?null;
try?{
br?=?new?BufferedReader(new?FileReader(new?File(DATA_SWAP)));
answer?=?br.readLine();
}?catch?(FileNotFoundException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
return?answer;
}
public?static?void?execPy()?{
Process?proc?=?null;
try?{
proc?=?Runtime.getRuntime().exec("python?"?+?PY_URL);
proc.waitFor();
}?catch?(IOException?e)?{
e.printStackTrace();
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
//?測試碼
public?static?void?main(String[]?args)?throws?IOException,?InterruptedException?{
writeImagePath("D:\\labs\\mytest\\test.jpg");
execPy();
System.out.println(readAnswer());
}
}
實際上就是通過Java執行一個命令行指令。
您好,調用jar包的方法是指在Java語言中,通過使用Java Archive(JAR)文件來調用類庫中的方法,從而實現某些功能。JAR文件是一種將多個文件打包成一個文件的壓縮文件,它可以包含Java類、資源文件和元數據文件。
要調用JAR文件中的方法,可以使用Java的ClassLoader類,它可以加載JAR文件中的類,然后使用反射機制來調用JAR文件中的方法。
此外,還可以使用Java的URLClassLoader類來加載JAR文件中的類,然后使用反射機制來調用JAR文件中的方法。
最后,還可以使用Java的URLConnection類來加載JAR文件中的類,然后使用反射機制來調用JAR文件中的方法。
總之,調用JAR文件中的方法可以通過使用Java的ClassLoader類、URLClassLoader類和URLConnection類來實現,并且使用反射機制來調用JAR文件中的方法。
常用的五個
java.lang.*
提供利用 Java 編程語言進行程序設計的基礎類。最重要的類是 Object(它是類層次結構的根)和 Class(它的實例表示正在運行的應用程序中的類)。
java.util.*
包含集合框架、遺留的 collection 類、事件模型、日期和時間設施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組、日期Date類、堆棧Stack類、向量Vector類等)。集合類、時間處理模式、日期時間工具等各類常用工具包
java.io.*
Java的核心庫java.io提供了全面的IO接口。包括:文件讀寫、標準設備輸出等。Java中IO是以流為基礎進行輸入輸出的,所有數據被串行化寫入輸出流,或者從輸入流讀入。
java.net.*
并非所有系統都支持 IPv6 協議,而當 Java 網絡連接堆棧嘗試檢測它并在可用時透明地使用它時,還可以利用系統屬性禁用它。在 IPv6 不可用或被顯式禁用的情況下,Inet6Address 對大多數網絡連接操作都不再是有效參數。雖然可以保證在查找主機名時 java.net.InetAddress.getByName 之類的方法不返回 Inet6Address,但仍然可能通過傳遞字面值來創建此類對象。在此情況下,大多數方法在使用 Inet6Address 調用時都將拋出異常。
java.sql.*
提供使用 JavaTM 編程語言訪問并處理存儲在數據源(通常是一個關系數據庫)中的數據的 API。此 API 包括一個框架,憑借此框架可以動態地安裝不同驅動程序來訪問不同數據源。
Python - Native 代碼 整體思路 先將Python 源代碼轉換成 C 代碼,之后用 GCC 編譯 C 代碼為二進制模塊 so/dll,接著進行一次 Java Native 接口封裝,
網站欄目:java代碼調用什么包 java調用怎么寫
URL鏈接:http://vcdvsql.cn/article44/doiephe.html
成都網站建設公司_創新互聯,為您提供虛擬主機、營銷型網站建設、關鍵詞優化、品牌網站建設、移動網站建設、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯