当前位置: 首页 > 知识库问答 >
问题:

非法参数异常:URI不具有可运行的层次结构。jar文件

淳于典
2023-03-14

我知道这个问题以前已经被问过很多次了,但是我已经从其他的线索中找到了答案,尝试了很多东西,但是找不到任何解决我问题的方法。我有一个在Eclipse中编译和运行的程序,但是当我导出一个runnable时。jar文件,它不会启动。我试着在cmd提示符下运行它,得到了错误非法参数异常:URI in not hierarchical。这发生在一个包含的声音文件中,我把它作为类路径资源。代码如下:

try {
    pop = new File(IntroView.class.getResource("/model/pop.wav")
                .toURI());
} catch (URISyntaxException e1) {
     // TODO Auto-generated catch block
    e1.printStackTrace();
}

据我所知,文件打包到. jar的方式有问题,但我很难理解它。有人能对此有所了解并提供解决方案吗?谢谢。

共有2个答案

孙宏壮
2023-03-14

好吧,我让它工作了,但这不是一个理想的解决方案。我最后做的是在项目中创建一个文件夹,但在源代码之外。所以之前,资源都在

Project/src/Model/pop.wav

现在他们在

Project/Resources/pop.wav

然后我就这样

pop = new File("Resources/pop.wav");

因此,就目前情况而言,它仍然只在从IDE启动时有效,但我所做的是在与相同的文件夹中添加一个新文件夹。jar正在运行,其中包含所有相同的资源文件。文件引用查找pop。wav相对于运行该程序的任何目录(无论是在IDE中还是从.jar运行),因此它会在这个新文件夹中找到文件,并且工作正常。我不觉得这是最漂亮的解决方案,但不管怎样它还是有效的。

尹雅健
2023-03-14

很抱歉,您似乎无法从JAR中表示文件对象。当使用文件对象定位文件时,它只检查操作系统目录结构中的文件。File对象可以在目录中定位JAR本身,但不能定位其中的内容。

您可以将InputStream发送到JAR中的文件,如下所述:

InputStream input = PlaySound.class.getResourceAsStream("Kalimba.mp3");

你可以有以下选择:

  1. 从JAR读取文件并将其写入目录之外,然后获取文件对象。
  2. 将JAR解压缩到一个文件夹,并用文件指向该文件夹。
  3. 只需获取输入流并播放文件,如下所示:如何在Java中播放声音?
 类似资料:
  • 我想知道如何在Eclipse中的源代码包(即/src/resources/images/或/resources/images/)内部或外部的资源文件夹中创建一个具有资源(图片、PDF)的可运行JAR。目前,我的资源在我的eclipse项目的source文件夹中,但我也在包中的它自己的文件夹中尝试过。该程序在eclipse中构建和执行得很好,但当我将其导出为可运行的jar时,在桌面上运行时,我总是得

  • 我正在处理一个非常简单的point类,但我得到了一个错误,我无法确定字符串/双值问题发生的位置或如何修复它。 编辑 我忘记添加我正在接收的错误:

  • 问题内容: 您认为可以在异常内使用错误代码来指定错误类型吗?请看下面的代码: 我知道在此示例中使用枚举而不是字符串会更好,但是我实际上担心错误代码的概念。您认为在这里异常层次结构会更好吗?我找不到任何权威来源指出异常中的错误代码是反模式的。谢谢。 问题答案: 如果您想根据导致异常(无效名称或无效ID)的原因做出不同的响应(在代码中),那么我建议您使用不同的异常。 如果不是,那么您甚至不需要该方法,

  • 问题内容: python中的any命令行选项可以打印异常/错误类层次结构吗? 输出应类似于http://docs.python.org/2/library/exceptions.html#exception- hierarchy 问题答案: 检查模块可能会有所帮助,特别是getclasstree()函数: 将给定的类列表排列为嵌套列表的层次结构。在出现嵌套列表的地方,它包含派生自该类的类,这些类的

  • 问题内容: 我正在Ubuntu 16.04上使用最新版本的Elasticsearch,但在将数据放到上面时遇到了一个小问题。 这是我的json文档(相关部分) 这是当我尝试“ PUT http:// localhost:9200 / aws ” 时从ES返回的响应 在我看来,ES认为“ clockSpeed”是某种设置…?我希望使用动态映射来加快此过程,而不是先映射所有文档,然后将其导入ES。 有

  • null 每个表中的主键是数据库。它是一个内部ID,没有业务意义。使用它作为资源的默认URI是否正确? 每个对象都有自己的一组唯一键。例如,可以通过他的、或来标识。每个客户端只有这些密钥的子集。我应该为每个键定义一个子资源,还是提供一个将返回正确URI的查找服务? 我在问什么是真正的RESTful方式,什么是最佳实践。我还没找到合适的答案。