Java 通过get.LineIn和Minim记录样本时出现空指针异常

Java 通过get.LineIn和Minim记录样本时出现空指针异常,java,processing,Java,Processing,目前,我正在学习使用。到目前为止,这本书很棒!但现在我要学习第11章的教程:使用Minim库录制音频 使用下面的代码,正如书中所解释的,当我试图通过按左键或右键记录样本时,会出现空指针异常。我很想知道这里出了什么问题。我很难解决这个问题。我肯定这很简单,但我就是看不出来。本章有一些示例代码可供下载,但不包括此特定草图 谢谢你的帮助 以下是空指针代码(经过编辑,包含了一些我之前没有包含的行,因为它们似乎没有导致草图崩溃): 这是我用来画草图的代码: import ddf.minim.*; Min

目前,我正在学习使用。到目前为止,这本书很棒!但现在我要学习第11章的教程:使用Minim库录制音频

使用下面的代码,正如书中所解释的,当我试图通过按左键或右键记录样本时,会出现空指针异常。我很想知道这里出了什么问题。我很难解决这个问题。我肯定这很简单,但我就是看不出来。本章有一些示例代码可供下载,但不包括此特定草图

谢谢你的帮助

以下是空指针代码(经过编辑,包含了一些我之前没有包含的行,因为它们似乎没有导致草图崩溃):

这是我用来画草图的代码:

import ddf.minim.*;

Minim minim;
AudioInput mic;
AudioRecorder left;
AudioRecorder right;
AudioSample Pright;
AudioSample Pleft;

void setup(){
  size(800,900);
  minim = new Minim(this);
  mic = minim.getLineIn();
  right = minim.createRecorder(mic,"data/right.wav");
  left = minim.createRecorder(mic, "data/left.wav");
};

void draw(){

};

void keyPressed(){

  //begin left record
  if(keyCode == LEFT){
    if(left.isRecording()){
      left.endRecord();
      left.save();
    }
    else{
      left.beginRecord();
    };
  };

  //begin right record
  if(keyCode == RIGHT){
    if(right.isRecording()){
      right.endRecord();
      right.save();
    }
    else{
      right.beginRecord();
    };
  };

  //play the right sample
  if(keyCode == UP){
    Pright = minim.loadSample("right.wav");
    Pright.trigger();
  };

  //play the left sample
  if(keyCode == DOWN){
    Pleft = minim.loadSample("left.wav");
    Pleft.trigger();
  };

};

好吧,在做了一点手脚之后,我终于解决了这个问题。谢谢你在对我的问题的评论中的提示,他们促使我进一步调查

在本书中,它要求您将此作为一个新的草图开始。但是,启动新草图时,处理不会自动创建“数据”文件夹。只有通过“草图>添加文件”将文件添加到草图时,才会创建数据文件夹

void setup(){
  size(800,900);
  minim = new Minim(this);
  mic = minim.getLineIn();
  right = minim.createRecorder(mic,"data/right.wav");
  left = minim.createRecorder(mic, "data/left.wav");
};
在上面的代码中,“right”和“left”对象无处保存.wav文件。我手动添加了一个数据文件夹,嘿,普雷斯托,它可以工作

在我开始工作后,出现了另一个错误:

  //play the right sample
  if(keyCode == UP){
    Pright = minim.loadSample("right.wav");
    Pright.trigger();
  };

  //play the left sample
  if(keyCode == DOWN){
    Pleft = minim.loadSample("left.wav");
    Pleft.trigger();
  };
如果在录制样本之前按向上键或向下键,则程序会崩溃,因为没有可播放的文件。添加一个布尔值使我能够编写一个更具体的“if”语句,使程序仅在记录了一个文件时才尝试播放该文件

请参阅下面的完整代码。我希望通过这本书学习处理的其他人会觉得这很有帮助。非常感谢你的帮助

import ddf.minim.*;

Minim minim;
AudioInput mic;
AudioRecorder left;
AudioRecorder right;
AudioSample Pright;
AudioSample Pleft;
boolean leftRecorded;
boolean rightRecorded;

void setup(){
  size(800,900);
  minim = new Minim(this);
  mic = minim.getLineIn();
  right = minim.createRecorder(mic,"data/right.wav");
  left = minim.createRecorder(mic, "data/left.wav");
};

void draw(){
;
};

void keyPressed(){

  //begin left record
  if(keyCode == LEFT){
    if(left.isRecording()){
      left.endRecord();
      left.save();
      leftRecorded = true;
    }
    else{
      left.beginRecord();
    };
  };

  //begin right record
  if(keyCode == RIGHT){
    if(right.isRecording()){
      right.endRecord();
      right.save();
      rightRecorded = true;
    }
    else{
      right.beginRecord();
    };
  };

  //play the right sample
  if(keyCode == UP && rightRecorded){
    Pright = minim.loadSample("right.wav");
    Pright.trigger();
  };

  //play the left sample
  if(keyCode == DOWN && leftRecorded){
    Pleft = minim.loadSample("left.wav");
    Pleft.trigger();
  };

};

你能发布你的完整堆栈跟踪吗?我们需要知道你的草图哪一行抛出了NPE。看起来你复制堆栈跟踪时可能已经切断了该部分。让我随便猜一猜。Pright=最小载荷样本(“右波”);这一行找不到声音文件,因为您没有给出完整路径?@Max正在处理。它有一个草图目录,你通常不会给它完整的路径。@KevinWorkman谢谢你的回复。我已经编辑了问题,将所有信息都包含在控制台窗口中。===JavaSound最小错误===部分似乎不是导致崩溃的原因,因此没有包括。顺便说一句,你对其他问题的回答在学习过程中对我很有帮助,对此我非常感谢。干杯@Dazak非常感谢这个非常有用的链接。我将花一些时间来研究它,以便我能完全理解,但它看起来很可能解决我的问题。我一弄明白就回来。干杯
import ddf.minim.*;

Minim minim;
AudioInput mic;
AudioRecorder left;
AudioRecorder right;
AudioSample Pright;
AudioSample Pleft;
boolean leftRecorded;
boolean rightRecorded;

void setup(){
  size(800,900);
  minim = new Minim(this);
  mic = minim.getLineIn();
  right = minim.createRecorder(mic,"data/right.wav");
  left = minim.createRecorder(mic, "data/left.wav");
};

void draw(){
;
};

void keyPressed(){

  //begin left record
  if(keyCode == LEFT){
    if(left.isRecording()){
      left.endRecord();
      left.save();
      leftRecorded = true;
    }
    else{
      left.beginRecord();
    };
  };

  //begin right record
  if(keyCode == RIGHT){
    if(right.isRecording()){
      right.endRecord();
      right.save();
      rightRecorded = true;
    }
    else{
      right.beginRecord();
    };
  };

  //play the right sample
  if(keyCode == UP && rightRecorded){
    Pright = minim.loadSample("right.wav");
    Pright.trigger();
  };

  //play the left sample
  if(keyCode == DOWN && leftRecorded){
    Pleft = minim.loadSample("left.wav");
    Pleft.trigger();
  };

};