Buffered image

to tentando fazer a imagem aparecer na minha tela com bufferedImage mas esta dando erro, serq q eu teria q usai Imagem em x de bufferedImage? queria saber o que está faltando.
==== classe que extende o Jpanel para imagem de fundo====
package Game;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Fundo extends JPanel {	
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		//
		BufferedImage imagemdeFundo = new BufferedImage(500,700,BufferedImage.TYPE_INT_RGB);
		try {
			imagemdeFundo = ImageIO.read(getClass().getResource("base.jpg"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		g = imagemdeFundo.getGraphics();	
		g.drawImage(imagemdeFundo, 0, 0,100, 100,this);
		 
	}

}

=========== classe principal ================
protected int FPS = 0; // tempo de frames por segundo do jogo.
protected Thread thread; // “segundo programa de processamento”.
protected boolean isRunning = false; // liga ou desliga a thread.
protected BufferedImage image;
Fundo painel = new Fundo();

	public Game() {
		initFrame();
		
		image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
	}

	public void initFrame() {
		
		frame = new JFrame("Meu Game!");
		frame.setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
		frame.add(this);
		frame.add(painel);
		frame.setResizable(false);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

Pode postar o erro?

rsrs …
Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: input == null!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1400)
at Game.Fundo.paintComponent(Fundo.java:16)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5262)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
at java.desktop/java.awt.Container.paint(Container.java:2002)
at java.desktop/java.awt.Window.paint(Window.java:3933)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

O que você quer fazer exatamente?
Seu código está sem sentido.

public void paintComponent(Graphics g) {
	super.paintComponent(g);
	// Aqui está criando uma imagem em branco
	BufferedImage imagemdeFundo = new BufferedImage(500,700,BufferedImage.TYPE_INT_RGB);
	try {
		// Aqui está matando a imagem em branco e criando outra
		imagemdeFundo = ImageIO.read(getClass().getResource("base.jpg"));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	// Aqui está matando o parâmetro 'g' e substituindo pelo graphics da imagem criada acima
	g = imagemdeFundo.getGraphics();	
	// Aqui está desenhando a imagem no Graphics dela mesmo
	g.drawImage(imagemdeFundo, 0, 0,100, 100,this);
	 
}

como seria a sintaxe correta para o g desenha a imagem “base.jpg” ?

Não é problema de sintaxe, é problema na sua lógica.

Apaga essa linha aqui:

g = imagemdeFundo.getGraphics();

E tira esse código daqui de dentro do paintComponent, inicializa em outro lugar essa imagem, sugiro no construtor:

try {
	// Aqui está matando a imagem em branco e criando outra
	imagemdeFundo = ImageIO.read(getClass().getResource("base.jpg"));
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

A linha abaixo também não precisa, você só cria um BufferedImage na munheca se quiser desenhar nele, no seu caso você já está carregando uma imagem pronta.

BufferedImage imagemdeFundo = new BufferedImage(500,700,BufferedImage.TYPE_INT_RGB);

ok to absorvendo a situação :sweat_smile: fi assim…
public class Fundo extends JPanel {

	BufferedImage imagemdeFundo;
	
	public Fundo(){
		try {
			 imagemdeFundo = ImageIO.read(getClass().getResource("base.jpg"));
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		g.drawImage(imagemdeFundo, 0, 0,100, 100,null);
	}
}

==-Mas a imagem ainda nao aparece ta rolando o erro …
Exception in thread “main” java.lang.IllegalArgumentException: input == null!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1400)
at Game.Fundo.(Fundo.java:16)
at Game.Game.(Game.java:27)
at Game.Game.main(Game.java:68)

Ele não está encontrando seu arquivo.
Em que caminho essa imagem se encontra em relação à raíz do seu projeto?
Para buscar a partir da raíz do classpath, faça assim:

// coloque um '/' na frente do caminho para buscar a partir da raíz do classpath
// utilize 'getResourceAsStream' senão não vai funcionar caso sua imagem estiver dentro do JAR de sua aplicação
imagemdeFundo = ImageIO.read(getClass().getResourceAsStream("/base.jpg"));
1 curtida

aheeeeeeeeeee :clap::clap::clap::clap::clap::clap::clap::clap: funcionou, vou correndo para o tatuador grava esse código na testa. e sua primeira explicação me ajudou bastante tb, Brothers brigadao pela paciência comigo sou meio 8 ou 80 ou entendo 100¨% uma coisa sou sou um borro completo mas entendo agora.