Resim çizdirme işlemi

Stackoverflow’da ne yazık ki artık soru soramıyorum kodu paylaşmama hiçbir şekilde izin vermiyor aynı sorunu yaşayan kişiler olmuş çözülmüyor ne yazık ki. O yüzden oraya soramadım.
Kod çok uzun o yüzden sadece sorun olan yeri belirtmek için yeniden düzenledim yardımcı olabilirseniz çok sevinirim.
2 hata var:
1.si
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at classPackage.MainClass.paint(MainClass.java:77)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at java.awt.Window.paint(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1300(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

  • Kodda hangi satırın 77. satır olduğunu gösterdim

  • Bu hata programı etkilemiyor gibi, resmi düzgün bir şekilde çiziyor

2.si
Play düğmesine tıkladığımda, menü2’ye düzgün bir şekilde gidiyor.
Menu2’de geri butonuna tıkladığımda menu1’e gidiyor ama menu1’in yanında menu2’de çizilmesi gerekenleri de çiziyor.
Kısaca, her paint metodunda * yeniden çizmek * yerine ekranda mevcut çizimlerin * üzerine * çiziyor.

 public class MainClass extends JPanel implements Runnable, MouseListener {
	enum MenuState {
		xMenu1, xMenu2;
	}

	private MenuState menuState = MenuState.xMenu1;
	JFrame frame;
	private Image bgImage, playButtonImage, backButtonImage;
	private Rectangle playButton, backButton;

	private Image image;
	private Graphics second;

	public MainClass() {
		frame = new JFrame("TEST");
		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		frame.setUndecorated(true);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBackground(Color.BLACK);
		frame.setFocusable(true);
		frame.addMouseListener(this);
		frame.add(this);
		try {
			bgImage = ImageIO.read(getClass().getResourceAsStream("/Data/background.png"));
			playButtonImage = ImageIO.read(getClass().getResource("/Data/playButton2.png"));
			backButtonImage = ImageIO.read(getClass().getResource("/Data/backButton.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		playButton = new Rectangle(900, 400, 214, 78);
		backButton = new Rectangle(5, 5, 136, 92);

		Thread thread = new Thread(this);
		thread.start();
	}

	public static void main(String[] args) {
		new MainClass();

	}

	@Override
	public void run() {
		while (true) {
			if (menuState == menuState.xMenu1) {

			} else if (menuState == menuState.xMenu2) {

			}
			repaint();
			try {
				Thread.sleep(17);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}

	@Override
	public void paint(Graphics g) {
		if (menuState == menuState.xMenu1) {
			g.drawImage(playButtonImage, playButton.x, playButton.y, this); // BU 77. Satır
		} else if (menuState == menuState.xMenu2) {
			g.drawImage(bgImage, 0, 0, this);
			g.drawImage(backButtonImage, backButton.x, backButton.y, this);
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		if (menuState == menuState.xMenu1) {
			if (playButton.intersects(e.getX(), e.getY(), 1, 1)) {
				menuState = menuState.xMenu2;
			}
		} else if (menuState == menuState.xMenu2) {
			if (backButton.intersects(e.getX(), e.getY(), 1, 1)) {
				menuState = menuState.xMenu1;
			}
		}
	}
}

Neden ki?

“Your post appears to contain code that is not properly formatted as code. Please indent all code by 4 spaces using the code toolbar button or the CTRL+K keyboard shortcut. For more editing help, click the [?] toolbar icon.” uyarısını veriyor gerekli her şeyi yapmama rağmen düzelmedi sanırım bazen bir bug oluşuyor yeni hesap açınca düzeldi sorumun cevabını aldım. Sağolun yine de sorduğunuz için.

Burada da olduğu gibi kod görünümü kazandırmamışsınız. Orada da nasıl yapılacağını söylemiş. Bu forumdaki kodları da şurayı okuyarak düzeltirseniz seviniriz.