Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么相同的编码在播放相同的.wav文件时得到不同的结果?_Java_Multithreading_Wav_Audio Player - Fatal编程技术网

Java 为什么相同的编码在播放相同的.wav文件时得到不同的结果?

Java 为什么相同的编码在播放相同的.wav文件时得到不同的结果?,java,multithreading,wav,audio-player,Java,Multithreading,Wav,Audio Player,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 A

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();
    }
}
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();
    }
}
Test22.java如下所示:

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();
    }
}
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”,但在我做了一些毫无意义的修改后,它成功了。我不明白为什么。

“一些没有意义的修改”然后它开始工作了?“没有意义”的奇怪定义!两个文件是否从同一位置启动?怎么用?NPE被扔到哪里?堆栈跟踪?我做了一些类似于将“私有字符串名”更改为“字符串名”的操作,然后又将其更改回来。NPE出现在:Test22$AudioTest.AudioPlay(Test22.java:15)和Test22.run(Test22.java:39)似乎
getResourceAsStream(“audio1.wav”)
没有找到文件-尝试打印
getResource(“audio1.wav”)
返回的值以查看文件的预期位置,我只需打开Test22.java并执行它。现在可以播放audio.wav了。getResourceAsStream(“audio1.wav”)或getResource(“audio1.wav”)都可以工作。我还是不知道为什么?可能是休息了很长时间后,它恢复了-:)