0
import org.jfugue.player.Player;

public class MusicPlayer {
    public static void main(String[] args) {
        TwelveBarBlues twelveBarBlues = new TwelveBarBlues();

        System.out.println("Twelve Bar blues Playing: ");

        Player player = new Player();
        player.play(twelveBarBlues.getPattern());

        }

}

import java.io.IOException;

import org.jfugue.pattern.Pattern;
import org.jfugue.player.Player;
import org.jfugue.theory.ChordProgression;

public class TwelveBarBlues {

private String pattern;

public static void main(String[] args) throws IOException {
    Pattern pattern = new ChordProgression("I IV V")
            .distribute("7%6")
            .allChordsAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0")
            .eachChordAs("$0ia100 $1ia80 $2ia80 $3ia80 $4ia100 $3ia80 $2ia80 $1ia80")
            .getPattern()
            .setInstrument("Acoustic_Bass")
            .setTempo(100);
    new Player().play(pattern);
}

public String getPattern() {
    this.pattern = pattern;
    return pattern;
    }
}

我想在 MusicPlayer 播放十二条蓝音乐代码。但我得到错误代码无法调用“java.lang.CharSequence.length()”,因为当我运行 MusicPlayer MusicPlayer 错误代码时“this.text”为空

4

1 回答 1

0

当您执行 MusicPlayer 时,它会main()在 MusicPlayer 中调用,但main()在 TwelveBarBlues 中永远不会被调用,因此在getPattern()'pattern' 中从未设置过,并且您返回 null。

相反,更改 TwelveBarBlues 以getPattern()返回您当前在 中的模式main()。只需将代码从main()移至getPattern(),然后删除该main()方法,因为您没有将 TwelveBarBlues 作为其自己的程序运行。

或者,main()如果您想将该类用作自己的可执行文件,请保留该方法,但让它调用自己的getPattern()方法。你需要做类似的事情TwelveBarBlues blues = new TwelveBarBlues();然后new Player().play(blues.getPattern());

于 2021-10-21T16:55:30.810 回答