2012-06-30 34 views
0

我研究了幾個與此問題類似的示例,但我還沒有找到一個解決我的問題的方法。我只是試圖使用Native方法來執行我的第一個程序。我沒有將程序存儲在包的分層結構中,因爲我試圖讓第一個示例儘可能簡單。以下是如何存儲所有內容:使用javah創建.h文件,出現錯誤「找不到NativeDemo的類文件」

我有一個名爲NativeDemo的類。它存儲在C:/ JavaFiles/demo /中。我編譯了程序,而.class文件存儲在同一個文件夾中。當我嘗試在這個程序中調用javah命令時,它告訴我無法找到類文件。你能告訴我我做錯了什麼嗎?

我JAVAH命令被存儲在我的JDK並存儲如下:C:/jdk1.0.7_04/bin/

在從命令提示I型命令行:

C:\ JavaFiles \ demo> C:\ jdk1.7.0_04 \ bin \ javah -jni NativeDemo 也試過C:\ JavaFiles \ demo> C:\ jdk1.7.0_04 \ bin \ javah.exe -jni NativeDemo

當我做到這一點,它告訴我無法找到類文件。這是編譯時使用的相同路徑,它找到了文件,編譯並創建了.class文件,沒有問題。

請幫忙。謝謝。

+0

您是否在Java中有package語句文件?我知道你說過你沒有將程序存儲在軟件包的層次結構中,但這不完全相同。 – EJP

回答

5

您可能需要在命令行上提供-classpath參數到javah以設置類路徑。 (該-classpath參數javah行爲一樣它對於其他Java工具,如,java,javac的,javap的等等。如果你不理解類路徑,閱讀this pagethis page。)

+0

我不知道一般形式是如何。我試過javah -classpath JavaFiles/demo和其他一些東西,沒有任何工作 – user1349933

+0

我得到了它的感謝。我看到我錯過了 – user1349933

+7

@ user1349933:如果這個答案解決了你的問題,請*接受*它。如果不是,請考慮發佈您找到的答案並接受該答案。 – ThiefMaster

1

作爲解決方案從未補充說,我認爲我會提供解決方案,我發現這個問題。這不是一個真正的解決方案,因爲它是100%的用戶錯誤!

聽起來像是類似的情況,我想創建一個快速的小項目來演示JNI的使用。因爲這是一個簡單的練習,所以我沒有打擾IDE,只是用vi編寫代碼和javac來編譯它。

e.g

myclass.java(完全合格的類名稱爲mypackage.myclass)

的javac myclass.java

上述命令輸出到myclass.class當前目錄。我現在在我的當前工作目錄中有myclass.java & myclass.class。

運行javah mypackage.myclass會導致描述的錯誤。

這裏的問題是我使用javac,我把編譯的類寫到當前目錄中,但是javah正在「/mypackage/myclass.class」中尋找它。

一個愚蠢的小答案愚蠢的小問題,但我非常惱火在今天浪費了15分鐘,所以希望我能拯救別人同樣的痛苦(是的,我知道我應該早點發現它,可能有我不僅僅是有一小段時間在熱點和gnuj java實現之間發現System.load差異,所以很遺憾,我並不完全相信我的工具:(!!)。

0

您必須使用該類的完全限定名稱。 javah的語法是javah [options] classes類以其完全限定名稱指定。所以,你的情況如果烏拉圭回合包演示然後,該命令會,

C:\JavaFiles\demo>C:\jdk1.7.0_04\bin\javah -classpath . demo.NativeDemo 

類路徑。因爲,正如你所提到的,你在當前目錄下有.class文件。 -jni選項不需要,因爲它的默認值。

-1

我解決了這個問題,在Eclipse項目的目錄中使用以下命令:

javah -classpath [PROJECT_DIR\bin\classes] class.name 
0

在Android Studio中1.5我有同樣的問題,運行上面的命令,但沒有,我探討了應用模塊生成文件夾並且在中間文件夾中沒有classes文件夾,所以在運行命令創建項目之前,可以通過Build> Make Project或shirtcut鍵Ctrl + F9來執行此操作,然後運行以上命令

相關問題