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