Java 无法访问在try/catch语句中初始化的变量

Java 无法访问在try/catch语句中初始化的变量,java,nullpointerexception,try-catch,Java,Nullpointerexception,Try Catch,我正在为我的游戏制作一个完善的课程,在不断尝试之后,我似乎无法摆脱NullPointerException。这是因为我无法访问try/catch语句中的变量 代码如下: package util; import java.applet.*; import java.net.URL; public class Sound { private AudioClip audio; private URL file; public Sound(String srcfile)

我正在为我的游戏制作一个完善的课程,在不断尝试之后,我似乎无法摆脱NullPointerException。这是因为我无法访问try/catch语句中的变量

代码如下:

package util;

import java.applet.*;
import java.net.URL;

public class Sound 
{
    private AudioClip audio;
    private URL file;

    public Sound(String srcfile)
    {
        try 
        {
            this.file = new URL(srcfile);
        } 
        catch(Exception e){}

        this.audio = Applet.newAudioClip(file);
    }

    public void Play()
    {
        this.audio.play();
    }

    public void Loop()
    {
        this.audio.loop();
    }

    public void Stop()
    {
        this.audio.stop();
    }

    public AudioClip getAudio() 
    {
        return audio;
    }

    public void setAudio(AudioClip audio) 
    {
        this.audio = audio;
    }
}
以下是错误(不再获取):

我打电话来 Play(); 但是什么也没发生

下面是我调用该方法的方式:

Sound snd = new Sound("res/dev/sound.wav");
snd.Play();

任何帮助都将不胜感激。

从类的设计方式来看,不需要将
文件
变量存在于构造函数之外。像这样的东西可能很有用:

public Sound(String srcfile) {
        try {
            this.audio = Applet.newAudioClip(new URL(srcfile));
        } 
        catch(Exception e){
             //at least print the stack trace
             e.printStackTrace();
             //do some proper exception handling that makes sense for you app!
        }
}

永远不要这样做
catch(异常e){}
。至少记录一下。为什么不把
this.audio=Applet.newAudioClip(文件)放进去呢
try
catch(Exception e){e.printStackTrace();}
中,“发生这种情况是因为我无法访问try/catch语句中的变量。”这实际上毫无疑问是在发生的,因为
新URL(srcfile)
正在引发一个异常,而您的代码正在处理该异常。像其他人建议的那样打印堆栈跟踪,然后我们可以帮助解决实际问题。
Sound snd = new Sound("res/dev/sound.wav");
snd.Play();
public Sound(String srcfile) {
        try {
            this.audio = Applet.newAudioClip(new URL(srcfile));
        } 
        catch(Exception e){
             //at least print the stack trace
             e.printStackTrace();
             //do some proper exception handling that makes sense for you app!
        }
}