我正在尝试加载我的应用程序的主屏幕,实际上该应用程序从未实际运行并显示屏幕。经过进一步调查(通过 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();
}
}
您已经使用初始化()方法创建了一个无限循环。初始化方法由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。