我尝试在Eclipse中使用SceneBuilder来创建第一个简单的图形界面示例,但是我遇到了这个无法解决的错误。
我通过Eclipse函数创建了Controller类。
错误
*xception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
at ProvaGrafica2.start(ProvaGrafica2.java:29)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(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)
... 1 more
Exception running application ProvaGrafica2*
代码
import java.io.File;
import javafx.application.*;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ProvaGrafica2 extends Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
launch(args);
}
@Override
public void start (Stage stage) throws Exception
{
System.out.println("prova");
File file = new File("C:\\Users\\u5ex\\Desktop\\eclipse\\Grafica2\\src\\a.fxml");
if (file.exists())
System.out.println("il file esiste");
Parent root = FXMLLoader.load(getClass().getResource("C:\\Users\\u5ex\\Desktop\\eclipse\\Grafica2\\src\\a.fxml"));
Scene scene=new Scene (root);
stage.setTitle("Login");
stage.setScene(scene);
stage.show();
}
发布于 2018-08-15 00:19:40
在您的例子中,只要缩短对getClass().getResource("a.fxml")
的getResource调用就足够了。至少我希望如此,因为在没有实际尝试的情况下,我不会下注:-)
发布于 2018-08-15 08:04:17
@mipa的回答是正确的,你应该使用getClass().getResource("a.fxml")
,但这里有更深入的内容:getClass().getResource(...)
应该用于src
文件夹中的文件,这些文件将最终放入最终的JAR中。但是,传递到getResource()
的路径不是相对于src
文件夹,而是相对于您的类文件。因此,如果您的.java文件是:
src/com/package/YourClass.java
然后,getClass().getResouce("a.fxml")
会引用:
src/com/package/a.fxml
如果您希望相对于src
目录,请以斜杠开始路径,即getClass().getResouce("/a.fxml")
。
此外,您还应注意,要加载磁盘上任何位置的文件(例如,由用户选择),则应改用以下代码:
File file = new File("your/path/here/file.fxml");
FXMLLoader.load(file.toURI().toURL());
https://stackoverflow.com/questions/51844892
复制相似问题