Как рисовать на форме java swing

Нужно нарисовать линию и изображение на форме.

Форму создаю следующим образом:

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

public class BattleShip2dClass {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame Frm = new JFrame();
Canvas canvas = new Canvas();
Graphics g =  Frm.getGraphics();

        ///g.drawLine(10, 20, 30, 40);
       
Frm.setLocation(400, 200);
Frm.setSize(500, 300);
Frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frm.setTitle("Морской бой");
Frm.setVisible(true);
Frm.setBackground(Color.black);
Frm.setForeground(Color.black);

Frm.add("Center", canvas);

//canvas.paintAll(g);
//canvas.update(g);
}

}

При попытке вызвать метод рисования линии
получаю:

Exception in thread "main" java.lang.NullPointerException
at BattleShip2dPack.BattleShip2dClass.main(BattleShip2dClass.java:19)  

1 комментарий

  • исключение ты получаешь потому, что пытаешься получить Graphics до того, как делаешь форму видимой (Frm.setVisible(true) ).
    И в твоем случае ты пытаешься работать с gui не из потока EventDispatcher — это плохо.

    Прочитай про метод paint(Graphics g) и для чего его нужно переопределять.
    Также почитай про EventDispatcher.
    Еще можешь загуглить SwingUtilites.invokeLater(Runnable r)