我的需求集中在我的数据文件所在的位置。当前应用程序的所有类和数据文件都在一个 JAR 中(使用 Eclipse IDE 构建)。
我注意到人们似乎可以通过多种方式获取这些信息。我需要我的图像文件所在的路径(图形)。我还需要它作为 URL 或使用工具包调用。
Toolkit tk = frame.getToolkit();
image = tk.getImage(url.toFile());
但是我在创建 URL 或其他方面遇到了问题。我尝试了几种不同的方法。此时,我将数据文件放在文件系统中的类文件旁边。我正在为我所做的添加另一个功能 - 在调试中运行时删除/bin 目录。
// in class BwServices at init:
try {
rootDataPath = BwServices.class.getProtectionDomain()
.getCodeSource().getLocation().getPath();
rootDataPath = URLDecoder.decode(rootDataPath, "UTF-8");
fileSystemAccess = true;
}
if(rootDataPath.endsWith("/bin/"))
rootDataPath = rootDataPath.substring(0, rootDataPath.length() - 4);
后来……我去拿图,有的电话打不通,不知道为什么
我试过两件事....
// 1
String s = "file://" + rootDataPath + d.toString() + fileName;
url = frame.getClass().getResource(s);
// 2
try {
url = new URL(s);
} catch (MalformedURLException e) {
trace("getImage - can't get url: " + s);
e.printStackTrace();
}
两者都有问题。
我接到电话要从不同地方获取图像。 “框架”是整个执行过程中的父框架,在类 BwFrame 中。
我的道路在任何尝试中都是这样......
根数据路径:/C:/Users/Markgm/Documents/DEV/workspace/bwp/
因此,我正在寻找方法来打开工具包的 FileInputStream 或 URL,以获取与类文件所在位置相关的文件(以及在调试时使用一些技巧)。对于客户端应用程序,这就是它。有一天,我可能想将它作为一个 Applet 运行,但我不知道图像文件必须在哪里。 (50x75 扑克牌和一些按钮图像)任何帮助或建议都将不胜感激!
TIA, 标记
最佳答案
Toolkit tk = frame.getToolkit();
不要使用 Toolkit
加载图像,自 Java 1.4 以来。请改用 ImageIO.read(String/File/URL)
,这是一种阻塞方法,可确保在返回之前加载整个图像。
image = tk.getImage(url.toString());
还有一个实际问题。一旦有了 URL
(或 File
)对象,就不要将其丢弃并使用 String
表示。更重要的是,不要提供本应代表 File
,但实际上代表 URL
的 String
!
我没有阅读其余的代码片段(在问题或后续“答案”中),您可能希望发布 SSCCE future 。
关于java - 我的工作目录、文件和 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129182/