【发布时间】:2012-08-17 19:50:37
【问题描述】:
完整编辑:是的,我觉得我所看到的明显不是针对不从事这个项目的人,所以这可能会惹恼一些人,但我会在这里重置细节。
原来:- 我的 Eclipse IDE 工作区中有一系列文本文件、图像文件和声音文件。虽然我从 IDE 运行应用程序,但一切都很顺利。使用 File 和 Scanner 类(见下文)加载基于文本的文件(本例中为 .DAT),并由 slick2d 加载图像和声音(见下文):
// Loading a text based file from the IDE workspace
Scanner scanner = new Scanner(new File("text/intro1.DAT"));
// Loading an image and a sound as handled by slick2d
Image background = new Image("images/backgrounds/menuBG.jpg");
Sound bgm = new Sound("sounds/music/MainMenuTheme.wav");
到目前为止一切正常,但是......
导出:- 当我将文件导出到可运行的 jar 时,没有任何文本、声音和图像随之导出。我做了一些研究,了解到如果库的 /lib 文件夹中包含的内容将被导出。这有两个影响:
- 这破坏了 IDE 中的所有链接。看到现在一切都存在于 ./lib/...
- 但是,由于 lib 的内容直接导出到 jar 的顶层(至少当我使用 Eclipse 和 JarSplice 这样做时),这 固定 差异。至少在我试图解决的问题之前。
问题:- 查看上面的代码,文本文件夹和声音文件夹在生成的导出 jar 中存在于完全相同的级别。自从他们都工作的IDE以来,那个和路径字符串没有改变。现在,在导出到可运行的 jar 之后,所有声音和图像文件都由 slick2d 成功加载,但所有基于文本的 (.DAT) 文件现在在运行时导致 FileNotFound 异常,即使它们的访问权限尚未改变了。
显然,直接意义上的路径并没有什么问题,因为图像和声音仍在加载中,但错误仍然存在。
我以错误的方式访问文件? slick2d 的自我管理方式与尝试以我的方式访问文件之间是否存在某种冲突?
希望这更清楚一点。
【问题讨论】:
-
只有当您从 jar 文件或您的 IDE 调用代码时才抛出异常?请注意,您发布的 2 段代码是严格等效的,因此获得相同行为是正常的...
-
@Kira Namida 我会尝试输出当前工作目录并列出。
-
如果文件在 lib 之外(即在 eclipse 工作区中),IDE 会找到它们,但 jar 不会。如果它们在 lib 中,则两者都找不到。但是,直到我将其他所有内容添加到 lib 中,它们才成功导出到 jar 中(也就是说,我在 lib 中也有图像和声音,但是使用相同的 sting 路径可以很好地加载。我什至将图像放入“text”文件夹并从那里加载)。
标签: java filenotfoundexception