Java 使用nsis打包应用程序安装程序和.wav文件不会播放,因为Windows上的路径包含空格-->;程序%20个文件
我遇到了一个问题,涉及到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进行构建。下面是我如何加载路径的代码片段: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
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");
有关详细信息,请参阅简介部分末尾的简介