0

我发现自己无法利用绘图方法在 JFrame 中显示图像。如果从不调用 draw(Graphics p) 方法,则以下代码的功能完全相同。是什么导致了这种功能的缺乏,可以采取什么措施来解决它?(假设“C:\test\background.png”是有效路径。)没有编译时错误,也没有显示运行时错误。这是该计划中唯一的课程。尝试在 JPanel 内绘图并不能解决问题。

package gui;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Main extends JFrame{
    private Image mainMenuBackground;
    private String state;
    Graphics g;

    Main(){
        setSize(800, 600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        state = "main menu";
    }

    public static void main(String args[]){
        Main m = new Main();
        m.run();
    }
    public void loadImages(){
        mainMenuBackground = new ImageIcon("C:\\test\\background.png").getImage();
    }
    public void run(){
        try{
            loadImages();
            draw(g);
            pack();
        }catch(Exception ex){}
    }
    public void draw(Graphics p){
        Graphics2D g = (Graphics2D) p;
        g.drawImage(mainMenuBackground, 0, 0, null);
        g.drawRect(0, 0, 50, 50);
    }
}
4

1 回答 1

2

首先,这个:

catch(Exception ex){}

会阻止你看到任何问题。您说“没有显示的运行时错误”-我并不感到惊讶,因为您已经压制了所有内容。

接下来,您永远不会为实例变量分配值,因此当您将它传递给方法时g,它仍然会有一个值,然后您可以在其中使用不同类型的局部变量......并取消引用它。这将导致 a ,然后您将其捕获并忽略。nulldrawgNullPointerException

所以基本上有很多错误,但基本上你不能只声明一个Graphics变量并希望它有一个有用的值。对于“正常”的绘画操作,图形上下文会自动提供给您的方法 - 或者您可以在使用图像对象时创建它。

于 2012-05-28T18:40:20.340 回答