Java - 无法获取MIDI文件作为资源

时间:2014-03-26 07:45:00

标签: java file resources classloader getresource

我最初在项目目录中有 .mid文件,我得到了这样的内容:

 File file = new File("hmr.mid");

一切正常,然后我尝试将其导出到 runnable .jar ,因为当我稍后尝试访问该文件时,我有 NullPointerException

我已经读过我应该将资源添加到包中,所以我这样做了:

http://kepfeltoltes.hu/140326/115027543proj_www.kepfeltoltes.hu_.png

从那以后,我做了大量的谷歌搜索,SOF搜索,看了很多例子(我想大多数人都弄错了,例如使用绝对路径),阅读这样的文章:

http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading

但没有任何效果。当我导出到.jar时,我得到 NullPointerException ,但即使我只是运行它。

这是我的资源加载器,我的尝试有些遗留。它适用于图像。

import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.InputStream;
import java.net.URL;




public class ResourceLoader {

static ResourceLoader rl = new ResourceLoader();

public static Image getImage(String filename)
{
    return Toolkit.getDefaultToolkit().getImage(rl.getClass().getResource(filename));
}

public static File getFile(String filename)
{
    //InputStream is = rl.getClass().getResourceAsStream("hmr.mid");
    //URL url = Thread.currentThread().getContextClassLoader().getResource("hmr.mid");
    //File file = new File(url.toString());
    //url = File.class.getClassLoader().getResource("/Users/peti/Documents/workspace/java_workspace/BluesBox_v0_21/200_Stlye/resources/hmr.mid");

    //File file = new File(url.getFile());
    //File file = new File("/Users/peti/Documents/workspace/java_workspace/BluesBox_v0_21/200_Stlye/resources/hmr.mid");
    //File file = new File("src/200_Stlye/resources/hmr.mid");
    File file = new File("hmr.mid");

    return file;
}

}

1 个答案:

答案 0 :(得分:1)

使用getClass()时,应使用资源的相对路径.getResource()

例如“/hmr.mid”

在这种情况下,请确保填充在类路径中。