JavaFX Исключение в потоке "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init> - PullRequest
0 голосов
/ 29 мая 2018

Я только что написал этот код здесь:

package SpellcheckerClient;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = FXMLLoader.load(getClass().getResource("/controller/gui.fxml"));
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.setTitle("Spellchecker Client");           
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

И это соответствующий контроллер.

package controller;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import spellchecker.remote.SpellcheckerRemoteAdapter;

public class Controller {
    @FXML
    TextField input;
    @FXML
    Button send;
    @FXML
    TextArea area;  
    @FXML
    Button connect;

    private SpellcheckerRemoteAdapter adapter;

    @FXML
    private void send() throws RemoteException{
        String toCheck = input.getText();
        this.area.appendText(toCheck + "\n");
        this.area.appendText(checkRoutine(toCheck, this.adapter) + "\n\n");
        this.input.clear();
    }

    public void initiateConnection() {
        try {           
            Registry registry = LocateRegistry.getRegistry(1088);
            this.adapter = (SpellcheckerRemoteAdapter) registry.lookup(SpellcheckerRemoteAdapter.NAME);
            this.area.appendText("Verbindung erfolgreich aufgebaut!\n");
            connect.setDisable(true);
        } catch (Exception e) {
            if(this.adapter == null) {
                this.area.appendText("Server nicht gefunden!\n");
            }
        }
    }

    private static String checkRoutine(String input, SpellcheckerRemoteAdapter adapter) throws RemoteException {
        if (input == null || input.isEmpty()) {
            return "Bitte etwas eingeben!";
        }
        String[] words = input.split(" ");
        boolean control = true;
        String output = "";
        for(String word : words) {
            if(!adapter.check(word)) {
                control = false;
                output += word + ":\t" + adapter.getProposal(word) + "\n";
            }
        }
        if(control) {
            return "Alles Okay!\n";
        }
        return output;
    }


}

Если я запускаю этот код на своем ноутбуке, где я его написал, онотлично работает в Eclipse и в качестве запускаемого Jar.Однако, если я пытаюсь запустить JAR на другом компьютере, я получаю следующее сообщение об ошибке:

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
        at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source) 

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
        at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source) 

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
        at javafx.graphics/com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

На моем ноутбуке и на моем компьютере установлены одинаковые версии JDK / JRE.Я действительно не понимаю, что говорит мне сообщение об ошибке.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Здравствуйте, у меня та же проблема в моей среде Eclipse (ОС Windows 10), добавление опции VM -Djava.library.path = "C: \ WINDOWS \ Sun \ Java \ bin" решило мою проблему

Это означает, что javafx-graphics- [version] -win.jar вызывает некоторую нативную dll.И Вы должны были найти, где хранятся эти dll.Я нашел путь, благодаря jvisualvm и показу опции VM для случая, когда приложение работает правильно.

Надеясь, что это решит вашу проблему.

0 голосов
/ 06 июля 2018

Какой JDk вы установили ??У меня та же проблема, и я использую JDK 8 вместо JDK 9. Что мне помогло. Образец изображения исключения

Это потому, что созданный мною jar был создан на JDK 8 черездругая система.Где, когда он выполнялся в другой системе, которая имеет JDK9.Так что это несовместимая версия.

После сохранения одного JDK 8 и сопоставления его с системной средой, когда я пытаюсь запустить свой jar, это сработало для меня.

Удачи:)

...