Singleton ou .getInstance() não se aplica a esta classe. Por que?

0 respostas
M

Olá amigos,

costumo usar o padrão Singleton em alguns dos meus projetos, porém neste mesmo projeto só que apenas nesta classe não estou conseguindo aplicar este padrão. Segue abaixo parte do código da classe e da chamada da classe para que vocês possam me ajudar a encontrar o erro.

Ha, o que acontece é o seguinte, consigo utilizar esta classe normalmente na principal, ou seja, onde ela é carregada, porém em outras classes (como na última do exemplo abaixo) ela é carregada com os valores null.
public class AG_Dinamico implements Serializable, Cloneable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private Ambiente mAmbiente;
    private int tamPop;
    private int numGer;
    private double taxaMutacao;
    private double taxaCruzamento;
    private double taxaCruzamentoBB;
    private CromossomoD melhorIndv;
    private int minSensAtiv;
    private RedeSensor redeSensores;
    private ArrayList<Sensor> popSensores;
    private Saidas saidaAGdin;
    private String pastaSaida;
    private MediaSaida media;

    private static AG_Dinamico instanciaAG_Dinamico;

    //Método único para acesso único ao objeto (Singleton)
    public static AG_Dinamico getInstance() {
        if (instanciaAG_Dinamico == null) {
            instanciaAG_Dinamico = new AG_Dinamico();
        }
        return instanciaAG_Dinamico;
    }

    private AG_Dinamico(){
        
    }

    public AG_Dinamico(int tamPop, int numGer, double taxaMutacao,
            double taxaCruzamento, double taxaCruzamentoBB, RedeSensor rede,
            Ambiente mAmbiente, MediaSaida media, String pastaSaida) {

        this.tamPop = tamPop;
        this.numGer = numGer;
        this.taxaMutacao = taxaMutacao;
        this.taxaCruzamento = taxaCruzamento;
        this.taxaCruzamentoBB = taxaCruzamentoBB;
        this.redeSensores = rede;
        this.popSensores = rede.getPopSensores();
        this.melhorIndv = null;
        this.mAmbiente = mAmbiente;
        this.pastaSaida = pastaSaida;
        this.minSensAtiv = 1;

        this.media = media;
        this.instanciaAG_Dinamico = AG_Dinamico.getInstance();

    }
public class FramePrincipal extends javax.swing.JFrame {

    String saidaObjt = "C:\workspace\MapeamentoSensor\src\saidas\" + "result36Sens";
    AG_Dinamico AG_ObjGravado = AG_Dinamico.getInstance();
    int numeroDeSensores;

    /** Creates new form NewJFrame */
    public FramePrincipal() {
        super("Rede de Sensoriamento");
        executaAlgoritimo();
        initComponents();
        preencheTabelaSensores();
        preencheTabelaMatriz();
        preencheTabelaArestas();
    }

    public void executaAlgoritimo() {

        try {
            ObjectInputStream objectIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream(saidaObjt)));
            AG_ObjGravado = (AG_Dinamico) objectIn.readObject();
            objectIn.close();
            AG_ObjGravado.setPastaSaida("C:\workspace\MapeamentoSensor\src\saidas\");


            AG_ObjGravado.geraSaida(0);
            AG_ObjGravado.geraSaidaSens(0);
            numeroDeSensores = AG_ObjGravado.getRedeSensores().getNumSensAtual();

            for (int i = 0; i < this.numeroDeSensores; i++)
                System.out.println(AG_ObjGravado.getRedeSensores().getPopSensores().get(i).toString());


        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Erro de I/O.", "Erro!", JOptionPane.ERROR_MESSAGE);
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(this, "Classe não encontrada.", "Erro!", JOptionPane.ERROR_MESSAGE);
            ex.printStackTrace();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "Exceção lançada.", "Erro!", JOptionPane.ERROR_MESSAGE);
            ex.printStackTrace();
        }
    }
public class painel2D extends javax.swing.JPanel {

    /** Creates new form painel2D */
    public painel2D() {
        initComponents();
        this.setBackground(Color.white); //Altera a cor de fundo
        //this.setSize(10, 10); //Define um tamanho para o painel
    }

    //Este método é invocado para desenhar o Painel
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        //Cria um contexto gráfico com a área restrita dentro do JPanel
        Dimension size = getSize();  
        Graphics2D clip = (Graphics2D) g.create(getInsets().left,
                getInsets().top,
                getWidth() - getInsets().right,
                getHeight() - getInsets().bottom);

        //transforma a tela num plano cartesiano 100x100 com a origem no centro
        //faz com que a imagem seja distorcida proporcionalmente ao redimensionamento da janela
        clip.scale(size.width / 100d, size.height / 100d);
        clip.translate(50, 50);
        clip.scale(1, -1);//Transforma o eixo y em ascendente, ou seja, agora ele soma quando sobre e diminui quando desce

        //Instancia o Agm para posicionar as arestas na imagem
        AG_Dinamico agm = AG_Dinamico.getInstance();


        System.out.println("Teste  =  " + agm.getPastaSaida());
        //Pintando a comunicação dos sensores
        //Para todos os sensores da Rede
        for (int i = 0; i < agm.getRedeSensores().getNumSensInicial(); i++) {
            Sensor2D s = new Sensor2D(agm.getRedeSensores().getPopSensores().get(i));
            s.paintComunicacao(clip);
        }

        //Pintando a cobertura dos sensores
        //Para todos os sensores da Rede
        for (int i = 0; i < agm.getRedeSensores().getNumSensInicial(); i++) {
            Sensor2D s = new Sensor2D(agm.getRedeSensores().getPopSensores().get(i));
            s.paintCobertura(clip);
        }

        //Pintando as arestas
        //Para todos as arestas presente no algoritimo de Prim
        for (int i = 0; i < agm.getRedeSensores().getNumSensInicial(); i++) {
            //Se o sensor atual tiver antecedente no AgmPrim
            //Então será desenhada a aresta entre o sensor atual e o seu antecessor
            if(agm.getRedeSensores().getPopSensores().get(i).getSensorPai() != -1){
                Sensor atual = agm.getRedeSensores().getPopSensores().get(i);
                Sensor antecessor = agm.getRedeSensores().getPopSensores().get(agm.getRedeSensores().getPopSensores().get(i).getSensorPai());
                Aresta2D a = new Aresta2D(atual.getPosicaoX(), atual.getPosicaoY(), antecessor.getPosicaoX(),
                        antecessor.getPosicaoY(), agm.getRedeSensores().calculaDistancia(atual,
                        agm.getRedeSensores().getPopSensores().get(atual.getSensorPai())));
                a.paint(clip);
            }
        }

        //Desenha todos os sensores da Rede
        for (int i = 0; i < agm.getRedeSensores().getNumSensInicial(); i++) {
            Sensor2D s = new Sensor2D(agm.getRedeSensores().getPopSensores().get(i));
            s.paint(clip);
        }

        //Descarta a cópia do contexto gráfico
        clip.dispose();


    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 570, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 416, Short.MAX_VALUE)
        );
    }// </editor-fold>                        
    // Variables declaration - do not modify                     
    // End of variables declaration                   
}
Criado 27 de novembro de 2010
Respostas 0
Participantes 1