@Neonoviiwolf
Flutter developer

Пытаюсь разобраться в RxJava на javaFx, падает «hello world»?

Падает при запуске
подключил rxjava 2.1.7 и rxjavafx 2.0.2
private Observable<String> observable;
    private Observer<String> server;

    @Override
    public void start(Stage primaryStage) throws Exception {
        pane = FXMLLoader.load(getClass().getResource("sample.fxml"));

        Scene scene = new Scene(pane, 1000, 1000, Color.LIGHTGRAY);

        primaryStage.setScene(scene);
        primaryStage.show();


        server = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable disposable) {

            }

            @Override
            public void onNext(String s) {
                System.out.print(s);
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onComplete() {

            }
        };
        observable = Observable.just("hello world");  //тут падает при старте
    }
    @FXML
    Button  add;
 @Override
    public void initialize(URL location, ResourceBundle resources) {

        add.setOnAction(event -> {
            observable.subscribe(server);
        });
}

вот сыпет
Exception in Application start method
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: org/reactivestreams/Publisher
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at Main.start(Main.java:59)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
	at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
	... 1 more
Caused by: java.lang.ClassNotFoundException: org.reactivestreams.Publisher
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 22 more
Exception running application Main

плиз, не понимаю что не так. Урок смотрел как сделать на андроид, но вроде разницы в данном примере быть не должно же
  • Вопрос задан
  • 524 просмотра
Решения вопроса 1
@Neonoviiwolf Автор вопроса
Flutter developer
Корочь у rxjava есть просто ещё зависимость Reactive Streams, добавил и заработало
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
1)
Caused by: java.lang.NoClassDefFoundError: org/reactivestreams/Publisher

2) У javaFX есть свои observable коллекции которые нужно использовать, в них парадигма подписи на события уже есть и весь ui завязан именно на них.
3) Если хотите из кода что то делать с интерфейсом из другого потока (rx зависит от реализации) то необходимо такие операции производить в блоке Platform.runLater(java.lang.Runnable runnable) в котором уже колдуете.
Ответ написан
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
Neonoviiwolf, похоже у вас библиотека подключена только в IDE, но отсутствует в JAR. Возьмите любой декомпилятор JAR-файлов и проверьте наличие библиотеки RxJava. Если её там нет, то нужно проверить настройки сборки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы