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

jar的Url问题

方光华
2023-03-14

抱歉,如果在西班牙语中“no existe el archivo o el directorio”表示“不存在这样的文件或目录”。

/home/user1/netbeansprojects/project1/dist/project1.jar!/music/2.wav线程“thread-0”java.lang.illegalstateexception:java.io.fileNotFoundException://home/user1/netbeansprojects/project1/dist/project1.jar!/music/2.wav(No existe el archivo o el directorio)在logic.audiofileplayer.run(audiofileplayer.java:54)上的directorio)在java.io.fileInputStream.open(本机方法)在java.io.fileInputStream.(fileInputStream.java:146)在com.sun.media.sound.waveFloatFileReader.getAudioInputStream(waveFloatFileReader.java:164)在javax.sound.sampled.audioSystem.getAudioInputStream(audioSystem.java:1179)在logic.audioFilePlayer.run(

代码如下:

boolean loop = true;
private final URL url = getClass().getResource("/music/2.wav");
private final String convertFilePath = url.toString();
String filePath = convertFilePath.substring(convertFilePath.lastIndexOf("file:") + 5);

@Override
public void run() {
    while (loop == true) {
        final File file = new File(filePath);
        System.out.println(filePath);
        try (final AudioInputStream in = getAudioInputStream(file)) {

            final AudioFormat outFormat = getOutFormat(in.getFormat());
            final Info info = new Info(SourceDataLine.class, outFormat);

            try (final SourceDataLine line
                    = (SourceDataLine) AudioSystem.getLine(info)) {

                if (line != null) {
                    line.open(outFormat);
                    line.start();
                    stream(getAudioInputStream(outFormat, in), line);
                    line.drain();
                    line.stop();
                }
            }

        } catch (UnsupportedAudioFileException | LineUnavailableException | IOException e) {
            throw new IllegalStateException(e);
        }
    }
}

private AudioFormat getOutFormat(AudioFormat inFormat) {
    final int ch = inFormat.getChannels();
    final float rate = inFormat.getSampleRate();
    return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
}

private void stream(AudioInputStream in, SourceDataLine line)
        throws IOException {
    final byte[] buffer = new byte[4096];
    for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
        line.write(buffer, 0, n);
    }
}

共有1个答案

万俟嘉珍
2023-03-14

在使用JAR时,您应该处理jar:fileURL,而不是自己操作它并尝试创建file对象。如果构造函数支持,则应将从getresource获得的URL直接传递给构造函数。

// get the URL of the file as usual
URL url = getClass().getResource("/music/2.wav");

// get stream directly from URL, which could be a file or a jar:file
AudioInputStream in = getAudioInputStream(url);

如果这不起作用,并且库可以接受输入流,那么可以尝试使用ClassLoader#GetResourceAsstream并将其传递给适当的构造函数/方法。

否则,您可以尝试将文件解压缩到本地的某个位置,然后传递该文件的路径。

 类似资料:
  • 问题内容: 我正在尝试使用ABAP函数调用将j2ee应用程序与SAP连接。当我将其作为带有热编码值的eclipse中的单个类运行时,它可以正常工作。当我尝试在JBoss服务器中运行它时,从前端获取一些值并将其传递给与我之前引用的类相同的java类,它显示以下异常 我在F:/ jar中有我的sapjco3.jar,在这里我也有ejb3-persistence.jar,jboss- ejb3x.jar

  • 问题内容: 我可能尝试过,没有用。 该文件是: 是软件包的名称。 当我位于包含build.xml的项目中时,我启动了ant 这是我测试过的代码: 我制定了一份遗嘱,有或没有,有或没有 希望有人能帮助我。 谢谢 问题答案: 如果您具有以下包装布局 那么以下应该工作 使用时,您需要传递资源的完整合格名称,即包括程序包名称。 当使用时,路径-如果不是以- 开头,则是相对于试图加载资源的类所在的包的路径,

  • URL格式 ThinkCMF5采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF5的 URL 是不区分大小写的,如: http://localhost/index

  • URL格式 ThinkCMF6.0采用的是混合模式路由,也就是说同时支持路由和PATH_INFO方式; 如果没有设置路由规则,默认就采用PATH_INFO方式,URL 格式如下: http://yourServerName/index.php(或其它入口文件)/应用/控制器/操作/[参数名/参数值...] URL大小写 ThinkCMF的 URL 是不区分大小写的,如: http://local

  • URL设计 ThinkPHP5.1在没有定义路由的情况下典型的URL访问规则是: http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...] 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: >php.exe index.php(或者其它应用入口文件) 模块/控制器/操作/[参数名/参数值…] 可以看到,无论是URL访问

  • 清单在一行上只包含版本,然后在一行上包含主类属性,然后是2个空行 所有依赖项都位于相对于jar的/lib文件夹中,因此清单中没有指定类路径 在zip文件程序中打开jar显示文件夹,其中包含文件,因此限定名反映在jar结构中。资本化也是正确的。 罐子结构: 清单文件: