2014-01-17 46 views
0

我想開始使用java軟件weka的API。我寫了下面的代碼進行測試:如何用導入的類編譯java程序?

import weka.core.Instances; 
import java.io.BufferedReader; 
import java.io.FileReader; 

public class hello_weka { 
    public static void main(String[] args) throws Exception { 
     BufferedReader reader = new BufferedReader(new FileReader("/home/aljoscha/Masterarbeit/weka_examples/iris.arff")); 
     Instances data = new Instances(reader); 
     reader.close(); 
     // setting class attribute 
     data.setClassIndex(data.numAttributes() -1); 
     System.out.println(data); 
     System.exit(0); 
    } 
} 

它在我在Eclipse中執行它時正常工作。 但是我不能讓它在終端中運行。

我試圖在編譯期間提供.jar路徑,然後從編譯的類的目錄執行程序。

javac -cp /usr/share/java/weka.jar hello_weka.java 
java hello_weka 

這種方法是行不通的,我得到以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: weka/core/Instances at hello_weka.main(hello_weka.java:8) Caused by: java.lang.ClassNotFoundException: weka.core.Instances at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) ... 1 more

我在做什麼錯?

我想我只是做了一些完全愚蠢的東西,因爲我剛開始用Java編寫代碼。如果是這樣,請原諒我,並試圖告訴我,我可以做得更好。

編輯:

當我嘗試在回答我收到以下錯誤提出的事:

Exception in thread "main" java.lang.NoClassDefFoundError: hello_weka Caused by: java.lang.ClassNotFoundException: hello_weka at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: hello_weka. Program will exit.

回答

0

我終於找到了答案:dunni的答案是接近正確。對我來說,如果我提供了jar文件和類文件的類路徑,但是它們之間用:分開,它就可以工作。

java -cp /usr/share/java/weka.jar:/home/aldorado/myjavascripts/ hello_weka 

根據您使用的OS/JDK,這可能有所不同嗎?

1

嘗試了這一點:

java -cp /usr/share/java/weka.jar hello_weka

+0

當我這樣做時,我得到另一個錯誤。 (請參閱編輯的問題) – aldorado

+0

您的類依賴關係存在一些問題。確保你已經在類路徑中提供了jar文件的正確路徑(-cp) –

0

您需要提供類路徑到您的JAR也執行該程序時:

java -cp /usr/share/java/weka.jar hello_weka 
1

您還需要在當前目錄(你自己的類存儲)添加到類路徑:

java -cp .;/usr/share/java/weka.jar hello_weka 
+0

這看起來好一些,但是我得到另一個錯誤,這個似乎是關於語法的。那麼我是否需要指定包含自己的類或類本身的目錄?我會盡力解決這個問題... – aldorado

+0

我找到了解決方案。在下面發表。 – aldorado