首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JavaFX时出错

使用JavaFX时出错
EN

Stack Overflow用户
提问于 2018-08-14 23:26:19
回答 2查看 798关注 0票数 0

我尝试在Eclipse中使用SceneBuilder来创建第一个简单的图形界面示例,但是我遇到了这个无法解决的错误。

我通过Eclipse函数创建了Controller类。

错误

代码语言:javascript
复制
    *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*

代码

代码语言:javascript
复制
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();

}
EN

回答 2

Stack Overflow用户

发布于 2018-08-15 00:19:40

在您的例子中,只要缩短对getClass().getResource("a.fxml")的getResource调用就足够了。至少我希望如此,因为在没有实际尝试的情况下,我不会下注:-)

票数 1
EN

Stack Overflow用户

发布于 2018-08-15 08:04:17

@mipa的回答是正确的,你应该使用getClass().getResource("a.fxml"),但这里有更深入的内容:getClass().getResource(...)应该用于src文件夹中的文件,这些文件将最终放入最终的JAR中。但是,传递到getResource()的路径不是相对于src文件夹,而是相对于您的类文件。因此,如果您的.java文件是:

代码语言:javascript
复制
src/com/package/YourClass.java

然后,getClass().getResouce("a.fxml")会引用:

代码语言:javascript
复制
src/com/package/a.fxml

如果您希望相对于src目录,请以斜杠开始路径,即getClass().getResouce("/a.fxml")

此外,您还应注意,要加载磁盘上任何位置的文件(例如,由用户选择),则应改用以下代码:

代码语言:javascript
复制
File file = new File("your/path/here/file.fxml");
FXMLLoader.load(file.toURI().toURL());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51844892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档