java - 无法从 jar 读取输入

标签 java

当我运行java -jar MidiTest.jar时,输入MIDI文件,它会抛出:

Exception in thread "main" java.lang.NullPointerException
        at com.sun.media.sound.StandardMidiFileReader.getSequence(StandardMidi
leReader.java:209)
        at javax.sound.midi.MidiSystem.getSequence(MidiSystem.java:802)
        at MidiTest.playMidi(MidiTest.java:56)
        at MidiTest.(MidiTest.java:44)
        at MidiTest.main(MidiTest.java:25)

If I use java MidiTest instead it could play without issue. What wrong with the code? I have already add Main-Class: MidiTest with newline on Manifest file

My code:

        private void playMidi() {
    if(isPlaying.equals("0")) {
        try {
            song = MidiSystem.getSequence(
                getClass().getResource(filename));
            sequencer = MidiSystem.getSequencer();
            sequencer.setSequence(song);
            sequencer.open();
            sequencer.addMetaEventListener(this);
            sequencer.start();
        } catch (InvalidMidiDataException e) {
            System.out.println("Bad midi file: "
                + filename);
            System.exit(1);
        } catch (MidiUnavailableException e) {
            System.out.println("No sequencer available");
            System.exit(1);
        } catch (IOException e) {
            System.out.println("Could not read: "
                + filename);
            System.exit(1);
        }
        displayMidiInfo(filename);
        } else {
        updateTempoFactor(speed);
        }
    }

最佳答案

您似乎没有检查您尝试获取的资源是否返回非空值。具体来说:

song = MidiSystem.getSequence(
    getClass().getResource(filename));

导致了这个特殊问题。可能还有一个更深层次的问题,那就是除非 filename 表示的资源实际上位于 jar 中、类路径上或与 jar 文件 getResource()< 位于同一目录中 不会找到它。如果您尝试访问通用文件系统中任何位置的文件(而不是 jar 文件中),那么您应该使用 File:

song = MidiSystem.getSequence(new File(filename));

关于java - 无法从 jar 读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029653/

相关文章:

java - 列表作为键值存储的键

java - 将 2D 屏幕坐标取消投影到 3D 世界坐标

java - Mat 到 Byte[] 的转换在 Java 中不起作用

java - 可移植地查找 Java 类

java - Spring如何处理文件保存

java - 比较java中的utf-8字符串

java - 为什么一个采用可变参数的方法只有在它是静态的情况下才能被优化为一系列单态调用?

java - 如何在java中获取类注释?

java - java中catch与catch并重新抛出异常之间的区别?

java - JTextPane最后一行字体较小