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
}