Erro no código

Beleza pessoal?

Fiz um programa para desenhar alguns triangulos, um dentro do outro - sierpinski -.

Uso o NetBeans 3.5 e o programa compilou e… compilou. Nao apareceu o frame, os triangulos e uma frase de erro sequer, apenas:

Exception in thread “main” java.lang.NoClassDefFoundError: Projeto_Triangulos/Triangulo (wrong name: Triangulo)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

Preciso de ajuda, pois nao está facil!!!

Aqui vai o codigo:

import java.awt.*;
import javax.swing.JFrame;
import java.awt.geom.*;
public class Triangulo extends Frame{
  private float lado = 600; // lado deve ser de no max 1000      
    public static void main(String[] args)
    {
        Triangulo novo_painel = new Triangulo();
        JFrame frame = new JFrame("Triangulos em java");
	frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(novo_painel);
        frame.setSize(1000, 500);
        frame.setVisible(true);
        novo_painel.resize(1024,600);           // definicao           
        novo_painel.show();                   // exibir
    }

    private Point2D.Double pontoMedio(Point2D.Double p1, Point2D.Double p2) 
    {
        Point2D.Double ponto_medio = new Point2D.Double();
        ponto_medio.x = (500+500-lado/2)/2;
        ponto_medio.y = (50+50+lado*0.866)/2;
        return ponto_medio;
    }
    
     public void paintComponent(Graphics gfx) 
    {
        //super.paintComponent(gfx);
        Graphics2D g = (Graphics2D) gfx;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
        Point2D.Double A = new Point2D.Double(500,50);
	Point2D.Double B = new Point2D.Double(500-lado/2,50+lado*0.866);
        Point2D.Double C = new Point2D.Double(500+lado/2,50+lado*0.866);
                
        desenhar(g,5,A,B,C);
    }
    
    
    private int desenhar(Graphics2D g, double vezes, Point2D.Double A, Point2D.Double B,Point2D.Double C)  {   
        Line2D.Double linhaAB = new Line2D.Double(A, B);
        Line2D.Double linhaAC = new Line2D.Double(A, C);
        Line2D.Double linhaBC = new Line2D.Double(B, C);
                               
        g.draw(linhaAB);
        g.draw(linhaAC);
        g.draw(linhaBC);
                
        Point2D.Double npA = new Point2D.Double();
        Point2D.Double npB = new Point2D.Double();
        Point2D.Double npC = new Point2D.Double();
                
        npA = pontoMedio(A,B);
        npB = pontoMedio(A,C);
        npC = pontoMedio(B,C);
                                        
        vezes--;
        if (vezes>0) {
            return desenhar(g,vezes,npA,npB,npC);
        }
        else  {
            return 0;    
        }
     }
}

Se alguem tiver uma ideia sobre como se pode resolver o problema,por favor, ajude!

rdgborba@bol.com.br

Valeu e desde ja obrigado! [/u]

Verifique se o arquivo .java chama Triangulo.java e se vc está rodando o arquivo correto no NetBeans

Estou de volta com boas notícias!!!

Para aqueles que enfrentam problemas parecidos com o meu, ja consegui minimizar o problema!

Embora a solucao seja a mais ridicula possivel, é tendo experiencia nos erros que ficamos fortes para acertar!

Bom, eu simplismente percebi que nao havia colocado o folder onde o arquivo se encontra, daí talvez ele nao o tenha encontrado na hora de executar.

Coloquei “Package Projetos_Triangulos;” antes dos imports.

Entretanto, ainda existem mensagens indecifráveis, agora só 3:

Exception in thread “main” java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.addImpl(Container.java:616)
at java.awt.Container.add(Container.java:307)
at Projeto_Triangulos.Triangulo.main(Triangulo.java:22)

Se alguem puder ajudar, eu agradeço. Valeu!

Acho q o erro está na linha:

[ccode] frame.getContentPane().add(novo_painel); [/code]

Pq?

frame é do tipo JFrame, o método getContentPane() retorna um Container, e o método add do container requer um Component como parâmetro, mas vc está passando um Triangulo…

  Triangulo novo_painel = new Triangulo(); 

Se vc fizer

 Frame novo_painel = new Triangulo(); 

Acho q resolve esse problema, pois aí novo_painel é uma referencia para um Frame, que é um Component. E vc pode fazer isso pois Triangulo é um Frame (extende ele)

Só uma pergunta, pq q vc não faz a classe Triangulo extender de JFrame??? Não seria mais cômodo?

jasonchance,

esqueça o q tinha falado, disse muita besteira, não sei onde estava com a cabeça. Faz o seguinte, usa JFrame direto, e substitua o método paintComponent pelo método paint. Seu código vai ficar assim:

[code]import java.awt.;
import javax.swing.JFrame;
import java.awt.geom.
;
public class Triangulo extends JFrame{
private float lado = 600; // lado deve ser de no max 1000
public static void main(String[] args)
{
Triangulo novo_painel = new Triangulo();
novo_painel.setTitle(“Triangulos em java” );
novo_painel.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
novo_painel.setSize(1000, 500);
novo_painel.setVisible(true);
novo_painel.show(); // exibir
}

private Point2D.Double pontoMedio(Point2D.Double p1, Point2D.Double p2) 
{ 
    Point2D.Double ponto_medio = new Point2D.Double(); 
    ponto_medio.x = (500+500-lado/2)/2; 
    ponto_medio.y = (50+50+lado*0.866)/2; 
    return ponto_medio; 
} 

 public void paint(Graphics gfx) 
{ 
    //super.paintComponent(gfx); 
    Graphics2D g = (Graphics2D) gfx; 
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
    
    Point2D.Double A = new Point2D.Double(500,50); 

Point2D.Double B = new Point2D.Double(500-lado/2,50+lado0.866);
Point2D.Double C = new Point2D.Double(500+lado/2,50+lado
0.866);

    desenhar(g,5,A,B,C); 
} 


private int desenhar(Graphics2D g, double vezes, Point2D.Double A, Point2D.Double B,Point2D.Double C)  {    
    Line2D.Double linhaAB = new Line2D.Double(A, B); 
    Line2D.Double linhaAC = new Line2D.Double(A, C); 
    Line2D.Double linhaBC = new Line2D.Double(B, C); 
                            
    g.draw(linhaAB); 
    g.draw(linhaAC); 
    g.draw(linhaBC); 
            
    Point2D.Double npA = new Point2D.Double(); 
    Point2D.Double npB = new Point2D.Double(); 
    Point2D.Double npC = new Point2D.Double(); 
            
    npA = pontoMedio(A,B); 
    npB = pontoMedio(A,C); 
    npC = pontoMedio(B,C); 
                                    
    vezes--; 
    if (vezes>0) { 
        return desenhar(g,vezes,npA,npB,npC); 
    } 
    else  { 
        return 0;    
    } 
 } 

} [/code]

[]'s
carisio