java - 使用 nsis 打包应用程序安装程序和 .wav 文件无法播放,因为 Windows 上的路径包含空格 --> Program%20Files

标签 java windows url

我遇到了一个涉及 Windows 安装的 audioInputStream、资源文件夹和 nsis 的问题。我正在开发一个应用程序(在 Linux 中),该应用程序在事件发生时执行桌面通知,并且除了通知弹出时应该播放的 .wav 文件外,一切正常。我已经在 64 位 Windows 计算机上测试了该应用程序,无需通过 nsis 安装它,并且它运行良好。我收到一条错误消息,指出:

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

我正在 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();
    }
    ...

我发现这个博客详细介绍了如何解决极其相似的问题: http://braintwitter.blogspot.ro/2013/03/url-encoding-issue-with-tomcat.html

但它不适用于我正在使用的audioInputStream。

我知道这是“Program Files”中的空间问题,我必须在其中进行安装,因为当我将 setup.nsi 脚本中的 InstallDir 值从 $PROGRAMFILES64 更改为 $WINDIR 时,它工作得很好。

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

最佳答案

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

String filename = this.getClass().getResource("/audio/siren.wav").toURI().getPath();

或者您可以使用 URLDecoder 来解码路径,然后再将其传递到 AudioInputStream:

String filename = this.getClass().getResource("/audio/siren.wav").getPath();
filename = URLDecoder.decode(filename, "utf-8");

请参阅介绍部分末尾的简介 java.net.URL .

关于java - 使用 nsis 打包应用程序安装程序和 .wav 文件无法播放,因为 Windows 上的路径包含空格 --> Program%20Files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137682/

相关文章:

windows - 强制批处理文件对提示回答是

python - Django URL 文件错误

javafx 密码字段文本

java - 主动消费 ActiveMQ 上的消息

java - 使用十六进制值定义枚举内部类

c# - 如何从 C# 调用 C++ DLL 导出函数

运行程序时出现java.lang.NoSuchMethodError

c++ - 窗口不出现

iphone - 在 iPhone 上,如何使用 fileHandle 即时下载 mp3 文件?

wordpress - 如何删除?使用 htaccess 从 url