javac調用
❶ java如何調用javac命令
配置環境變數後才可以
我的電腦點右鍵,選擇「屬性」,選擇「高級」標簽,進入環境變數設置,分別設置如下三個環境變數:
設置JAVA_HOME:
一是為了方便引用,比如,JDK安裝在C:\jdk1.6.0目錄里,則設置JAVA_HOME為該目錄路徑, 那麼以後要使用這個路徑的時候, 只需輸入%JAVA_HOME%即可, 避免每次引用都輸入很長的路徑串;
二則是歸一原則, 當JDK路徑改變的時候, 僅需更改JAVA_HOME的變數值即可, 否則,就要更改任何用絕對路徑引用JDK目錄的文檔, 要是萬一沒有改全, 某個程序找不到JDK, 後果是可想而知的----系統崩潰!
三則是第三方軟體會引用約定好的JAVA_HOME變數, 不然, 你不能正常使用該軟體.
在系統環境變數那一欄中點->新建JAVA_HOME (JAVA_HOME指向的是JDK的安裝路徑)
變數名: JAVA_HOME
變數值: C:\jdk1.6.0
(1)設置好path變數,使得我們能夠在系統中的任何地方運行java應用程序,比如javac、java、javah等等,這就要找到我們安裝JDK的目錄,
假設我們的JDK安裝在C:\jdk1.6.0目錄下,那麼在C: \jdk1.6.0\bin目錄下就是我們常用的java應用程序,我們就需要把C:\jdk1.6.0\bin這個目錄加到path環境變數裡面。
在系統變數里找到path變數,選擇->編輯;(裡面已經有很多的變數值,是在變數值的最前面加上C:\jdk1.6.0\bin; 如果沒有 就新建一個 但是 一般都會有的)
變數名: path
變數值: C:\jdk1.6.0\bin;
或 %JAVA_HOME%\bin;
(2)classpath環境變數,是當我們在開發java程序時需要引用別人寫好的類時,要讓java解釋器知道到哪裡去找這個類。通常,sun為我們提供了一些額外的豐富的類包,一個是dt.jar,一個是tools.jar,這兩個jar包都位於C:\jdk1.6.0\lib目錄下,所以通常我們都會把這兩個jar包加到我們的classpath環境變數中set classpath=.;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar。
在系統環境變數那一欄中點->新建classpath
變數名: classpath
變數值: .;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar;
或 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
(注意,CLASSPATH 中最前面是有個 「.」的,表示當前目錄,這樣當我們運行java AClass的時候,系統就會先在當前目錄尋找AClass文件了。)
❷ Linux環境下java調用C
你的JNI 寫錯了吧
java里的 char和 C的char完全不是一回事
java里你要寫 stringjava_encryptpswd(string Password, string EncryptedKey );
生成的 C頭文件,應該是 jstring java_encryptpswd(JEnvi* pEnvi,jstring Password,jstring EncryptedKey)
我手寫的,沒查資料,大概是這樣。。
然後第一個參數是當前虛擬機事例,裡面有很多可用的函數
後面兩個是java里字元串結構,在C裡面的表示法, 其實它就是指針而已。
然後你可以用pEnvi里的函數,將java的string,轉化成 c的string。
然後調用 C的頭文件的函數,得到結果,在組裝成java的字元串。
比如例子:
我要用C來實現 java的字元串定位。
No.1 定義java的本地介面
public native String NAConvert(String arg1,String arg2);
No.2 生成頭文件
JNIEXPORT jstring JNICALL Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv *, jobject, jstring, jstring);
No.3 自己創建一個實現文件,實現上面函數
jstring Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv* env, jobject obj, jstring arg1, jstring arg2)
{
jsize len = env->GetStringLength(arg1);
jchar* pBuf = new jchar[len+1];
env->GetStringRegion(arg1,0,len,pBuf);
jclass m = env->FindClass("java/lang/String");
jmethodID mid = env->GetMethodID(m,"charAt","(I)C");
jchar c = env->CallCharMethod(arg1,mid,1);
return arg1 ;
}
第一個是虛擬機事例指針,第二個參數是介面方法所在對象的 this。
第三個及以後才是你的介面的參數。
java里傳入的所有對象參數,在C裡面都是句柄。必須要用第一個參數env才能解析其中含義。
❸ 如何使用javac命令編譯java源程序
1.建文本文檔,輸入自己的java程序。