为什么程序在运行时我的舞台没有反应? (java 效果)

Why my stage doesn't respond while the program is running? (java fx)

我有一个简单的 javaFx 应用程序,它从 html 结构中搜索一些文本和一些元素。它有一点window,一个舞台。该程序可以 运行 正确,但是当程序 运行ning 时,阶段 (javaFx window) 没有响应,它冻结了。 我想我应该 运行 我的舞台在一个新的线程中,但它没有用。这是我的程序提到的部分。 我怎样才能 运行 我的程序不 window 冻结?

public class Real_estate extends Application implements Runnable {
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
        stage.getIcons().add(new Image("http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/house-icon.png"));
        stage.setTitle("Simple program 0.8");
        stage.setWidth(300);
        stage.setHeight(300);
        stage.setResizable(false);

        HtmlSearch htmlSearch = new HtmlSearch ();
        htmlSearch .toDatabase("http://example.com");

    }

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

    @Override
    public void run() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

运行 在后台线程中需要很长时间才能运行(大概是htmlSearch.toDatabase(...))的代码。你可以用

来做到这一点
public class Real_estate extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
        stage.getIcons().add(new Image("http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/house-icon.png"));
        stage.setTitle("Simple program 0.8");
        stage.setWidth(300);
        stage.setHeight(300);
        stage.setResizable(false);

        HtmlSearch htmlSearch = new HtmlSearch ();
        new Thread(() -> htmlSearch.toDatabase("http://example.com")).start();

    }

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

这假设htmlSearch.toDatabase(...)不修改UI;如果是这样,您将需要将修改 UI 的代码包装在 Platform.runLater(...) 中。看,例如 以获得对 JavaFX 中多线程的更详细解释。