【问题标题】:Exporting IntelliJ project to JAR. Path to files stop working将 IntelliJ 项目导出到 JAR。文件路径停止工作
【发布时间】:2016-03-16 22:56:19
【问题描述】:

我有一个项目要导出到 JAR 文件。构建 JAR 本身工作正常,似乎所有必要的文件都包含在 JAR 中。我遇到的问题是当我在我的一个类中有这样的代码时:

Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:player/resources/test.db");

它也不适用于此代码:

    FXMLLoader load = new FXMLLoader(getClass().getResource("commonGUI.fxml"));

通过 IntelliJ 运行项目工作正常,但是在构建和运行 JAR 文件时,我得到了这个异常:

java.sql.SQLException: path to 'player/resources/test.db': '/Users/Kristian/Documents/Uni/Freelance/SEProjects/SE18/working/Plookify/out/artifacts/Plookify_jar/player' does not exist

或者这取决于我要加载的文件:

Caused by: javafx.fxml.LoadException: 
file:/Users/Kristian/Documents/Uni/Freelance/SEProjects/SE18/working/Plookify/out/artifacts/Plookify_jar/Plookify.jar!/common/commonGUI.fxml

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at common.openMainGUI.start(openMainGUI.java:21)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at common.commonGUIController.loadPlayerPane(commonGUIController.java:43)
at common.commonGUIController.initialize(commonGUIController.java:31)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
... 14 more

如何解决这样的问题?


已解决

问题已解决。为了解决 SQLException,DB 文件必须放在 JAR 文件之外。对于FXML错误,需要修改项目代码中的路径。

【问题讨论】:

    标签: java intellij-idea jar


    【解决方案1】:

    你没有说在 IntelliJ 中设置你的项目做了什么,所以我假设你在某个时候添加了 Jar。

    您需要将 SQLite JDBC 驱动程序添加到您的类路径中。在 IDE 内部运行时会发现它,但不是从命令行运行。

    您可以在此处获取更多信息:Java: how to import a jar file from command linehttp://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

    【讨论】:

    • 从本质上讲,他的 JDBC 驱动程序是一个依赖项,他需要将其包含在 JAR 中(或包含一个将为他处理它的依赖项管理器)
    • 有可能我必须这样做,但这就是“下一个问题”,因为它无法找到指定的路径。当程序应该加载 FXML 文件时,我遇到了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2014-03-10
    • 1970-01-01
    • 2016-02-08
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多