Compose Desktop中无法播放音频文件的问题求助
解决Jar包内WAV文件播放的问题
问题根源:File(uri)无法访问Jar包内的资源,因为Jar内的资源并非文件系统中的真实文件,而是Jar归档内的条目,因此不能通过File类直接读取。
以下是可行的解决方法:
直接通过资源流读取(推荐)
利用Compose MultiResources提供的readBytes方法获取资源字节流,无需依赖文件路径:val inputStream = Res.readBytes("files/frog.wav").inputStream() val audioInputStream = AudioSystem.getAudioInputStream(inputStream) val clip: Clip = AudioSystem.getClip() clip.open(audioInputStream) clip.start()通过ClassLoader获取资源流
使用类加载器直接读取Jar内的资源,注意路径需匹配Jar内的实际资源结构:val classLoader = Thread.currentThread().contextClassLoader val resourceStream = classLoader.getResourceAsStream("files/frog.wav") resourceStream?.let { val audioInputStream = AudioSystem.getAudioInputStream(it) val clip: Clip = AudioSystem.getClip() clip.open(audioInputStream) clip.start() }若路径不生效,可根据报错信息调整为
composeResources/romshelper.composeapp.generated.resources/files/frog.wav测试。提取资源到临时文件(适配必须用File的场景)
如果必须使用File对象,可将Jar内的资源复制到临时文件后再读取:val tempFile = File.createTempFile("frog", ".wav") tempFile.deleteOnExit() Res.readBytes("files/frog.wav").inputStream().use { input -> FileOutputStream(tempFile).use { output -> input.copyTo(output) } } val audioInputStream = AudioSystem.getAudioInputStream(tempFile) val clip: Clip = AudioSystem.getClip() clip.open(audioInputStream) clip.start()
内容的提问来源于stack exchange,提问作者NullPointerException
相关产品推荐
相关产品推荐

