0

クライアントで、シーケンスの次の MIDI に進む前に MIDI ファイルをフェードアウトさせようとしていますが、問題が発生しています。

以下のコードでは、で nullpointerException が発生しますtrack.add。何が間違っているのか疑問に思っていましたか?

私はJavaプログラミングに比較的慣れていないので、回答を具体的にしてください

public void run() {
    active = true
    String s = findcachedir();
    uid = getuid(s);


            if(midiplay)
            {
                /*
                    midi = s + savereq;
                    midiplay = false;
                 */

                midi = s + savereq;
                try {
                    //System.out.println("Play MIDI " + midi);
                    if (musicSr != null)
                    {
                        musicSr.stop();
                        musicSr.close();
                    }
                    musicSr = null;
                    musicS = null;

                    File music = new File(midi);
                    if(music.exists())
                    {
                        musicS = MidiSystem.getSequence(music);
                    }
                    for (int k = 0; k < 16; k++) {
                        musicS.getTracks();
                        track.add(
                                new MidiEvent(
                                        new ShortMessage(
                                                ShortMessage.CONTROL_CHANGE,
                                                k, 
                                                7,
                                                20),
                                                track.getTicks()));
                    }

                        // Create a sequencer for the sequence
                        musicSr = MidiSystem.getSequencer();
                        musicSr.open();
                        musicSr.setSequence(musicS);
                        musicSr.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
                        musicSr.start();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }


                midiplay = false;

            }
            savereq = null;
        }

}


public static Sequencer musicSr = null;
Sequence musicS = null;

` 何らかの理由で必要な場合はクラス全体

http://pastebin.com/6C7GNnib

4

1 に答える 1

1

変数trackが初期化されていないようです。あなたはこのようなことをするべきかもしれません:

private Track track = new Track();

または、ゲッター セッターが実装されている場合は、メソッドtrackを使用する前に値を設定しますadd。何かのようなものsetTrack(trackObj);

于 2013-09-25T18:48:27.483 に答える