如何使用eclipse将图像添加到java项目中?

我已经围绕SO和Google链接做了很多阅读。

我还没弄明白如何正确地将图像添加到eclipse gui项目中,系统会识别它找到它。 我知道有一些关于CLASSPATH的mumbojumbo但它可能不应该这么难做。

首先让我描述一下我正在做的事情……(如果有人能够纠正我,那就更感激了。)

这是我的方法。

我使用“导入向导”(右键单击,“导入”,“常规”,“文件”)将图像添加到“导入目录”中,我称之为“/ resources”

Eclipse在eclipse包资源管理器的树视图中自动创建一个名为“resources”的文件夹。 在“参考图书馆”条目下。

注意,“resources”不在“Referenced Libraries”下,它位于树中的同一级别。

然后我使用以下代码:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("/resources/image.jpg"); Image logo = ImageIO.read(input); 

在这一点上,我运行测试程序并得到此错误:

 Exception in thread "main" java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(Unknown Source) at Test.main(Test.java:17) 

在此先感谢您的帮助!

将图像放在源文件夹中 ,而不是常规文件夹中。 即:右键单击项目 – >新建 – >源文件夹。 将图像放在该源文件夹中。 然后:

 InputStream input = classLoader.getResourceAsStream("image.jpg"); 

请注意,路径被省略。 那是因为图像直接位于路径的根部。 您可以在源文件夹下添加文件夹,以便根据需要进一步细分。 或者您可以将图像放在现有的源文件夹下(通常称为src )。

您可以重新保存图像并逐字地找到项目的src文件,并在保存时将其添加到该文件中。 对我来说,我必须去netbeans并找到我的项目,当它出现时它有3个文件src是最后一个。 不要点击任何一个只是保存你的照片。 这应该工作。 现在调整它可能是一个不同的问题,我正在努力的一个现在大声笑

如果您仍然遇到Eclipse查找文件的问题,您可以尝试以下方法:

  1. 通过使用java.io.File类获取规范路径格式并validation(a)文件是否存在以及(b)规范路径是什么,validation文件是否根据当前执行环境存在。
  2. 通过在main中打印以下内容来validation默认工作目录:

      System.out.println("Working dir: " + System.getProperty("user.dir")); 

对于上面的(1),我将以下调试代码放在我试图访问的特定文件周围:

  File imageFile = new File(source); System.out.println("Canonical path of target image: " + imageFile.getCanonicalPath()); if (!imageFile.exists()) { System.out.println("file " + imageFile + " does not exist"); } image = ImageIO.read(imageFile); 

无论出于何种原因,我最终忽略了大多数其他post告诉我将图像文件放在“src”或其他变体中,因为我validation了系统正在查看Eclipse项目目录层次结构的根(例如,$ HOME /工作区/ myProject的)。

将图像放在src /中(自动复制到bin /)并没有在Eclipse Luna上做到这一点。

将图像添加到项目中并查看图像非常简单。 首先在项目中创建一个文件夹,其中可以包含任何类型的图像。

然后右键单击项目->>转到构建路径->>配置构建路径->>添加类文件夹->>选择项目名称下的文件夹(您刚创建用于存储图像的文件夹)。

 class Surface extends JPanel { private BufferedImage slate; private BufferedImage java; private BufferedImage pane; private TexturePaint slatetp; private TexturePaint javatp; private TexturePaint panetp; public Surface() { loadImages(); } private void loadImages() { try { slate = ImageIO.read(new File("images\\slate.png")); java = ImageIO.read(new File("images\\java.png")); pane = ImageIO.read(new File("images\\pane.png")); } catch (IOException ex) { Logger.`enter code here`getLogger(Surface.class.getName()).log( Level.SEVERE, null, ex); } } private void doDrawing(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); slatetp = new TexturePaint(slate, new Rectangle(0, 0, 90, 60)); javatp = new TexturePaint(java, new Rectangle(0, 0, 90, 60)); panetp = new TexturePaint(pane, new Rectangle(0, 0, 90, 60)); g2d.setPaint(slatetp); g2d.fillRect(10, 15, 90, 60); g2d.setPaint(javatp); g2d.fillRect(130, 15, 90, 60); g2d.setPaint(panetp); g2d.fillRect(250, 15, 90, 60); g2d.dispose(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); doDrawing(g); } } public class TexturesEx extends JFrame { public TexturesEx() { initUI(); } private void initUI() { add(new Surface()); setTitle("Textures"); setSize(360, 120); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { TexturesEx ex = new TexturesEx(); ex.setVisible(true); } }); } } 

如果你是在eclipse中这样做的话,有一些快速的注意事项,如果你将鼠标hover在脚本中的一个类上,它将显示一个焦点对话框,其中显示f2为焦点。

对于计算机应用程序,请使用ImageIcon。 并为路径说,

 ImageIcon thisImage = new ImageIcon("images/youpic.png"); 

指定文件夹(图像),然后用/分隔并添加pic文件的名称。

我希望这是有帮助的。 如果其他人发布了它,我没有通读。 所以…是的…思想强化。