打印加载图像的宽度(如果为-1)则图像未正确加载.
img = Toolkit.getDefaultToolkit().createImage("red.png");
System.out.println(img.getWidth(null)); // check what it prints
值得阅读Loading Images Using getResource上的Java Tutorial
您可以根据图像位置尝试任何一种.
// Read from same package
ImageIO.read(getClass().getResourceAsStream("c.png"));
// Read from images folder parallel to src in your project
ImageIO.read(new File("images/c.jpg"));
// Read from src/images folder
ImageIO.read(getClass().getResource("/images/c.png"))
// Read from src/images folder
ImageIO.read(getClass().getResourceAsStream("/images/c.png"))
Read more…
一些要点:
>调用super.paintComponent(g);在重写的paintComponent()方法的第一行.
>使用ImageIO而不是Toolkit加载图像.
>使用frame.pack()代替frame.setSize(),它根据组件的首选大小调整组件.
>在自定义绘制的情况下,覆盖getPreferredSize()以设置JPanel的首选大小.
>使用SwingUtilities.invokeLater()或EventQueue.invokeLater()确保正确初始化EDT.
> Why to use SwingUtilities.invokeLater in main method?
> SwingUtilities.invokeLater
> Should we use EventQueue.invokeLater for any GUI update in a Java desktop application?