0

完整编辑:是的,我觉得我所看到的明显不是针对不从事这个项目的人,所以这可能会惹恼一些人,但我将在这里重置细节。

最初:- 我的 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 如何自我管理和尝试以我的方式访问文件之间是否存在某种冲突?

希望这更清楚一点。

4

2 回答 2

0

Since you said the files have moved I'm going to guess you would want something like this

File file = new File("lib/text/intro1.DAT");
Scanner scanner = new Scanner(file);

Scanner scanner = new Scanner(new File("lib/text/intro1.DAT"));

Relative file paths (file paths that don't start with '/' or a drive letter) start at the root of the project/jar.

于 2012-08-14T20:40:49.433 回答
0

当指定文件的相对路径时,java 解释相对于当前工作目录的相对路径。当前工作目录是您运行 java 命令的地方。

您应该指定文件相对于该目录的位置。

例子:

   File located at: drive1/files/yourfile
   java run in: drive1/aDir/

   In this case you should specify the file's location as: ./../files/yourfile
于 2012-08-14T21:41:32.463 回答