JApplet não aparece no browser

7 respostas
S

Viva.
Tenho uma classe Applet.java que utiliza outras classes.
O objecto Panel vem da classe Panel.java e é um JPanel que por sua vez vai ter dentro vários componentes, entre eles outro JPanel que está na classe Arrow.java. No browser apenas aparece um JPanel a cinzento, ou seja, vazio. :(
Em relação ao código HTML acho que está correcto, por isso o problema deve estar na classe JApplet.

O código é o seguinte:

import java.awt.Color;
import java.io.BufferedReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JApplet;
import javax.swing.SwingUtilities;

public class Applet extends JApplet {
    Vector v;
    Arrows a;
    
    public void init() {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
        } catch (InterruptedException ex) {
            Logger.getLogger(Applet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(Applet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void createGUI() {
        Grafo g = new Grafo();
        BufferedReader buf_file = null;
        String file = new String("grafo.txt");
        buf_file = g.abre_ficheiro(file);

        if (buf_file == null) {
            return;
        }

        try {
            g.guarda_vector(buf_file);
        } catch (IOException ex) {
            Logger.getLogger(Applet.class.getName()).log(Level.SEVERE, null, ex);
        }

        v = g.getVector();
        Panel p = new Panel(v);
        p.setOpaque(true);
        p.setBackground(Color.white);
        setContentPane(p);
}

    public void start() {
        System.out.println("starting... ");
    }

    public void stop() {
        System.out.println("stopping... ");
    }

    public void destroy() {
        System.out.println("preparing for unloading...");
    }
}

Agradeço desde já a vossa ajuda.
Abraço

7 Respostas

UMC

mano sugiria que vc chamasse o metodo createGUI() no outro start()
ficando assim:

public void start() { System.out.println("starting... "); createGUI() ; }
vlw

S

Obrigado pela resposta UMC. No entanto, não resolveu o meu problema :frowning: .
Se alguém estiver disponível para falar comigo por msn envie o seu contacto por mensagem privada, pois tenho urgência na resolução do problema e a comunicação assincrona no forum torna a resolução mais demorada.
Abraço a todos

M

Se puder postar todo o projeto (em um arquivo comprido) ajudaria para que possamos ver todo o código.

Eu sei que a comunicação é mais lenta no fórum (aqui no GUJ, não é muito lento :slight_smile: ) mas por aqui mais pessoas podem ajudar.

S

Não posso postar o projecto completo porque o projecto está ligado a uma empresa e não me autorizam a divulgar o código. Haverá hipótese de a applet não aparecer no browser por não ter o método paint? No Panel é criado 1 painel que por sua vez tem o método paintComponent dentro dele. Isso basta para que a applet seja bem desenhada ou faltará alguma coisa?
Abraço a todos

M

Não é esse o problema. Um JApplet pode ser comparado com um JFrame (por ambos serem um top-level containter): basta adicionar os componentes nele (os paineis, por exemplo) e as coisas devem funcionar.

O paintComponent só é necessário quando se faz a renderização manual do componente. Portanto, deveria funcionar.

Como comentário alheio à sua dúvida, você está usando Vector no código. Essa é uma classe antiga e caindo cada vez mais em desuso (devido à problemas com performance, falta de consistência de métodos e baixa compatibilidade com a API de Collections). Se possível, troque isso por um List (e aproveite para implementar Generics). Nunca é tarde para um bom refactoring!

S

Então não consigo perceber porque é que a applet não aparece no browser. Poderá ter a ver com as definições do browser?
Em relação ao seu conselho sobre a utilização de Lists, vou fazer esse refactoring. Obrigado pelo conselho :P.
Abraço

S

Já fiz o refactoring que aconselhaste. Continuo com o mesmo problema na JApplet. Alguém por ai que me possa ajudar?
Abraço a todos

Criado 24 de dezembro de 2009
Ultima resposta 30 de dez. de 2009
Respostas 7
Participantes 3