提问者:小点点

FXMLLoader. load()从不退出(JavaFX 8)


我正在尝试加载我的应用程序的主屏幕,实际上该应用程序从未实际运行并显示屏幕。经过进一步调查(通过 NetBeans 调试器运行它),我发现我的代码在 FXMLLoader.load(url) 之后从未执行;- 它停在那里,并且不会抛出任何错误。我确实知道网址是正确的 - 我检查了它的值,它是正确的。有人知道如何解决它吗?提前感谢!

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.text.*?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-      Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8"    xmlns:fx="http://javafx.com/fxml/1" fx:controller="graphics.MainScreenController">
<children>
<Text fx:id="funds" layoutX="489.0" layoutY="383.0" strokeType="OUTSIDE" strokeWidth="0.0" text="USD 52,356,000.07">
</Text>
</children></AnchorPane>
package graphics;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

/**
 * FXML Controller class
 *
 */
 public class MainScreenController extends Application implements Initializable {


@FXML
private Text funds;

/**
 * Initializes the controller class.
 */
public void initialize(URL url, ResourceBundle rb) {  
    start(new Stage());

}    

@Override
public void start(Stage primaryStage){
    Parent root = null;
    try {
        URL url = getClass().getResource("MainScreen.fxml");
        root = FXMLLoader.load(url);
    } catch (Exception ex) {
        Logger.getLogger(MainScreenController.class.getName()).log(Level.SEVERE, null, ex);
    }
    Scene scene = new Scene(root,1200,800);
    primaryStage.setTitle("Title");
    primaryStage.setScene(scene);
    primaryStage.show();
}

}

共3个答案

匿名用户

您已经使用初始化()方法创建了一个无限循环。初始化方法由FXMLLoader自动调用。

您正在从初始化()方法调用start(),该方法加载MainScreen. fxml文件,该文件创建一个新的MainScreenController实例。FXMLLoader会自动在新实例上调用初始化(),然后调用start(),该实例再次加载MainScreen.xml,以此类推。

从 JavaFX 2.2 开始,可初始化接口不再是加载 FXML 后初始化控制器的首选方法。这已更改为改用@FXML批注。问题 JavaFX 中的“自动将位置和资源属性注入控制器”是什么?显示了新方法的示例。

此外,我不确定为什么要在initialize()方法中创建一个新的Stage()。通常情况下,要获得Stage,您需要在应用程序上调用launch(),而start()方法将自动与Stage一起为您调用。示例如下:http://docs.oracle.com/javafx/2/get_started/hello_world.htm

匿名用户

这不是传统的JavaFX代码。

您应该使用main和静态启动方法来调用您的应用程序

示例:

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

launch调用start方法。

请选中http://docs.oracle.com/javafx/2/get_started/hello_world.htm以创建

我不知道你为什么用那种方法把主要内容附加到屏幕上

或者我不理解这个问题。

匿名用户

这不是传统的JavafX代码。

您应该使用主启动方法和静态启动方法来调用您的应用程序

示例:

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

并启动调用启动方法。

请检查你的参考http://docs.oracle.com/javafx/2/get_started/hello_world.htm。