【问题标题】:Locating Files In Java Code在 Java 代码中定位文件
【发布时间】:2013-02-09 04:01:34
【问题描述】:

我正在尝试制作一个播放声音的简单应用程序。我的 java 项目中有一个名为 sound.wav 的声音文件(使用 eclipse btw)。我不确定如何导航到声音文件。问题是我不知道如何通过代码导航到声音文件。我现在运行的会引发空指针异常,即。该文件不存在。到目前为止,这是我的代码:

    private static Sound sound;

public static void main(String[] args) {
    JFrame j = new JFrame("Sound");
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    j.setSize(300, 150);
    sound = new Sound("/Users/Chris/Desktop/Workspace/Sound/sound.wav");
            //this is the problem line
    JButton play = new JButton("Play");
    play.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            sound.play();               
        }

    });

    j.add(play,BorderLayout.SOUTH);
    j.setVisible(true);
}

这是我的声音类的代码:

    private AudioClip clip;

public Sound(String fileName) {
    try {
        clip = Applet.newAudioClip(Sound.class.getResource(fileName));
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

public void play() {
    try {
        new Thread(){
            public void run() {
                clip.play();
            }
        }.start();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 在您告诉我们出了什么问题?之前,我们无法为您提供帮助
  • 你有什么问题?

标签: java eclipse file embedded-resource


【解决方案1】:

Class.getResource(),正如它的 javadoc 所指出的,从类路径中读取资源。不是来自文件系统。

要么你想从文件中读取,并且应该使用文件IO(即FileInputStream),或者你想从类路径中读取,你应该使用Class.getResource()并传递一个资源路径,从类路径的根。例如,如果 sound.wav 在运行时类路径中,在包com.foo.bar.sounds 中,代码应该是

Sound.class.getResource("/com/foo/bar/sounds/sound.wav")

【讨论】:

  • 如何获取文件的资源路径?
  • 阅读我的回答。我完成了。
  • 有机会请accept回答。
  • "从类路径中读取资源。而不是从文件系统中" 有文件系统运行时类的一部分的情况-小路。但由于大多数此类资源都应该嵌入,因此最好提前计划并从一开始就这样对待它们。
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 2011-10-04
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
相关资源
最近更新 更多