Почему одна и та же кодировка дает другой результат при воспроизведении одного и того же файла .wav? - PullRequest
0 голосов
/ 07 марта 2020

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", но после того, как я сделал какую-то модификацию, не имеющую смысла, это сработало. Я не могу понять почему.

...