Java Hello World应用程序在显示图像时无法启动

问题描述:

我已经创建了一个小巧的“hello world”应用程序,使用JFrame/JPanel,它在我的IDE(Netbeans)中完美运行。我使用Graphics.drawString()在屏幕上绘制了一个字符串来测试它,并且它在浏览器和构建的.jar文件中都能很好地工作。Java Hello World应用程序在显示图像时无法启动

我决定添加一个图片来测试它(我是新来的Java),并且应用程序继续在IDE内部运行,但构建的.Jar文件不会启动任何内容,错误或任何事情。

这里有2类文件:

Boxy_Main.java:

package boxy; 

import javax.swing.JFrame; 
import java.awt.*; 

public class Boxy_Main extends JFrame { 

    public static Boxy_Main main; 

    public Boxy_Main() { 
     add(new Board()); 
     setTitle("Boxy"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(467, 700); 
     setLocationRelativeTo(null); 
     setVisible(true); 
     setResizable(true); 
    } 
    public static void main(String[] args) { 
     main = new Boxy_Main(); 
    } 
} 

Board.java:

package boxy; 

import javax.swing.JPanel; 
import java.awt.*; 
import javax.swing.*; 

public class Board extends JPanel { 

    public Graphics2D g2d; 
    public Graphics g; 
    public Image hello_image; 

    public Board() { 

     this.set_properties(); 

    } 

    public void set_properties() { 

     this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage(); 


    } 

    public void paint(Graphics g) { 

     this.g = g; 
     this.g2d = (Graphics2D) g; 


     this.g2d.drawImage(this.hello_image, null, this); 

     this.g.drawString("hello", 100, 80); 
     this.g.drawString("world", 100, 94); 


    } 
} 

如果我注释掉

this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage(); 

this.g2d.drawImage(this.hello_image, null, this); 

它继续完美地工作。

我试图找出自己,我找不到任何通过谷歌或堆栈溢出。这是一个难以搜索的短语来制作。

任何人都有任何想法,为什么这会在NetBeans中运行,但不是作为独立的.jar?

+0

从Jar文件加载资源非常棘手。尝试仅注释drawImage(... – 2012-08-08 18:38:16

+0

@ kw4nta我忘了指定这是我尝试的第一件事,问题仍然存在,所以它肯定与图像加载有关,而不是绘图。但是,mrranstrom已经指出我的错误似乎是什么,我使用了一个相对路径,一旦应用程序是一个.jar – BumbleShrimp 2012-08-08 18:44:35

你的问题是在这条线

this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage(); 

的“../images.LKRZV.jpg”路径是当你在NetBeans正在运行正确的,但是当你运行你的JAR这是不正确的。确保提供了一个相对于jar文件位置正确的路径。如果将该路径更改为图像的绝对路径,则程序应该正常工作。将图像打包在罐子里可能会更好。

+0

哇,我感觉自己像一个白痴没有想到这一点现在我觉得我'不必要地污染了SO ... – BumbleShrimp 2012-08-08 18:45:41