1

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

2013 年 7 月 8 日 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 一起工作。

我知道“程序文件”中的空间有问题,我必须在此处设置安装,因为当我将 setup.nsi 脚本中的 InstallDir 值从 $PROGRAMFILES64 更改为 $WINDIR 时,它运行良好。

由于 Program Files 中的空间导致编码问题,是否有人对如何修改我的代码以使其正常工作有任何建议?

4

2 回答 2

1

getResource()返回 a 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

于 2013-08-08T23:19:14.497 回答
0

所以我知道这是一个相当老的线程,但是任何阅读此内容的人,请三思而后行,因为 nsis 打包程序会在运行恶意软件字节、avira、roguekiller、hitman pro 和 stinger 的 PC 上对病毒总数进行扫描时创建此恶意软件。

Antiy-AVL - Trojan/Generic.ASMalwS.3506C16,  Avast-Win64:Malware-gen, AVG - Win64:Malware-gen,  Cyren - W64/Tedy.B.gen!Eldorado, Jiangmin -Trojan.PSW.Python.fv, Zillya -Trojan.Disco.Script.653
于 2022-01-29T07:21:53.537 回答