Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
Java 使用nsis打包应用程序安装程序和.wav文件不会播放,因为Windows上的路径包含空格-->;程序%20个文件_Java_Windows_Url - Fatal编程技术网

Java 使用nsis打包应用程序安装程序和.wav文件不会播放,因为Windows上的路径包含空格-->;程序%20个文件

Java 使用nsis打包应用程序安装程序和.wav文件不会播放,因为Windows上的路径包含空格-->;程序%20个文件,java,windows,url,Java,Windows,Url,我遇到了一个问题,涉及到audioInputStream、资源文件夹和Windows安装的NSI。我正在开发一个应用程序(在Linux中),它可以在事件发生时执行桌面通知,并且除了弹出通知时应该播放的.wav文件之外,其他一切都正常工作。我在一台64位Windows机器上测试了这个应用程序,没有通过nsis安装,它工作得非常好。我收到一条错误消息,指示: 07/08/13 12:17:26错误[Thread-2](DesktopNotifierMessageAlertHandler.java:7

我遇到了一个问题,涉及到audioInputStream、资源文件夹和Windows安装的NSI。我正在开发一个应用程序(在Linux中),它可以在事件发生时执行桌面通知,并且除了弹出通知时应该播放的.wav文件之外,其他一切都正常工作。我在一台64位Windows机器上测试了这个应用程序,没有通过nsis安装,它工作得非常好。我收到一条错误消息,指示:

07/08/13 12:17:26错误[Thread-2](DesktopNotifierMessageAlertHandler.java:73)com.alcatel.proserv.e911.desktopNotifierMessageHandler.desktopNotifierMessageHandler.DesktopNotifierMessageAlertHandler-错误:java.io.FileNotFoundException:C:\Program%20Files\alcatel-Lucent\E911DesktopNotifier\classes\audio\siren.wav(法国化学研究所(Le chemin d'accès spécifiéest Introvable)

我正在使用Netbeans并使用maven进行构建。下面是我如何加载路径的代码片段:

    String filename = this.getClass().getResource("/audio/siren.wav").getPath();
    AudioInputStream audioInputStream = null;
    try{
    audioInputStream = AudioSystem.getAudioInputStream(new File(filename).getAbsoluteFile());
    Clip clip = null;           
clip = AudioSystem.getClip();       
clip.open(audioInputStream);        
    clip.start();
    }
    ...
我发现这个博客详细介绍了如何解决一个非常类似的问题:

但是我正在使用的音频输入流没有成功

我知道“Program Files”(程序文件)中的空间有问题,我必须在其中设置安装,因为当我将setup.nsi脚本中的InstallDir值从$PROGRAMFILES64更改为$WINDIR时,它工作得非常好

由于程序文件中的空格导致了编码问题,有人对如何修改代码以使其正常工作有什么建议吗?

getResource()
返回一个
URL
,并且它在此处应用了URL编码。您有两个选项。您可以转换为
URI

String filename = this.getClass().getResource("/audio/siren.wav").toURI().getPath();
或者,您可以使用
urldecker
对路径进行解码,然后再将其传递给您的
AudioInputStream

String filename = this.getClass().getResource("/audio/siren.wav").getPath();
filename = URLDecoder.decode(filename, "utf-8");
有关详细信息,请参阅简介部分末尾的简介。

getResource()
返回一个
URL
,并在此处应用了URL编码。您有两个选项。您可以转换为
URI

String filename = this.getClass().getResource("/audio/siren.wav").toURI().getPath();
或者,您可以使用
urldecker
对路径进行解码,然后再将其传递给您的
AudioInputStream

String filename = this.getClass().getResource("/audio/siren.wav").getPath();
filename = URLDecoder.decode(filename, "utf-8");
有关详细信息,请参阅简介部分末尾的简介