java - 在程序开始之前珠子 NullPointerException?

标签 java nullpointerexception processing

我正在使用 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/

相关文章:

java - 解密Android RSA : Invalid Ciphertext Exception

java - 级联多对多关系时更新错误

Java Spring 工作流程

java - 我正在尝试将值插入 MySQL 数据库,但出现 NullPointerException

java - 如何在处理过程中挤出复杂的 SVG

java - 无法让谷歌教程工作

java - 程序与 CountDownTimer 配合得很好,直到还剩 3 秒,然后它调用两次

java - 何时为构造函数抛出异常

javascript - 如何解决处理中的这些问题?

java - 为什么我损坏的缓冲区以 8x8 像素的 block 出现?