将资源(图像,声音位等)嵌入到Java项目中然后使用这些资源

时间:2010-09-15 20:54:42

标签: java eclipse resources imagesource

我搜索了一种在java项目中嵌入资源的方法(使用Eclipse v3.6.0),然后在控件中使用该嵌入式资源(例如JLabel)。我见过从文件系统引用资源的方法。项目开发完成后,我想将该应用程序发布为可执行文件。应该注意的是,这些可执行文件将被部署/启动到Windows,* NIX和Linux平台。

我知道这可以在Visual Studio世界中完成,但我不熟悉如何在Java / Eclipse IDE中执行此操作。作为一个附带问题,如何让Eclipse将项目创建为可执行文件以便可以启动它?

非常感谢任何帮助。

标记

更新1:

基于BalusC's response,我想分享我解决问题的代码。我的课程在“Viking.Test”包下,然后我将图片文件放在“Viking.Test.Resources”包下。这都是在Eclipse中完成的,用于将图像导入到项目中。

  1. 我通过右键单击项目 - >导入图像。导入 - >导入源的常规/文件系统
  2. 选择包含要导入的图像的文件夹
  3. '进入文件夹'参数
  4. 选择“Project/src/Viking/Test/Resources
  5. 未更改任何选项并点击“已完成”
  6. 在源文件中,我添加了以下代码,将图片插入JLabelLblLogo

    try
    {
      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
      InputStream input = classLoader.getResourceAsStream(
        "Viking/Test/Resources/MyImage.jpg");
      Image logo = ImageIO.read(input);
      LblLogo = new JLabel( new ImageIcon( logo ) );
      LblLogo.setBounds(20, 11, 210, 93);
      getContentPane().add(LblLogo);
    }
    catch ( IOException e ) {  }
    

1 个答案:

答案 0 :(得分:17)

只需将这些资源放在源/包结构中,然后使用ClassLoader#getResource()getResourceAsStream()通过完全限定的包路径从类路径中获取它们URLInputStream

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/image.gif");
// ...

或者,如果它与当前类位于同一个包中,您也可以按如下方式获取它:

InputStream input = getClass().getResourceAsStream("image.gif");

  

作为一个附带问题,我如何让Eclipse将项目创建为可执行文件,以便可以启动它。

右键单击Java项目>出口>可运行的JAR文件