2D-Grafik ImageObjekte

k3ltis

Mitglied
Grüße liebe JavaFreunde!

Ohne lange umschweife zeige ich zunächst mal meine CodeBauklötze...

Hauptklasse:

Java:
//DAS IST MEINE HAUPTKLASSE


import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;



@SuppressWarnings("serial")
public class MainMenu extends JPanel implements Runnable, ActionListener, KeyListener, MouseListener{
	
	
	JFrame frame;
	
	long delta = 0;
	long last = 0;
	long fps = 0;
	
	Bilder hintergrund;
	
	public static void main(String [] args){
		new MainMenu(800, 600);
		
		
	}
	
	public MainMenu(int w, int h){
		
		this.setPreferredSize(new Dimension(w, h)); 
		frame = new JFrame("MEIN SPIEL");
		frame.setLocation(100, 100);   
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.pack(); 
		frame.setVisible(true);
		
		
		doInitializations();
		
		
		Thread th = new Thread(this);
		th.start();
	}

	private void doInitializations() {
		last = System.nanoTime();
		
		hintergrund = new Bilder("C:/Users/k3ltis/workspace/GUI-Experimente/bin/pics/background.jpg");
		
	}

	@Override
	public void run() {
		while(frame.isVisible()){
			
			computeDelta();
			
			repaint();

			try{
				Thread.sleep(10);
			}catch(InterruptedException e) {}
		}
	}

	private void computeDelta() {
		
		delta = System.nanoTime() - last;
		last = System.nanoTime();
		fps = ((long) 1e9)/delta;
		
	}
	
	@Override
	public void paintComponent(Graphics g){
		
		super.paintComponent(g);
  
		hintergrund.zeichne(g);  //<------NULLPOINTER EXCEPTION-------------------------------<
	
	}
	
}

ObjektKlasse für die Bilder

Java:
//DAS IST DIE OBJEKTKLASSE FÜR DIE BILDER

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


public class Bilder {
	protected BufferedImage bild;
	
	//Konstruktor
	public Bilder(String dateiname){
		
		
		this.bild = null;
		try {
		   this.bild = ImageIO.read(new File(dateiname));
		    System.out.println("Bild geladen");
		} catch (IOException e) {
			System.out.println("Bild nicht geladen");
		}
		
		
	}
	
//	public BufferedImage getBild(){
//		return this.bild;
//	}
	
	public void zeichne(Graphics g){
		g.drawImage(bild,0,0,null);
	}
}

So. Soweit sollte der Code verständlich sein.
Zum komischen Teil:

Es funktioniert ja! Ich sehe ein JPamel-Fenster mit dem Hintergrundbild.

Ich bekomme nur eine hübsche NullPointer-Exception an der markieren Stelle in der Hauptklasse.

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at MainMenu.paintComponent(MainMenu.java:141)

Wo habe ich was übersehen??? Die NullPointerException an DIESER Stelle, kann doch nur bedeuten, dass die PaintMethode schonmal aufgerufen wird, bevor das Objekt initialisiert wurde...

lg
k3ltis
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
auf Titel-Bestandteile wie 'Fehler' oder ' - Ich verstehe nicht warum!' bitte verzichten,
das gilt für nahezu jeden Thread im Forum, denn wenn alles geht und alles klar ist, braucht es ja keinen Forum-Thread
 

Momolin

Aktives Mitglied
Hallo,

ich denke das ist einfach:
sobald Du den
Code:
frame
Code:
visible
machst [STRIKE]muss[/STRIKE] soll er sobald als möglich auch
Code:
paintComponent(Graphics g)
ausführen. Da könnte aber
Code:
hintegrund
noch nicht erzeugt sein, also gibt es eine NullPointerException, weil
Code:
hintergrund
zu diesem Zeitpunkt noch
Code:
null
sein kann.

Grüße
Momolin
 
Zuletzt bearbeitet:

k3ltis

Mitglied
Hallo,

ich denke das ist einfach:
sobald Du den
Code:
frame
Code:
visible
machst [STRIKE]muss[/STRIKE] soll er sobald als möglich auch
Code:
paintComponent(Graphics g)
ausführen. Da könnte aber
Code:
hintegrund
noch nicht erzeugt sein, also gibt es eine NullPointerException, weil
Code:
hintergrund
zu diesem Zeitpunkt noch
Code:
null
sein kann.

Grüße
Momolin

Ah! Vielen Dank für den Hinweis. Das ist es gewesen.

Super Leute hier im Forum!

lg
k3ltis
 

Neue Themen


Oben