Java 线程和阵列索引边界外异常

Java 线程和阵列索引边界外异常,java,Java,因此,我在年学习Java线程,并在课堂上重温了我们的一个老课程,在那里我们创建了声音。每当我运行程序时,我的线程上都会出现ArrayIndexOutOfBoundsException:2730。这是我在课堂上的代码 public class ThreadA implements Runnable { private Thread t; private String threadName; public ThreadA(String name) { threadName = name;

因此,我在年学习Java线程,并在课堂上重温了我们的一个老课程,在那里我们创建了声音。每当我运行程序时,我的线程上都会出现ArrayIndexOutOfBoundsException:2730。这是我在课堂上的代码

public class ThreadA implements Runnable {
private Thread t;
private String threadName;

public ThreadA(String name) {
    threadName = name;
    System.out.println("Creating " + threadName);
}

public void run() {
    try {
        if(threadName.equalsIgnoreCase("Thread 1")){
           for(int i = 0; i < 2; i++) {
              Beeper.beep(200,800) //this is a call to the Beeper Class, its useless for this examples
            }
          }
        if(threadName.equalsIgnoreCase("Thread 2")){
            for(int i = 0; i < 2; i++) {
                Beeper.beep(233, 800); //line 37, where the error is
            }
        }
    catch (InterruptedException e){
        System.out.println("Thread " + threadName + " interrupted");
    }
      System.out.println("Thread " + threadName + " exiting");
}
 public void start(){
    System.out.println("Starting " + threadName);
    if(t == null){
        t = new Thread(this, threadName);
        t.start();
    }
}
线路传呼机:88-传呼机:89为

buffer[bufferSize++] = (byte) s;
buffer[bufferSize++] = (byte) (s >> 8);   // little Endian

我想出来了。蜂鸣器类已经创建了数组,第二个线程试图创建一个新数组。谢谢你的帮助@Ken White

我所做的只是创建了一个新的Beeper子类

if (threadName.equalsIgnoreCase("Thread 2")) {
            Beeper beep2 = new Beeper1();
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            beep2.sleep(1600);
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            Thread.sleep(50);
        }

感谢大家的帮助

什么是
蜂鸣器
?您正在创建一个
线程
,作为已扩展
线程
的类中的类变量。这是没有意义的。ArrayIndexOutOfBounds意味着您已经跑过了数组的末尾,代码试图访问的值位于索引2730处。错误发生在第88行的Beeper.java中。使用调试器找出当索引不存在时为什么要访问该索引。我的错是,我想实现Runnable。Beeper是一个以相同频率播放声音的类,89处的类显示此缓冲区[bufferSize++]=(字节)(s>>8)。我不知道那是什么
if (threadName.equalsIgnoreCase("Thread 2")) {
            Beeper beep2 = new Beeper1();
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            beep2.sleep(1600);
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(294, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(262, 400);
            beep2.beep(233, 800);
            beep2.beep(262, 800);
            beep2.beep(294, 800);
            Thread.sleep(50);
        }