java文件調用
❶ java 調用so文件
在命令行中運行如下命令:
javac HelloWorld.java
在當前文件夾編譯生成HelloWorld.class。
生成HelloWorld.h
在命令行中運行如下命令:
javah -jni HelloWorld
在當前文件夾中會生成HelloWorld.h。打開HelloWorld.h將會發現如下代碼:
/* 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: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
該文件中包含了一個函數Java_HelloWorld_print的聲明。這裡麵包含兩個參數,非常重要,後面講實現的時候會講到。
實現HelloWorld.c
創建HelloWorld.c文件輸入如下的代碼:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
}
注意必須要包含jni.h頭文件,該文件中定義了JNI用到的各種類型,宏定義等。
另外需要注意Java_HelloWorld_print的兩個參數,本例比較簡單,不需要用到這兩個參數。但是這兩個參數在JNI中非常重要。
env代表java虛擬機環境,Java傳過來的參數和c有很大的不同,需要調用JVM提供的介面來轉換成C類型的,就是通過調用env方法來完成轉換的。
obj代表調用的對象,相當於c++的this。當c函數需要改變調用對象成員變數時,可以通過操作這個對象來完成。
編譯生成libHelloWorld.so
在linux下執行如下命令來完成編譯工作:
cc -I/usr/lib/jvm/java-6-sun/include/linux/
-I/usr/lib/jvm/java-6-sun/include/
-fPIC -shared -o libHelloWorld.so HelloWorld.c
在當前目錄生成libHelloWorld.so。注意一定需要包含Java的include目錄(請根據自己系統環境設定),因為Helloworld.c中包含了jni.h。
另外一個值得注意的是在HelloWorld.java中我們LoadLibrary方法載入的是
「HelloWorld」,可我們生成的Library卻是libHelloWorld。這是Linux的鏈接規定的,一個庫的必須要是:lib+庫
名+.so。鏈接的時候只需要提供庫名就可以了。
運行Java程序HelloWorld
大功告成最後一步,驗證前面的成果的時刻到了:
java HelloWorld
如果你這步發生問題,如果這步你收到java.lang.UnsatisfiedLinkError異常,可以通過如下方式指明共享庫的路徑:
java -Djava.library.path='.' HelloWorld
當然還有其他的方式可以指明路徑請參考《在Linux平台下使用JNI》。
我們可以看到久違的「Hello world!」輸出了。
❷ java中如何調用其他java文件
JAVA中方法的調用主要有以下幾種:
1.非靜態方法
非靜態方法就是沒有 static 修飾的方法,對於非靜態方法的調用,是通過對 象來調用的;
2.調用靜態方法
靜態方法就是用 static 修飾的方法,靜態方法的調用是通過類名來調用的;
3.方法與方法之間的調用
方法與方法之間的調用,主要是在一個方法內部如何調用其他方法。
(1)靜態方法內部調用其他方法
如果在本類當中,靜態方法可以直接調用靜態方法,
❸ java調用bat文件 如何獲取結果
Runtime.getRuntime().exec("*.bat").getInputStream()
取得InputStream後再列印輸出。
Runtime.getRuntime().exec("*.bat").exitValue()可以取得運行結果。
❹ java中如何調用其他java文件中的方法
如果另一個類中的那個方法是私有的話,就不能直接調用到,如果是其他類型的話看情況,如果是靜態的(static)話,直接用類名可以調用到,如果是非靜態的,就需要利用另一個類的實例(也就是用那個類生成的對象)來調用。如:
class A{
public static void a(){}
public void b(){}
}
public class B{
public static void main(String[] args){
A.a();//靜態
new A().b();//非靜態
}
}
(4)java文件調用擴展閱讀
在Boss裡面實現對Employee的調用,
Employee.java:
packagepayroll2;
publicclassEmployee {
publicvoidmove(){
System.out.print("this is employee");
}
}
如果想實現對包的調用,可使用import關鍵字,然後再對調用類的實例化調用裡面的方法
Boss.java:
packagepayroll;
importpayroll2.Employee;
publicclassBoss {
publicstaticvoidmain(String args[]) {
newEmployee().move();
}
}
❺ .bat調用java文件的命令
加上Java環境設置:set JAVA_HOME=c\JAVA7
然後運行時的命令加上:%JAVA_HOME%\bin\java Send