0

draw メソッドを使用して 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値が保持されます。これにより が発生し、それをキャッチして無視します。nulldrawgNullPointerException

Graphicsしたがって、基本的には多くの間違いがありますが、基本的に、変数を宣言するだけで、それが有用な値を持つことを期待することはできません。「通常の」描画操作の場合、グラフィックス コンテキストはメソッドに自動的に提供されます。または、画像オブジェクトを操作するときに作成することもできます。

于 2012-05-28T18:40:20.340 に答える