我一生都无法弄清楚这段代码的问题。我在这里对许多类似的问题进行了研究,解决了目录是否正确、可能错误的函数调用等问题。
我希望有人可以帮助我。一切都在名为 loginapp 的应用程序中名为 login 的文件中。
这是 Login.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package login;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Login extends Application {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml"));
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Fracken");
stage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
这是 Login.fxml
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package login;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Login extends Application {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml"));
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Fracken");
stage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
我确定问题出在
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
Run Code Online (Sandbox Code Playgroud)
我收到这个错误。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="317.0" prefWidth="326.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="login.Login">
<children>
<TextField fx:id="txtUsername" layoutX="110.0" layoutY="45.0" promptText="Username" />
<PasswordField fx:id="txtPassword" layoutX="110.0" layoutY="115.0" promptText="Password" />
<Button fx:id="btnLogin" layoutX="110.0" layoutY="184.0" mnemonicParsing="false" onAction="btnLoginAction" text="Login" />
<Button fx:id="btnReset" layoutX="232.0" layoutY="184.0" mnemonicParsing="false" onAction="btnResetAction" text="Reset" />
<Label fx:id="lblMessage" layoutX="110.0" layoutY="236.0" prefHeight="31.0" prefWidth="187.0" />
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
请帮助我,我在这里查看了其他人的类似问题,但没有解决方案。
getClass().getResource("Login.fxml")应该返回一个非空值,因为 usingClass.getResource查找相对于类的资源。由于您似乎已将资源放在login包中,因此在该包中使用具有资源名称的类Login.fxml应该可以工作。
出于某种原因,您不使用FXMLLoader传递此资源URL的对象。相反,您使用
getClass().getClassLoader().getResource("Login.fxml")
Run Code Online (Sandbox Code Playgroud)
即您使用类加载器加载文件。然而,类加载器不知道您从中检索它的类,因此会尝试Login.fxml在默认包中定位。
如果使用类加载器,则应使用完整路径,即
getClass().getClassLoader().getResource("login/Login.fxml")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14019 次 |
| 最近记录: |