导出后,Java无法找到/绘制图像 - java

您好stackoverflowites,

我正在开发2D游戏,当我在eclipse中运行它时,我的程序会很好地加载所有图像和资源。但是,我使用了不必要的推荐方式来创建图像和图像图标,如下所示:

bannerLogo.setIcon(new ImageIcon("/res/client/BannerHeader.jpg"));

现在,当导出到罐子时,它不会显示图像(这是预期的,因为即时消息未使用正确的方式。)

我搜索了正确的方法,发现是:

URL imgURL = getClass().getResource("/res/client/BannerHeader.jpg");
Image bannerImg = Toolkit.getDefaultToolkit().getImage(imgURL);
bannerLogo.setIcon(new ImageIcon(bannerImg));

而且这也不起作用,我得到了一条“捕获图像时发生未捕获的错误:”跟踪,它只是告诉我我的URL(imgURL)为空。 (这是当我在Eclipse中运行时,请注意,我什至还没有导出它)

我认为这与我的类路径有关,但是我无法弄清楚是什么。

在eclipse内部,我的包结构如下:

(父目录,项目名称)

+ src文件夹,在构建路径上具有常规软件包等

+ resource文件夹(“ res”),不在构建路径上(在构建路径上尝试过,未更改)

+++资源文件夹的子目录

我不知道该在这里做什么。很抱歉,无法显示文字。

java大神给出的解决方案

您的代码最初是在寻找图像文件,并且文件不存在于Jar文件中,而只是资源。因此,尝试使用getClass.getResource("/res/client/BannerHeader.jpg");是正确的。但是,请确保该映像实际上位于类文件目录之外的目录的jar文件中,并使用相对于类路径目录的路径。

错误不是告诉您这是错误的或文件为空,而是需要将其放在try / catch块中。我建议您阅读Exceptions Tutorial以获得更多信息。

编辑1
当您说自己有一个未捕获的异常错误时,在我看来,您是编译错误而不是运行时异常。对困惑感到抱歉。

至于放置图像的位置,在某种程度上取决于您使用的IDE。我使用Eclipse,并在我的java文件包目录的外面添加了一个目录,该目录称为图像并将图像放置在该目录中。然后,我使用资源查找“ images / MyImage.jpg”。

例如,假设我在Eclipse中的软件包如下所示:

因此,类文件位于myPackage包中,图像文件GridBoxClassPic.JPG位于类文件目录之外的images目录中,因此我可以使用字符串String RESOURCE_PATH = "images/GridBoxClassPic.JPG";找到它。

此代码可以显示图像:

import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class MyClass {
   private static final String RESOURCE_PATH = "images/GridBoxClassPic.JPG";

   public MyClass() {
      try {
         BufferedImage image = ImageIO.read(getClass().getResource(RESOURCE_PATH));
         ImageIcon icon = new ImageIcon(image);
         JLabel label = new JLabel(icon);
         JOptionPane.showMessageDialog(null, label);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
      new MyClass();
   }
}

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

光学标记阅读器的开源库 - java

Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以使为on-topic。 6年前关闭。 Improve this question 我想要一个用于光学标记读取(OMR)的开源库,有没有这样的库?我想将此库与我的Java应用程序一起使用。…

JTable所有列右对齐 - java

有没有一种方法可以同时对齐jtable中的所有列?使用这个:DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); rightRenderer.setHorizontalAlignment( JLabel.RIGHT ); JTAB_TABLE.getColumnMod…

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…