我正在 Netbeans 中使用 Maven 创建一个联系人应用程序。对于程序的操作,我希望用户在文件夹 /avatars 中添加和存储图像(联系人头像),并在侦听器事件上访问它们。我可以从 ProjectRoot/src/main/resources/images 目录中访问图像,但无法访问 ProjectRoot/avatars。注意:我不想将头像存储在资源目录中,因为这些将是用户在程序运行时添加的。我试过使用 getClass().getResource(avatarPath); 正如在类似问题中所建议的那样,但它没有奏效。我还尝试将“avatars”目录作为它自己的资源目录添加到 POM 中,但这也没有奏效。使用Maven时如何访问项目根目录中的文件/文件夹?listviewContacts.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Contact>() { @Override public void changed(ObservableValue<? extends Contact> observable, Contact oldValue, Contact newValue) { String avatar = newValue.getAvatar(); String avatarPath = null; if (avatar.isEmpty()) { avatarPath = "/images/" + DEFAULT_AVATAR; // loads from ProjectRoot/src/main/resources/images } else { avatarPath = "/avatars/" + avatar; // won't load from ProjectRoot/avatars } try { imageviewContact.setImage(new Image(avatarPath)); } catch (IllegalArgumentException ex) { System.err.println("Could not locate " + avatarPath); } } });
2 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
你正在混合两种不同的东西。
您可以将类路径资源与类一起打包在 jarfile 中,也可以将 java 显式添加到 java 类路径(使用 java -cp 命令行参数)的目录中。可以通过 getClass().getResource 访问。
或者,您可以使用 java.io.File 从任意位置加载文件。然后你的“projectRoot”是文件系统中的某个文件夹,你可以硬编码,通过 -DprojectRoot=C:/fun/with/files 配置,或者使用一些相对路径。Maven 与它无关,因为化身“将在程序运行期间由用户添加”。
您的用户不会启动您的 IDE,对吗?
添加回答
举报
0/150
提交
取消