paint() verzögern

Solor

Aktives Mitglied
Hallo liebes Java-Forum,
stehe heute vor einem neuen Problem:
Ich habe eine Klasse , die aus einem int[][]-array ein Bild erstellt. Dieses Bild wird in der Klassenvariable picture vom Typ BufferedImage gescpeichert. Ich habe noch meine MainPanel in dem ich das alles zeichnen lasse. Dafür habe ich eine doInitialazations()-Methode geschrieben, in der ein Objekt von meiner ArrayZuBild-Klasse erstellt wird und das Bild erstellt wird. Diese Methode rufe ich im Konstruktor der MainPanel-KLasse auf. In der PaintMethode zeichne ich dann das Bild über
Java:
g.drawImage(Objektname.picture, 0, 0, this)
Um zu meinem Problem zu kommen: Die Paint-Methode wird aufgerufen, bevor ich ein Objekt von der ArrayZuBild-Klasse angelegt habe und wirft dementsprechend eine Null-Pointer-Exception. Wie kann ich das umgehen bzw. den Aufruf der paint-Methode verzögern?
 
Zuletzt bearbeitet:

Solor

Aktives Mitglied
okay habs problem selbst gelöst...habe einfach noch eine boolesche variable eingefügt, ob ich fertig geladen habe.
 

Solor

Aktives Mitglied
Ich erstelle ein Int[][]-array mit zufälligen Zahlen. Das wandle ich dann in ein Bild um
Java:
BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = buf.getGraphics();
for (int x = 0; x < width; x++)
{
	for (int y = 0; y < height; y++)
	{
		if (array[x][y] < 1)
		{
			g.setColor(Color.black);
		}
		else
		{
			g.setColor(Color.white);
		}
		g.drawLine(x, y, x, y);
	}
}
picture = buf;
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ahso, wenn es das vorher gar nicht gibt ist das was anderes. Da braucht man aber kein boolean, ein

if (xxx.image != null) g.drawImage(xxx.image...);

sollte es ja schon tun...
 

Solor

Aktives Mitglied
das hatte ich auch schon probiert...aber da kam eine nullPointerException von diesem abgleich. Deshalb habe ich das jetzt so gelöst, dass am Ende der doInitialazation()-Methode eine Variable auf true gesetzt wird und ich eben die überprüfe.
Wenn du irgendwie noch Verbesserungsvorschläge hast, wie ich meinen Code besser gestalten kann dann sag das bitte, von sowas habe ich (leider) bisher noch nicht so die echte Ahnung.
 

Marco13

Top Contributor
Wenn da eine NPE fliegt, dann muss "Objektname" auch noch null gewesen sein, und der Test müßte eben
if (Objektname != null) ...
sein, aber ... mit so kleinen Pseudocodestücken kann man da nicht viel mehr dazu sagen...
 

Solor

Aktives Mitglied
Okee wenn du meinst...dann hast du hier meinen ganzen Code.
Java:
package data;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class GamePanel extends JFrame implements Runnable, KeyListener{
	Map map;
	int width = getToolkit().getScreenSize().width;
	int height = getToolkit().getScreenSize().height;
	boolean paint = false;
	public GamePanel()
	{
		super("Game Frame");
		setPreferredSize(new Dimension(width, height));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		pack();
		setVisible(true);
		doInitialazations();
	}
	public void paint(Graphics g)
	{
		if (paint)
		{
			g.drawImage(map.mapPicture, 0, 0, this);			
		}
		else
		{
			g.drawString("LOADING...", 15, 50);
		}
	}
	public static void main(String[] args)
	{
		GamePanel gp = new GamePanel();
	}
	public void doInitialazations()
	{
		map = new Map(width, height);
		map.genMap();
		Thread th = new Thread(this);
		th.start();
		paint = true;
	}
	public void run()
	{
		while (true)
		{
			repaint();
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
}
und hier:
Java:
package data;

import java.util.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class Map {
	int[][] map;
	int height;
	int width;
	BufferedImage mapPicture;
	public Map (int width, int height)
	{
		map = new int[width][height];
		this.width = width;
		this.height = height;
	}
	private void setMaterial(int x, int y, int material)
	{
//		System.out.println("X: " + x + " / " + width+ " Y: "+y + " / " + height);
		map[x][y] = material;
	}
	public void genMap()
	{
		Random r = new Random();
		for (int iy = 0; iy < height; iy++)
		{
			for (int ix = 0; ix < width; ix++)
			{
				setMaterial(r.nextInt(6));
			}
		}
		MaptoImage();
	}
	public void MaptoImage()
	{
		BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics g = buf.getGraphics();
		for (int ix = 0; ix < width; ix++)
		{
			for (int iy = 0; iy < height; iy++)
			{
				if (map[ix][iy] < 5)
				{
					g.setColor(Color.black);
				}
				else
				{
					g.setColor(Color.white);
				}
				g.drawLine(ix, iy, ix, iy);
			}
		}
		mapPicture = buf;
	}
   }
 
S

SlaterB

Gast
erst ab setVisible(true) wird gezeichnet,
wenn du das rechtschreiblich schlimme doInitialazations() davor setzt, dann gibts in der Hinsicht kein Problem,
freilich wird solange gar nichts von der GUI zu sehen sein
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben