我創建了一個名爲RxJava在於向世人證明RxJava的API的使用項目,下面是java文件的內容。
package com.limx.reactive;
import rx.Observable;
import rx.Subscriber;
public class CreateDemo {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> observer) {
try {
if (!observer.isUnsubscribed()) {
for (int i = 1; i < 5; i++) {
observer.onNext(i);
}
observer.onCompleted();
}
} catch (Exception e) {
observer.onError(e);
}
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
}
}
然後我編譯
[email protected]:~/test/RxJava$ javac -d ./bin -classpath ~/libs/rxjava-1.3.1-SNAPSHOT.jar src/com/limx/reactive/CreateDemo.java
有在bin目錄下生成編譯成功後,一些coressponding類文件。
但是,當我執行與
[email protected]:~/test/RxJava$ java -classpath ./bin com.limx.reactive.CreateDemo
類文件異常發生
Exception in thread "main" java.lang.NoClassDefFoundError: rx/Observable$OnSubscribe
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2688)
at java.lang.Class.privateGetMethodRecursive(Class.java:3035)
at java.lang.Class.getMethod0(Class.java:3005)
at java.lang.Class.getMethod(Class.java:1771)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: rx.Observable$OnSubscribe
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
似乎不能找到內部類「OnSubscribe」類「可觀察的」,對不對?但爲什麼以及如何解決它?
/**********************添加更多問題****************/
[email protected]:~/test/RxJava$ java -classpath ~/libs/rxjava-1.3.1-SNAPSHOT.jar:./bin/ com.limx.reactive.CreateDemo
Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.
上述工作命令成功,但現在我有進一步quesitions。
異常說,它無法找到可觀察$ OnSubscribe而不是可觀察的定義,這意味着可觀察類是解決了,那麼爲什麼rxjava-1.3.1-SNAPSHOT.jar需要的?
如果classpath的順序與進口環鏈是否一致?否則,如何解釋它在更改訂單時不起作用。
這裏是bin目錄下的文件:
[email protected]:~/test/RxJava/bin/com/limx/reactive$ ll
total 20
drwxrwxr-x 2 limxtop limxtop 4096 May 29 13:03 ./
drwxrwxr-x 3 limxtop limxtop 4096 May 29 13:03 ../
-rw-rw-r-- 1 limxtop limxtop 1226 May 29 13:03 CreateDemo$1.class
-rw-rw-r-- 1 limxtop limxtop 1062 May 29 13:03 CreateDemo$2.class
-rw-rw-r-- 1 limxtop limxtop 630 May 29 13:03 CreateDemo.class
嘗試使用'-classpath斌/ *' –
我都試過了,但它不會仍然工作。 limxtop @ IdeaPad:〜/ test/RxJava $ java -classpath ./bin/* com.limx.reactive.CreateDemo 錯誤:無法找到或加載主類com.limx.reactive.CreateDemo – Saint
其實-classpath bin/*是錯的。有關說明和更多詳細信息,請參閱http://docs.oracle上的瞭解類路徑通配符一節。com/javase/7/docs/technotes/tools/windows/classpath.html – Saint