Test21. java работает нормально. Я скопировал Test21. java в Test22. java, только изменив все «Test21» на «Test22», а затем выполнил его, я получил «java .lang.NullPointerException». Test21 указан ниже:
import java.io.IOException;
import javax.sound.sampled.*;
public class Test21 extends Thread {
private String name;
class AudioTest {
public void AudioPlay() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("audio1.wav"));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(10);
while (clip.isRunning())
Thread.sleep(10);
clip.close();
} catch (Exception e)
{
e.printStackTrace();
System.out.println(e);
}
System.out.println("done");
}
}
AudioTest au1 = new AudioTest();
public Test21(String name) {
this.name = name;
}
public void run() {
try {
if (au1!=null) {au1.AudioPlay();}
System.out.println(name);
}finally{}
}
public static void main(String[] args) {
Thread t1 = new Test21("First Thread");
Thread t2 = new Test21("Second Thread");
t1.start();
t2.start();
}
}
Test22. java указан ниже:
import java.io.IOException;
import javax.sound.sampled.*;
public class Test22 extends Thread {
private String name;
class AudioTest {
public void AudioPlay() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("audio1.wav"));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(10);
while (clip.isRunning())
Thread.sleep(10);
clip.close();
} catch (Exception e)
{
e.printStackTrace();
System.out.println(e);
}
System.out.println("done");
}
}
AudioTest au1 = new AudioTest();
public Test22(String name) {
this.name = name;
}
public void run() {
try {
if (au1!=null) {au1.AudioPlay();}
System.out.println(name);
}finally{}
}
public static void main(String[] args) {
Thread t1 = new Test22("First Thread");
Thread t2 = new Test22("Second Thread");
t1.start();
t2.start();
}
}
Изначально Test21. java также получил "java .lang.NullPointerException", но после того, как я сделал какую-то модификацию, не имеющую смысла, это сработало. Я не могу понять почему.