Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSX Java应用程序不再按相对URL查找Java资源文件夹_Java_Macos_Resources_Classpath_Osx Elcapitan - Fatal编程技术网

OSX Java应用程序不再按相对URL查找Java资源文件夹

OSX Java应用程序不再按相对URL查找Java资源文件夹,java,macos,resources,classpath,osx-elcapitan,Java,Macos,Resources,Classpath,Osx Elcapitan,我有一个Java应用程序,几年前我和别人一起写的。它被捆绑成OSX应用程序,直到最近我们的用户还在使用Java6。现在用户已经升级到El Capitan和Java 8。我更改了应用程序的构建过程,使用ant任务创建应用程序包,并且我可以在Java8中成功启动应用程序 然而,资源文件的处理方式似乎已经发生了改变,破坏了我们的应用程序。以前,我们在包中的Contents/Java/resource中有资源文件。我们可以通过URL文件:resource/someFile访问这些资源,但这不再适用于ja

我有一个Java应用程序,几年前我和别人一起写的。它被捆绑成OSX应用程序,直到最近我们的用户还在使用Java6。现在用户已经升级到El Capitan和Java 8。我更改了应用程序的构建过程,使用ant任务创建应用程序包,并且我可以在Java8中成功启动应用程序

然而,资源文件的处理方式似乎已经发生了改变,破坏了我们的应用程序。以前,我们在包中的Contents/Java/resource中有资源文件。我们可以通过URL文件:resource/someFile访问这些资源,但这不再适用于java8

我可以通过将资源目录放在我的类路径上,并使用URL=ClassLoader.getSystemResourceresource/someFile这样的东西来解决这个问题;但是,这仅适用于在Java代码中指定资源位置的实例

我们有许多xml和xsl文件,其中各种文件资源的URL显示为文本属性。在这些实例中的每一个实例中,都会引发异常,因为在resource/someFile中找不到以前的资源

我需要找到一种方法,让应用程序像过去一样,在固定的相对路径上识别这些资源。它不必位于Contents/Java/resource中。我可以将它们复制到任何地方,但我需要能够在编译时将它们的相对位置指定为文本属性


我可以编写Java代码来确定基本资源位置并相应地转换文本文件;但我更愿意找到一种方法,使其与Java 6一样工作。

如果您使用System.out.prinlntnew File..getCanonicalPath或System.printlnSystem.getPropertyuser.dir打印当前运行的上下文,您会发现您的执行上下文是user.home!是的,太棒了,不是吗。所以你知道我们至少有两个选择。将资源放在众所周知的位置库/应用程序支持/{your app}中,或者将资源放在jar中,您可以通过getResource.Thank加载它们。这是从JarBundler到AppBuilder的变化吗?或者苹果开发的JDK与Oracle和OpenJDK版本有什么不同?我认为这是appBundler工作方式的改变,我认为你是对的。我进入了应用程序包中的一个目录,其中有我的资源目录,并使用java-jarpath/to/jar启动了应用程序,成功地访问了资源。所以JVM是好的;它必须是appBundler创建的可执行文件,用于在应用程序包外部设置工作目录。我得假设这是一个bug。当然没有人会故意这么做。我试图创建一个bug报告,但我能找到的唯一Oracle bug跟踪器是针对JDK的,appBundler不适合这些类别。如果你想发布你的评论作为回答,我会接受。不,事实上,从我所读到的来看,这实际上是苹果公司基于应用程序包用于启动JVM/应用程序的库而故意做出的。我认为应用程序绑定器是独立管理的