Java中的相对路径不正确

时间:2018-08-10 20:01:38

标签: java javafx intellij-14

我的问题在此处的代码中(出于调试目的而分离):

// creating newUniversePane
Scene newUniverseScene = new Scene(newUniversePane, 300, 200);
Class<? extends WorldNoteOrganizerMainController> aClass = getClass();
URL resource = aClass.getResource("../../resources/css/main.css");
String s = resource.toExternalForm();
newUniverseScene.getStylesheets().add(s);
//more code

因此,通过查看Stack Overflow上的许多示例,看来我的相对路径是正确的。但是,当我运行该程序并到达此代码时,它给了我一个错误。(我试图将css添加到将作为弹出窗口添加到舞台的场景中)

错误消息:

  

由以下原因引起:java.lang.NullPointerException   controller.WorldNoteOrganizerMainController.handleNewUniverse(WorldNoteOrganizerMainController.java:169)

此错误指向该行:

String s = resource.toExternalForm();

这是因为资源为空。我尝试了许多不同的路径来尝试获取文件,但是没有成功。另外,我在这里四处张望,以免重复问题,但找不到任何有帮助的问题。我发现了相对的上课路径问题,但它们并没有帮助我解决此问题。任何帮助将不胜感激!我已经在最后添加了相关信息。

实际的一线代码:

newUniverseScene.getStylesheets().add(getClass().getResource("/../../resources/css/main.css").toExternalForm();

尝试的路径:

URL resource = aClass.getResource("/../resources/css/main.css");
URL resource = aClass.getResource("/resources/css/main.css");

层次结构快照:

enter image description here

3 个答案:

答案 0 :(得分:2)

您需要确定您的应用程序位于哪个文件夹,何时运行以及如何查找。使用this.getClass().getResource(),查找是相对于类文件本身的位置而言的,如果路径以“ /”以外的任何其他开头,则当路径以“ /”开头时,则假定为“绝对”路径,它将开始于类路径的“顶部”(在Eclipse中应为“目标”文件夹)。所以-在您的情况下,您可能需要使用“ /css/main.css”(因为src / main / resources / *将被复制到target /)-如下所述,“相对路径”不会使在这里有意义。

答案 1 :(得分:1)

使用相对路径时,请使用以下路径:

CREATE TABLE [dbo].[UserInfo]
(
    [UserId] int NOT NULL IDENTITY (1, 1),
    [strEmail] varchar(100) NOT NULL,
    [strLastName] varchar(50) NOT NULL DEFAULT 'N/A',
    [strFirstName] varchar(50) NOT NULL DEFAULT 'N/A',
    [strMiddleInitial] varchar(5) NOT NULL DEFAULT 'N/A',
    [strDSNPhone] varchar(10) NOT NULL DEFAULT 'N/A',
    [dCreationDate] date NOT NULL DEFAULT '1900-1-1',
    [dDD2875Approved] date NOT NULL DEFAULT '1900-1-1', 
    [dDD2875Expires] date NOT NULL DEFAULT '1900-1-1',
 )

 CREATE TABLE [dbo].[Files]
 (
     [FileID] bigint NOT NULL IDENTITY (1, 1),
     [strFileName] varchar(200) NULL,
     [strFilePath] varchar(400) NULL,
     [strFileDescription] varchar(200) NULL,
     [UserId] int NOT NULL,
     [strEmail] varchar(100) NOT NULL
 )

 ALTER TABLE [dbo].[Files] 
 ADD CONSTRAINT [PK_Files]
     PRIMARY KEY CLUSTERED ([FileID] ASC)

ALTER TABLE [dbo].[UserInfo] 
ADD CONSTRAINT [PK_UserInfo]
    PRIMARY KEY CLUSTERED ([UserId] ASC, [strEmail] ASC)

ALTER TABLE [dbo].[Files] 
ADD CONSTRAINT [FK_Files_UserInfo]
    FOREIGN KEY ([UserId],[strEmail]) REFERENCES [dbo].[UserInfo]([strEmail],[UserId]) 
         ON DELETE No Action ON UPDATE No Action

如果您使用的是Intellij,则可以通过右键单击文件来选择相对路径。

答案 2 :(得分:1)

当您将资源文件夹指定为Inillj IDEA(黄色小图标)中的资源文件夹,然后调用getClass().getResources()时,它将进入资源目录本身,因此您只需使用getClass().getResources("css/main.css") < / p>