欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java調(diào)用代碼 java調(diào)用js代碼 實(shí)例

如何在Java中調(diào)用Python代碼

Jython(原JPython),是一個(gè)用Java語(yǔ)言寫(xiě)的Python解釋器。 在沒(méi)有第三方模塊的情況下,通常選擇利用Jython來(lái)調(diào)用Python代碼, 它是一個(gè)開(kāi)源的JAR包,你可以到官網(wǎng)下載 一個(gè)HelloPython程序 importorg.python.util.PythonInterpreter; publicclassHelloPython{ publicstaticvoidmain(String[]args){ PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.exec("print('hello')"); } } 什么是PythonInterpreter?它的中文意思即是“Python解釋器”。我們知道Python程序都是通過(guò)解釋器來(lái)執(zhí)行的,我們?cè)贘ava中創(chuàng)建一個(gè)“解釋器”對(duì)象,模擬Python解釋器的行為,通過(guò)exec("Python語(yǔ)句")直接在JVM中執(zhí)行Python代碼,上面代碼的輸出結(jié)果為:hello在Jvm中執(zhí)行Python腳本 interpreter.execfile("D:/labs/mytest/hello.py");如上,將exec改為execfile就可以了。需要注意的是,這個(gè).py文件不能含有第三方模塊,因?yàn)檫@個(gè)“Python腳本”最終還是在JVM環(huán)境下執(zhí)行的,如果有第三方模塊將會(huì)報(bào)錯(cuò):javaImportError:Nomodulenamedxxx 僅在Java中調(diào)用Python編寫(xiě)的函數(shù) 先完成一個(gè)hello.py代碼: defhello(): return'Hello'在Java代碼中調(diào)用這個(gè)函數(shù): importorg.python.core.PyFunction; importorg.python.core.PyObject; importorg.python.util.PythonInterpreter; publicclassHelloPython{ publicstaticvoidmain(String[]args){ PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.execfile("D:/labs/hello.py"); PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一個(gè)參數(shù)為期望獲得的函數(shù)(變量)的名字,第二個(gè)參數(shù)為期望返回的對(duì)象類(lèi)型 PyObjectpyObject=pyFunction.__call__();//調(diào)用函數(shù) System.out.println(pyObject); } } 上面的代碼執(zhí)行結(jié)果為:Hello 即便只是調(diào)用一個(gè)函數(shù),也必須先加載這個(gè).py文件,之后再通過(guò)Jython包中所定義的類(lèi)獲取、調(diào)用這個(gè)函數(shù)。 如果函數(shù)需要參數(shù),在Java中必須先將參數(shù)轉(zhuǎn)化為對(duì)應(yīng)的“Python類(lèi)型”,例如: __call__(newPyInteger(a),newPyInteger(b))a,b的類(lèi)型為Java中的int型,還有諸如:PyString(Stringstring)、PyList(Iteratoriter)等。 詳細(xì)可以參考官方的api文檔。 包含第三方模塊的情況:一個(gè)手寫(xiě)識(shí)別程序 這是我和舍友合作寫(xiě)的一個(gè)小程序,完整代碼在這里:,界面上引用了corejava上的一段代碼。Python代碼是舍友寫(xiě)的,因?yàn)樵赑ython程序中使用了第三方的NumPy模塊,導(dǎo)致無(wú)法通過(guò)Jython執(zhí)行。下面這個(gè)方法純粹是個(gè)人思路,沒(méi)有深入查資料。核心代碼如下: importjava.io.*; classPyCaller{ privatestaticfinalStringDATA_SWAP="temp.txt"; privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\\test.py"; publicstaticvoidwriteImagePath(Stringpath){ PrintWriterpw=null; try{ pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP))); }catch(IOExceptione){ e.printStackTrace(); } pw.print(path); pw.close(); } publicstaticStringreadAnswer(){ BufferedReaderbr; Stringanswer=null; try{ br=newBufferedReader(newFileReader(newFile(DATA_SWAP))); answer=br.readLine(); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } returnanswer; } publicstaticvoidexecPy(){ Processproc=null; try{ proc=Runtime.getRuntime().exec("python"+PY_URL); proc.waitFor(); }catch(IOExceptione){ e.printStackTrace(); }catch(InterruptedExceptione){ e.printStackTrace(); } } //測(cè)試碼 publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{ writeImagePath("D:\\labs\\mytest\\test.jpg"); execPy(); System.out.println(readAnswer()); } } 實(shí)際上就是通過(guò)Java執(zhí)行一個(gè)命令行指令。

我們注重客戶(hù)提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,成都創(chuàng)新互聯(lián)公司贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶(hù)。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),重慶小程序開(kāi)發(fā),網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。

Java如何調(diào)用C語(yǔ)言代碼 ?

Java Native Interface(JNI)是Java語(yǔ)言的本地編程接口,是J2SDK的一部分。在java程序中,我們可以通過(guò)JNI實(shí)現(xiàn)一些用java語(yǔ)言不便實(shí)現(xiàn)的功能。通常有以下幾種情況我們需要使用JNI來(lái)實(shí)現(xiàn)。 標(biāo)準(zhǔn)的java類(lèi)庫(kù)沒(méi)有提供你的應(yīng)用程序所需要的功能,通常這些功能是平臺(tái)相關(guān)的 你希望使用一些已經(jīng)有的類(lèi)庫(kù)或者應(yīng)用程序,而他們并非用java語(yǔ)言編寫(xiě)的 程序的某些部分對(duì)速度要求比較苛刻,你選擇用匯編或者c語(yǔ)言來(lái)實(shí)現(xiàn)并在java語(yǔ)言中調(diào)用他們 下面我們開(kāi)始編寫(xiě)HelloWorld程序,由于涉及到要編寫(xiě)c/c++代碼因此我們會(huì)在開(kāi)發(fā)中使用Microsoft VC++工具。編寫(xiě)java代碼,我們?cè)谟脖P(pán)上建立一個(gè)hello目錄作為我們的工作目錄,首先我們需要編寫(xiě)自己的java代碼,在java代碼中我們會(huì)聲明native方法,代碼非常簡(jiǎn)單。如下所示 class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } 注意我們的displayHelloWorld()方法的聲明,它有一個(gè)關(guān)鍵字native,表明這個(gè)方法使用java以外的語(yǔ)言實(shí)現(xiàn)。方法不包括實(shí)現(xiàn),因?yàn)槲覀円胏/c++語(yǔ)言實(shí)現(xiàn)它。注意System.loadLibrary("hello")這句代碼,它是在靜態(tài)初始化塊中定義的,系統(tǒng)用來(lái)裝載hello共享庫(kù),這就是我們?cè)诤竺嫔傻膆ello.dll(如果在其他的操作系統(tǒng)可能是其他的形式,比如hello.so) 編譯java代碼 javac HelloWorld.java 生成HelloWorld.class文件 創(chuàng)建.h文件 這一步中我們要使用javah命令生成.h文件,這個(gè)文件要在后面的c/c++代碼中用到,我們運(yùn)行 javah HelloWorld。這樣我們可以看到在相同目錄下生成了一個(gè)HelloWorld.h文件,文件內(nèi)容如下 在此我們不對(duì)他進(jìn)行太多的解釋。 /* DO NOT EDIT THIS FILE - it is machine generated */ #include jni.h /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 編寫(xiě)本地實(shí)現(xiàn)代碼 在這部分我們要用C/C++語(yǔ)言實(shí)現(xiàn)java中定義的方法,我們?cè)赩C++中新建一個(gè)Project,然后創(chuàng)建一個(gè)HelloWorldImp.cpp文件,內(nèi)容如下 #include jni.h #include "HelloWorld.h" #include stdio.h JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } 注意我們這里include了 jni.h和剛才得到的HelloWorld.h文件。因此你要在VC++里面設(shè)置好,jni.h在JAVA_HOME/include里面。編譯通過(guò)后再生成hello.dll文件。 運(yùn)行java程序 把上面生成的hello.dll文件復(fù)制到我們的工作目錄,這時(shí)候我們的目錄中包括HelloWorld.java,HelloWorld.class和hello.dll文件。運(yùn)行java HelloWorld命令,則可在控制臺(tái)看到Hello world| 的輸出了。運(yùn)行VC++; 文件---新建---選“win32 console application”(控制臺(tái)程序)---在右方設(shè)置好路徑并輸入工程名---確定 接下來(lái)的幾個(gè)提示框點(diǎn)確定就行了,那是提示是否要用VC++提供的框架之類(lèi)的 在左邊的工作空間中選“FILEVIEW”標(biāo)簽項(xiàng),點(diǎn)開(kāi)“+”號(hào),右鍵點(diǎn)擊“SOURCE FILES”,選“添加文件到目錄”,此即添加你要建立的C++源程序文件,會(huì)提示你沒(méi)有文件,是否添加,你點(diǎn)是,輸入文件名保存就OK了 然后SOURCE FILES下就出現(xiàn)了你剛才建立的*.CPP文件,雙擊,輸入代碼. 以下就是點(diǎn)”組建”菜單中的”編譯”、”組建”等命令進(jìn)行調(diào)試了。 相信你會(huì)了。

java在控制臺(tái)輸入的代碼可以調(diào)用嗎

可以調(diào)用

1.2構(gòu)造Scanner類(lèi)的對(duì)象,附屬于標(biāo)準(zhǔn)輸?流System.in,之后通過(guò)其中的?法獲得輸?。

1.3使?close();?法關(guān)閉對(duì)象。

這是Java經(jīng)典的取輸入方式,在JDK1.0中引入。此方法通過(guò)將 System.in(標(biāo)準(zhǔn)輸入流)包裝在 InputStreamReader 中來(lái)使用,InputStreamReader 包裝在 BufferedReader 中,我們可以在命令行中讀取用戶(hù)的輸入

常?的?法:nextLine();(字符串),nextInt();(整型數(shù)),nextDouble();(雙精度型數(shù));nextFloat()轉(zhuǎn)換成浮點(diǎn)型;nextBoolean()轉(zhuǎn)換成布爾型。

網(wǎng)頁(yè)題目:java調(diào)用代碼 java調(diào)用js代碼 實(shí)例
網(wǎng)站鏈接:http://chinadenli.net/article8/dojisip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化靜態(tài)網(wǎng)站面包屑導(dǎo)航建站公司動(dòng)態(tài)網(wǎng)站全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)