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文件,而不是Beads不能容忍的WAV文件。我将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 - 如何使用 REST API 解析具有特定标签服务器的现有 XML 文档

java - 如何更改 wsimport 生成的文件的编码?

java - 在Samsung Galaxy I7500 Android手机上进行调试

java - NullPointerException 使用链表时出错

android - 更新到 Android 设计支持 22.2.1 后出现 Nullpointer 异常

java - NullPointerException : JSON Parsing in JAVA using GSON

java - 如何将类作为函数参数传递

java - Akka 持久性 : Issue starting PersistentActor: java. lang.IllegalArgumentException : Default journal plugin is not configured, 请参阅 'reference.conf'

java - 如何使我的玩家沿对角线和水平线移动

enums - token “{”,@应该在枚举中此 token 之后用于处理2.2.1