[RESOLVIDO]Imprimir JFrame que não esta visível

Ola, consigo apenas imprimir um JFrame que esta visível, com o seguinte código.


	/**
	 * Salva Imagem.
	 * @param frame JFrame que vai ser impresso
	 */
	public SaveImage(JFrame frame) {

		BufferedImage bImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics g = bImage.getGraphics();
		frame.paint(g);

		try {

			File file = new File("teste" + File.separator + "teste.png");
			ImageIO.write(bImage, "png", file);

		} catch (IOException ioe) {
			ioe.getMessage();
		}
	}

Gostaria de saber como devo proceder para imprimir um JFrame e todo seu conteúdo sem que ele esteja visível?

se fazer o mesmo codigo so que com o frame este visible false ele naum aparece na imagem ? o que acontece se fizer isso ?

se isso naum funcionar acho que tera que deixar o frame visivel para fazer isso, acho que é a unica forma

boa sorte

Boa tarde CristianPalmaSola10, obrigado pela atenção, já tentei fazer isso mas a imagem fica toda preta, irei continuar as minhas pesquisas se mais alguém tiver alguma ideia fico agradecido.

Minha ideia é


frame.setVisible(true);

//faz a imagem

frame.setVisible(false);

Já tentou chamar o paint do ContentPane() do JFrame ao invés do JFrame direto?
Além disso, não esqueça de dar dispose() no objeto g após a pintura.

frame.getContentPane().paint(g); g.dispose();

Faça o teste, mas provavelmente será necessário preencher a imagem com a cor de fundo que você quer.

CristianPalmaSola10, também tive esta idéia, mas não posso implementar, imagine no cliente aparecendo a tela e desaparecendo, estou praticamente reinventando a roda, pois o iReport não esta suprindo as necessidades de alguns relatórios dinâmicos que possuo.

ViniGodoy, não consegui implementar o que me passou, continuou me retornando uma imagem toda preta, segue em anexo o que já consegui desenvolver.

public class Main {
	
	public static void main(String[] args0){
		
		new SaveImage(new FrameTeste());
		
	}
}
public class SaveImage {

	/**
	 * Salva Imagem.
	 * @param frame JFrame que vai ser impresso.
	 */
	public SaveImage(JFrame frame) {

		BufferedImage bImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
		Graphics g = bImage.getGraphics();
		
		// Conforme interpretado
		frame.getContentPane().paint(g);
		
		try {
			File file = new File("teste" + File.separator + "teste.png");
			ImageIO.write(bImage, "png", file);

		} catch (IOException ioe) {
			ioe.getMessage();
		}
		
		// Conforme interpretado
		g.dispose();
	}
}
public class FrameTeste extends JFrame{
	
	private JButton button1, button2;
	
	public FrameTeste(){
		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(400, 400);
		this.setLayout(null);
		this.setLocationRelativeTo(null);
		
		this.button1 = new JButton("Teste");
		this.button1.setBounds(10, 10, 200, 50);
		this.add(this.button1);
		
		this.button2 = new JButton("Teste 2");
		this.button2.setBounds(70, 70, 200, 50);
		this.add(this.button2);
	}
}

Pelo que li nos fontes da classe JFrame, não é mesmo possível fazer isso.

PS: Parece que funciona deixar o JFrame minimizado e mandar pintá-lo. Ok, não é a solução mais elegante possível, mas é melhor que nada.
Faça um

frame.setExtendedState(JFrame.ICONIFIED);

Antes do setVisible. Pinte e feche o frame.

Fico extremamente grato pela ajuda, com certeza não é a melhor forma de se fazer o que necessito, mais enquanto não possuir outra solução implementarei esta.