Java如何获取所有MIDI设备列表?现有代码无法运行求解决方案
Java获取所有MIDI设备的实现方案
原代码核心问题
- 类型误用:错误将静态工具类
MidiSystem的实例强转为MidiDevice、List<MidiDevice>类型,二者没有继承关系,运行时必然抛出类型转换异常 - 多余实现:不需要自定义实现
MidiDeviceProvider、MidiDeviceReceiver接口,javax.sound.midi包已经封装了设备枚举的原生能力 - 逻辑错误:获取设备列表不需要实例化接收者,直接调用
MidiSystem的静态方法即可
正确实现代码
package com.example.cmmp.midi; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Sequencer; import java.util.ArrayList; import java.util.List; public class MidiDeviceReceiver { public static Sequencer getSequencer() throws MidiUnavailableException { return MidiSystem.getSequencer(); } public static List<MidiDevice> getMidiDevices() { List<MidiDevice> deviceList = new ArrayList<>(); // 直接获取所有已识别的MIDI设备信息 MidiDevice.Info[] allDeviceInfo = MidiSystem.getMidiDeviceInfo(); for (MidiDevice.Info info : allDeviceInfo) { try { MidiDevice device = MidiSystem.getMidiDevice(info); deviceList.add(device); // 如果需要使用设备可以在这里调用device.open(),用完记得调用close()释放资源 } catch (MidiUnavailableException e) { // 设备被占用时按需处理,这里仅打印日志 e.printStackTrace(); } } return deviceList; } }
遍历设备示例
拿到返回的List<MidiDevice>后即可遍历读取设备详情:
public static void main(String[] args) { List<MidiDevice> devices = getMidiDevices(); for (MidiDevice device : devices) { MidiDevice.Info info = device.getDeviceInfo(); System.out.println("设备名称:" + info.getName()); System.out.println("设备厂商:" + info.getVendor()); System.out.println("设备描述:" + info.getDescription()); System.out.println("---------------"); } }
内容的提问来源于stack exchange,提问作者ColurMine
相关产品推荐
相关产品推荐

