JAVAFX:位置没有设置错误
我的项目在eclipse中正常运行,但是当我创build这个项目的jar文件并试图通过cmd运行它显示“位置未设置”错误。
我的项目结构是:
方法是(在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(); }
这段代码有什么问题?
有一些相对的问题,但它们不同。 他们的代码没有在IDE中运行,但是我的代码在IDE中运行。
参考:我做了一些文件夹结构的变化,并能够成功运行。 但是这个结构太可怕了,因为我把所有的FXML文件和控制器放在同一个包里。
当您使用getClass().getResource(...)
您正在加载资源,而不是指定文件的path。 在类加载器从文件系统加载类的情况下,这些实质上等同于相同的事情,并且它实际上工作(尽pipe如此,没有技术上的理由)。 当类加载器正在通过其他机制加载类时(可能无论如何都是这样),那么注意资源的Java 规范是很重要的。
特别要注意的是:
资源,名称和上下文
资源由由一系列子string组成的string标识,由斜杠(/)分隔,后跟资源名称。 每个子string必须是有效的Java标识符。 资源名称的格式为shortName或shortName.extension。 shortName和extension都必须是Java标识符。
(我的重点。)由于..
不是一个有效的Java标识符,不能保证这个资源是可以parsing的。 恰巧,文件系统类加载器以您期望的方式解决了这个问题,这就是为什么它在您的IDE中工作的原因,但是在jar类加载器中实现getResource(...)
并没有按照您希望的方式实现。
尝试
FXMLLoader loader = new FXMLLoader(getClass().getResource("/sm/customer/CustomerHome.fxml"));
- java.lang.ClassCastException:android.view.ViewGroup $ LayoutParams不能转换为android.widget.Gallery $ LayoutParams
- React组件不渲染:React js
- java.lang.OutOfMemoryError:在eclipse中tomcat中的PermGen空间
- logging器与System.out.println
- 如何在Eclipse中使用条件断点?
- 在月蚀中select块
- Eclipse中无法访问的代码错误与Java中的死代码警告?
- Java:Thread.currentThread()。sleep(x)与Thread.sleep(x)
- Gradle compileJava任务警告: bootstrap类path没有与-source 1.6一起设置
- Java中有效的@SuppressWarnings警告名称列表是什么?
- 如何让Eclipse解决用Maven 2生成的类?