当前位置: 首页 > 面试题库 >

运行java -jar时未绘制Java映像

胡玉书
2023-03-14
问题内容

我有一个我从未有过的问题,无法在网络上找到解决方案。我有一个小的Programm,它使用一些图像来打印菜单。

这是我用来打印图像的类:

public class ViewImage extends JPanel {
    private static final long serialVersionUID = 1L;
    protected Image image = null;

    public ViewImage(int x, int y, String path) {
        this(x, y, new ImageIcon(path).getImage());
    }

    public ViewImage(int x, int y, Image image) {
        this.image = image;
        this.setBounds(x, y, image.getWidth(null), image.getHeight(null));
    }

    public void paintComponent(Graphics g) {
        int x = ((this.getWidth() - image.getWidth(null)) / 2);
        int y = ((this.getHeight() - image.getHeight(null)) / 2);

        g.drawImage(image, x, y, null);
    }

    public void setImage(String path) {
        this.image = new ImageIcon(path).getImage();
    }
 }

我的图像都是类路径的一部分,我称之为:

this.getClass().getClassLoader().getResource("MyImage.png").getPath()

正常工作,直到我将程序打包到jar文件中并从控制台使用以下命令运行:

java -jar MyJar.jar

我的程序启动正常,但是没有图像打印。没有例外,没有错误,什么都没有。

什么会导致这种行为?


问题答案:

首先,请确保您的资源已正确加载(例如,使用System.out())!

而是ImageIcon(String location)使用ImageIcon(URL location)构造器,因为您的图像不在硬盘上,而是作为类路径中的URL动态压缩(例如MyJar.jar!/path/to/image.png“);您必须将图像加载方式修改为

this.getClass().getClassLoader().getResource("MyImage.png");


 类似资料:
  • 问题内容: 根据我的阅读,执行以下命令时: 然后,将忽略主类路径,并从清单文件中获取类路径。 此外,在命令行上声明的类路径也将被忽略。所以在: /usr/local/jar/foobar.jar被忽略。 最后,我读过清单文件在jar文件中只能包含相对路径。 因此,如何包含系统上存在的外部jar的绝对路径,而不是正在执行的jar文件中的绝对路径? 问题答案: 您是否有理由避免像这样调用主类 ? 这种

  • 问题内容: 运行单元测试时,我遇到了jar hell的问题。 我遇到了上述错误,并通过删除了不必要的jar文件解决了这些错误。 但是我面临以下两个jar的问题,即tomcat-embed-core-8.0.36.jar和hibernate- jpa-2.1-api-1.0.0.Final.jar。这两者之间有一个共同的类,我需要两个jar文件,任何人都可以向我解释如何解决此问题。我都需要jar文件

  • 行中出现错误(JAXBContext.newInstance): 当它作为测试用例执行时,它运行良好,使用: 或mvn:Spring:引导运行 但在使用以下方法运行jar时会导致问题: 运行java-jar并使用postman命中时出错。 版本信息 同一个jar在开发服务器上运行良好,但不在临时服务器上运行。开发和登台服务器都有相同的环境(java版本、mvn,一切都一样)。我将这些依赖项添加到p

  • 错误:ExampleUtil模块找不到module-info.class 有没有一种方法可以使用不是模块的JAR来创建运行时映像?谢谢你。

  • 问题内容: 我正在尝试制作绘画程序,但是在拖动鼠标时无法绘制线条。看来涂料一直在刷新,因此只绘制了鼠标的当前位置。我对此有些陌生,因此如何在拖动鼠标时将所有行显示在JPanel上?谢谢,这是我所拥有的: 问题答案: 有多种方法可以解决您的问题。@MattiasF和@MadProgrammer是正确的:Swing在做它应该做的事情。您的方法应该重绘整个场景,而不是添加到前一个场景。 到目前为止,建议

  • 在一个项目中,我们将Hibernate与HikariCP结合使用,并且在Eclipse中一切都很好。但一旦我生成了一个jar文件(Maven),就再也找不到hikaricp了。我已经从各个可能的角度考虑了这个问题,但我无法找出问题所在。。。 坚持不懈xml 波姆。xml 如果我在Eclipse中运行此功能,则一切正常: 01:14:05,436信息HikariDataSource: 70-Hika