将IntelliJ项目导出到JAR。文件路径停止工作

时间:2016-03-16 22:56:20

标签: java intellij-idea jar

我有一个项目,我正在尝试导出到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错误,必须修改项目代码中的路径。

1 个答案:

答案 0 :(得分:0)

你没有说明在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