我正在使用 Beads 库在 Processing 中编写一个随机循环播放器并导入一些我自己的循环。每次运行代码时,都会出现 NullPointerException。这些文件与草图位于同一目录中,并且所有文件名拼写正确。我尝试过使用内部调试器,但它总是会中断,即使我在第一行设置断点也是如此。 (我也尝试过重新启动,希望能解决这个问题。但没有。)
这是我的代码(不是全部,只是相关的内容)。类名称为 Randomiser。
import beads.*;
import org.jaudiolibs.beads.*;
import java.util.Random;
// samples
SamplePlayer rhythm1;
SamplePlayer rhythm2;
SamplePlayer rhythm3;
SamplePlayer rhythm4;
SamplePlayer currentRhythm;
//files
String r1file;
String r2file;
String r3file;
String r4file;
//arrays
ArrayList rhythmArray;
AudioContext ac; // to hear output
Gain gain; // to change volume
void setup() {
size(300, 300);
background(255);
r1file = sketchPath("") + "Rhythm1_80BPM.wav";
r2file = sketchPath("") + "Rhythm2_80BPM.wav";
r3file = sketchPath("") + "Rhythm3_80BPM.wav";
r4file = sketchPath("") + "Rhythm4_80BPM.wav";
// set up arrays
rhythmArray = new ArrayList<SamplePlayer>();
try {
rhythm1 = new SamplePlayer(ac, new Sample(r1file));
rhythm2 = new SamplePlayer(ac, new Sample(r2file));
rhythm3 = new SamplePlayer(ac, new Sample(r3file));
rhythm4 = new SamplePlayer(ac, new Sample(r4file));
}
catch(IOException e) {
e.printStackTrace();
exit();
}
//instantiate arraylists
rhythmArray.add(rhythm1);
rhythmArray.add(rhythm2);
rhythmArray.add(rhythm3);
rhythmArray.add(rhythm4);
}
void draw() {
button();
}
void mouseClicked() {
if (mouseX>113 && mouseX<193 && mouseY>140 && mouseY<220) randomise();
}
这是堆栈跟踪。
java.lang.NullPointerException
at beads.UGen.setOutsToPause(Unknown Source)
at beads.UGen.pause(Unknown Source)
at beads.Static.<init>(Unknown Source)
at beads.SamplePlayer.<init>(Unknown Source)
at beads.SamplePlayer.<init>(Unknown Source)
at Randomiser.setup(Randomiser.java:81)
at processing.core.PApplet.handleDraw(PApplet.java:2425)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
感谢您的帮助!!
最佳答案
所以,我找到了我的问题。
首先,我的 AudioContext 没有在 setup() 函数中初始化,这让编译器感到困惑,因为当我在 setup() 中初始化 r1file、r2file、r3file 和 r4file 时,它引用了 ac。我通过将 ac 初始化移至 setup() 函数的开头来修复此问题。
其次,我使用的是 MP3 文件,而不是 WAV 文件,这是 Beads 无法容忍的。我将 MP3 转换为 WAV 并再次导入,完全解决了问题。
除了本节之外,setup() 函数中的所有内容都是相同的:
void setup() {
ac = new AudioContext();
size(300, 300);
background(255);
r1file = sketchPath("") + "Rhythm1_80BPM.wav";
r2file = sketchPath("") + "Rhythm2_80BPM.wav";
r3file = sketchPath("") + "Rhythm3_80BPM.wav";
r4file = sketchPath("") + "Rhythm4_80BPM.wav";
关于java - 在程序开始之前珠子 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004797/