“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:rx/Observable$OnSubscribe
我创建了一个名为RxJava的项目来演示RxJava API的使用,下面是java文件的内容“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:rx/Observable$OnSubscribe,java,Java,我创建了一个名为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
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.");
}
});
}
}
编译成功后在bin目录中生成了一些coresponding类文件
但是当我用
limxtop@IdeaPad:~/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
似乎在类“Observable”中找不到内部类“OnSubscribe”,对吗?但为什么以及如何解决
/**********************添加其他问题***************/
limxtop@IdeaPad:~/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.
上面的命令成功地工作了,但现在我还有更多的问题
limxtop@IdeaPad:~/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
您还需要将
rxjava-1.3.1-SNAPSHOT.jar
添加到您的类路径中,因为它包含rxjava(Observable
等)类:
如果您在Windows上工作,则需要使用代码>而不是:
作为类路径分隔符
更新
<>请注意,<>代码> ~/<代码>扩展到您的主目录(这是由shell而不是由代码> java < /Cord>可执行文件)在当在CLSASSPATE < /Cord>声明的中间发生的地方不起作用的。您最好使用完全限定的路径或类似于${HOME}/libs/rxjava-1.3.1-SNAPSHOT
,这样更可靠。尝试使用-classpath bin/*
我已经尝试过了,但仍然无法工作。limxtop@IdeaPad:~/test/RxJava$java-classpath./bin/*com.limx.reactive.CreateDemo错误:无法找到或加载主类com.limx.reactive.CreateDemo实际上-classpath bin/*错误。有关解释和更多详细信息,请参阅以下位置的“理解类路径通配符”一节:limxtop@IdeaPad:~/test/RxJava$java-classpath./bin:~/libs/RxJava-1.3.1-SNAPSHOT.jar com.limx.reactive.CreateDemo线程“main”java.lang.NoClassDefFoundError中的异常:rx/observatable$onSubscribeeBut当我更改类路径值的顺序时,它工作正常,这让我很困惑。limxtop@IdeaPad:~/test/RxJava$java-classpath~/libs/RxJava-1.3.1-SNAPSHOT.jar:./bin/com.limx.reactive.CreateDemo下一步:1下一步:2下一步:3下一步:4序列完成。@可能是缺少的斜杠。你能试试-classpath./bin/:~/libs/rxjava-1.3.1-SNAPSHOT.jar吗
不,我在成功更改工作顺序后尝试过这个。奇怪。。。您的/bin
目录中有什么?是否还有rx
套餐?
limxtop@IdeaPad:~/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
java -classpath ~/libs/rxjava-1.3.1-SNAPSHOT.jar:./bin com.limx.reactive.CreateDemo