当前位置: 首页 > 知识库问答 >
问题:

JavaFX:位置未设置错误[重复]

郭鸿信
2023-03-14

我的项目在eclipse中正常运行,但当我创建该项目的jar文件并试图通过cmd运行它时,它显示“Location is not set”错误。

我的项目结构是:

方法是(在eclipse中运行):

@FXML
private void RegularCustomer(ActionEvent event) throws Exception{
    Stage stage = (Stage) dailySales.getScene().getWindow();
    Scene scene = dailySales.getScene();
    FXMLLoader loader = new FXMLLoader(getClass().getResource("../customer/CustomerHome.fxml"));
    System.out.println(loader.getLocation());
    scene.setRoot(loader.load());
    stage.setScene(scene);
    stage.show();
}

共有1个答案

嵇星海
2023-03-14

使用getClass().getResource(...)时,您正在加载资源,而不是指定文件的路径。在类加载器从文件系统加载类的情况下,这些本质上等同于同一件事,并且它确实可以工作(尽管即使这样也没有技术上的理由)。当类加载器通过其他机制加载类时(可能在所有情况下都是如此),那么关注资源的Java规范就很重要。

特别要注意:

资源、名称和上下文

试试看

FXMLLoader loader = new FXMLLoader(getClass().getResource("/sm/customer/CustomerHome.fxml"));

由于您组织了代码,使得每个FXML都与其相应的控制器文件在同一个包中(我认为这是一种明智的方法),因此您还可以在加载FXML时利用这一点:只需加载“相对于其控制器”的FXML:

FXMLLoader loader = new FXMLLoader(CustomerHomeCtrl.class.getResource("CustomerHome.fxml"));

在此设置中,这似乎很自然,编译器将检查您在导入类时CustomerHomeCtrl的包名称是否正确。它还使重构变得容易:例如,假设您希望将sm.admin拆分为多个子包。在Eclipse中,您将创建子包,将FXML和控制器拖放到适当的子包中,并且import语句将自动更新:不再需要进一步的更改。如果路径是在getResource(...)中指定的,则必须手动更改所有路径。

 类似资料:
  • 当选择menuItem时,尝试关闭当前场景并打开另一个场景时,我遇到了问题。我的主阶段编码如下: 当程序执行时,它将转到carthomepage.fxml。从那里,我可以选择去创建产品或创建类别时,菜单项被选中。下面是我的操作事件: 提前道谢。

  • 问题内容: 当选择menuItem时,尝试关闭当前场景并打开另一个场景时出现问题。我的主要阶段编码如下: 执行该程序后,它将转到cartHomePage.fxml。选择菜单项后,我可以从那里选择创建产品或创建类别。这是我的动作事件: 但是,我只能切换一次舞台。例如,我的默认页面是cartHomePage.fxml。运行程序时,首先要创建产品阶段。在那之后,我不能再去任何地方了。错误消息是: 我关上

  • 当我运行我的应用程序时,我有“应用程序启动方法[警告]java.lang.reflect.InvocationTargetException异常”。我尝试使用fxml路径但仍然不起作用。当使用try/catch时,我有“位置未设置错误”。 我还得到了“未能在项目Test-generator-Maven上执行目标org.codehaus.mojo:exec-maven-plugin:1.2.1:ja

  • 我的项目在eclipse中运行得很好,但当我在cmd中运行该项目的jar时,我得到错误似乎我的FXML没有正确加载。我知道这个问题被问了很多次,但没有一个能解决我的问题。我试着用 但我还是有错误。 这是我的项目的结构 在Eclipse中运行的方法:

  • 我在尝试运行我的代码时遇到了这个错误,这是一个简单的javafx代码来加载一个fxml文件,我尝试了我在这里找到的解决方案,但没有一个对我有效。很抱歉,如果格式不是很好,这是我在这里的第一个帖子,并且很抱歉,如果我在屠杀语言,英语不是我的第一语言。提前道谢! 这是事情的组织方式

  • 我在iOS 7上运行良好的应用程序与iOS 8 SDK不兼容。 CLLocationManager不返回位置,并且我在