Problemas de execução com NetBeans e Eclipse

Bom, povo acontece o seguinte, criei um projeto no NetBeans e no Eclipse, adicionei importação do “javax.swing” e criei um JFrame e coloquei assim:

JFrame.setVisible(true);

e essas IDE’s simplesmente não executam isso… Deixo abaixo o código de um dos meus projetos:

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

public class Background {
 
	JFrame j = new JFrame();
	Graphics g;

public void paint(){
	
	j.add(null,g);
	j.setVisible(true);
	j.setSize(500, 500);
	j.setResizable(false);
	j.add(null,g);
	g.setColor(Color.BLACK);
    
    }

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

Você não chamou o método paint que faz a inicialização do JFrame.

Que mistureba. Normalmente você faria algo como:

package guj;

import java.awt.Color;
import java.awt.EventQueue;

import javax.swing.JFrame;

public class BlackBackground extends JFrame {

    /**
     * Inicia a aplicacao
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    BlackBackground frame = new BlackBackground();
                    // Note que setVisible não deve ser chamado dentro do construtor do JFrame
                    // Deve ser chamado por quem cria o JFrame
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Construtor do JFrame
     */
    public BlackBackground() {
        setSize(500, 500);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setBackground(Color.BLACK);
    }

}

Cuidado com o método “paint” - ele raramente precisa ser sobreescrito. Em um programa de iniciante, sobreescrever o método “paint” normalmente indica algum problema de conceito. E mesmo o “paintComponent” só deve ser sobreescrito se você souber o que está fazendo.

[quote=wagnerfrancisco]Você não chamou o método paint que faz a inicialização do JFrame.

[/quote]

Como eu poderia fazer para chamá-lo?

Não, deixe, já, fiz aqui… grato :slight_smile:

E nesse código aqui?

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

public class Backg {

    JFrame j = new JFrame("Pac - Man");
    Graphics2D g2d;
    
    /**
     *Inicializar...
     */
    public Backg(){
    
    j.add(null,g2d);
    j.setResizable(false);
    j.setVisible(true);
    j.setSize(500, 500);
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    g2d.setColor(Color.black);
}
    
    public static void main(String[] args) {
       
    }
}

Eu tô também com esse mesmo probleminha, aqui.

metodo main vazio…

Guilherme-san, normalmente você nunca instancia um JFrame e sim uma classe derivada dele, como no exemplo que você tentou mostrar.

Siga o exemplo que eu dei (e que foi modificado de um gerado pelo plugin WindowBuilder do Eclipse). Não fique inventando coisas.

E a propósito, dificilmente você usará o objeto Graphics ou Graphics2D em uma aplicação Swing, a menos que você precise, por algum motivo, criar um componente que você mesmo tenha de desenhar alguma coisa. Para pintar o fundo de um JFrame de preto, você não faz isso (não funciona direito), e sim pega o Content Pane e seta o background (tal como eu fiz no exemplo).

Graphics2D é usada comument em Jogos ou Desenhos em geral, nao faca modificacoes no seu componente por isso, pois a manutencao futura ficara prejudicada;.