我在使用Java播放MIDI文件时遇到了一些麻烦.我得到的是MidiUnavailableException (MIDI OUT transmitter not available)当我尝试播放时.我的代码是标准的:
try {
    midiseq = MidiSystem.getSequencer();
    midiseq.open();
    midiseq.setSequence(MidiSystem.getSequence(sound1));
    midiseq.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
    midiseq.start();
} catch (Exception e) {e.printStackTrace();}
Run Code Online (Sandbox Code Playgroud)
midiseq是一个Sequencer; sound1是一个InputStream.
此代码可以在其他几台计算机上运行,甚至可以在Eclipse中使用,当在JAR文件中使用时,只是在我从命令提示符启动它时.我已经下载了一个更稳定的Java midi应用程序,它也引发了同样的异常.
它不能成为硬件问题,因为Eclipse可以毫无问题地运行它,也不会成为编码问题,因为它在其他计算机上运行正常.即使这一行代码抛出此异常:
javax.sound.midi.MidiSystem.getSequencer();
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:我的操作系统是Windows Vista.在我问这个问题之前,我已经下载了最新的JRE和JDK(我认为是1.6.0_13).
编辑:代码:
ClassLoader.getSystemClassLoader().loadClass("com.sun.media.sound.RealTimeSequencer");
System.out.println( "Sequencer class loaded" );// Otherwise ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)
打印"已加载Sequencer类".
但是这段代码:
  try{
        System.out.println(javax.sound.midi.MidiSystem.getSequencer());
        System.exit(0);
      } catch(Exception e) {
        throw new RuntimeException(e);
      }
      System.exit(1);
Run Code Online (Sandbox Code Playgroud)
扔了 MidiUnavailableException.
此外,这段代码:
    MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo();
    if (devices.length == 0) {
        System.out.println("No MIDI devices found");
    } else {
        for (MidiDevice.Info dev : devices) {
            System.out.println(dev);
        }
    }
Run Code Online (Sandbox Code Playgroud)
给我这个:
    Microsoft MIDI Mapper
    Microsoft GS Wavetable Synth
    Real Time Sequencer
    Java Sound Synthesizer
    有没有可能和权限有关系?如果您以与普通命令行程序不同(权限更高)的用户身份运行 JAR 文件,则可能可以解释其中的差异。如果不是这样,也许是一些 Java 系统属性...我想不出还有什么其他东西可以在将相同的代码作为 JAR 文件或单独的 .class 文件运行之间产生区别。
如果您编辑问题以提供有关运行程序的不同方式的更多详细信息,可能会有所帮助。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5102 次  |  
        
|   最近记录:  |