Objeto de classe do Tipo Boolean troca de valor automaticamente

Buenas!!

Tenho um método que constroi PDF, onde se desejo criar o relatório com novas informações, passo um primitivo boolean com valor TRUE, senão apenas chamo o método sem passar a variável primitiva boolean. O que ocorre é que quando não quero o relatório com novas informações no PDF, chamo o método controiPDF()sem passar a variável primitiva boolean, que internamente chama o método geraPdf() sem passar a variável primitiva. Este método geraPDf() esta em uma classe que possui uma variável de classe do tipo object Boolean que é inicializada como FALSE. Esta variável é usada somente internamente dentro da classe para montar o relatório como as novas informações, caso seja TRUE. A única forma desta variável ser TRUE é chamando o método controiPDF()passando o parâmetro boolean, que irá chamar o método gerarPDF()passando boolean, onde dentro deste método o meu objeto Boolean recebe o valor passado. O que esta ocorrendo é que de vez em quando, não sempre, meu PDF esta sendo montado com as informações novas, sem chamar os métodos passando a variável boolean. Repito, quando chamo estes métodos, sem passar parâmetro, a variável de classe é FALSE, porém se inicia TRUE am alguns casos. O que pode estar ocorrendo??

Inicialização da variável global da classe que contém o método geraPDF(), quando classe é carregada

private Boolean objFormatoNovo = new Boolean(false);

Carregamento da classe, quando formato é TRUE
this.objFormatoNovo = new Boolean(formatoNovo);

Verificação da variável de classe:

if (this.objFormatoNovo.booleanValue()) { pdfNovo(true); } else { pdfAntigo(false); }

Não se ficou claro? Qualquer coisa, estou a disposição para maiores esclarecimentos.

Grato.

:DCajava

Nesse código que você postou, quais são as variáveis que estão “trocando de valor”?

Pelo o que estou vendo e entendendo (me corrija se eu estiver errado), nas linhas de código abaixo

if (this.objFormatoNovo.booleanValue()) {
pdfNovo(true);
} else {
pdfAntigo(false);
}

a solução mais completa seria esta abaixo:

if (this.objFormatoNovo.booleanValue()) {
pdfNovo(true);
pdfAntigo(false);
} else {
pdfAntigo(true);
pdfNovo(false);
}

Era esse o problema ou eu entendi errado?

Bom dia mrapha!

Muito obrigado pelo seu retorno, na realidade o que acontece é o seguinte:
Tenha uma página jsp que chama o método “controiPDF()” de uma classe java. Este método possui duas formas, um sem passar o parâmetro booleano, “controiPDF()”, outro com o parâmetro booleano “controiPDF(TRUE)”. Este método com parâmetro boolean, só é chamado quando montar relatório com novas informações. O que ocorre de vez em quando, é que estou chamando o “controiPDF()” sem passar o campo booleano e dentro deste método é chamado outro método de uma outra classe Java, chamado geraPDF() que possui a mesma situação que o constroiPDF(), ou seja, nesta situação é chamado o método geraPDF() sem passar o booleano. Nesta classe do método gerarPDF() a variável de classe objFormaNovo é inicializada na instancia da classe com FALSE, porém quando á chamado o método “gerarPDF(TRUE)”, este objeto de classe recebe TRUE. Veja exemplo novamente:

Inicialização do objeto de classe quando classe é instanciada:

private Boolean objFormatoNovo = new Boolean(false);  

OBS.: Isto ocorre quando classe é inicializada. Exemplo:

Classe classe = new Classe();

Na realidade esta classe é inicializada recebendo um objeto RMI, ou seja a classe que possui o método geraPDF(), que conforme a chamada da classe controiPDF(), vai obter o parâmetro TRUE ou não.

Respondendo sua pergunta, abaixo variável que troca de valor, quando método “gerarPDF(formato)” é chamado:

[code]public void gerarPDF(formato) {
if (formato) {
//Objeto de classe
this.objFormatoNovo = new Boolean(formato);
}
gerarPDF();

}[/code]
OBS.: quando é chamado o método gerarPDF(formato), passando parâmetro boolean, este sempre é TRUE.

O outro trecho de código enviado, nada mais é que o resultado do objeto booleano de classe. Se for TRUE, construirá o PDF com novas informações:

public void gerarPDF() { if (this.objFormatoNovo.booleanValue()) { pdfNovo(true); } else { pdfAntigo(false); } }
Problema: Chamo o método controiPDF(), que chama o método gerarPDF(), ambos sem passar parâmetro booleano, ou seja PDF sem informações novas, porém quando chega no trecho de código acima objFormatoNovo esta como TRUE.

Espero ter deixado mais claro.

Grande Abraço!!

Olá, agora ficou claro o problema. Você pode fornecer a o código da classe para eu ver onde está o erro?

Abraços

[code]public class TesteImpl extends UnicastRemoteObject implements Teste{

private Boolean objFormatoNovo = new Boolean(false);

static {
    String template = TesteImpl.getTemplate();

}


public TesteImpl() throws RemoteException {
    super();
}

public void gerarRelatorio() throws Exception {

        //O que ocorre é que as vezes o objFormatNovo vem como
         //TRUE, sem chamar gerarRelatorio(TRUE).
       synchronized (this.objFormatoNovo) {           
        	if (this.objFormatoNovo.booleanValue()) {
        		carregaTamanho(true);
        	} else {
        		carregaTamanho(false);
        	}
       }


            	synchronized (this.objFormatoNovo) {
                        		if (this.objFormatoNovo.booleanValue()) {
                        			this.imprimeCabecalhoNovo();
                        		} else {
                        			this.imprimeCabecalho();
                        		}
		}


}

public void gerarRelatorio(boolean formatoNovo) throws Exception {

        synchronized (this.objFormatoNovo) {
            this.objFormatoNovo = new Boolean(formatoNovo);
        }

        gerarRelatorio();      
}


private void imprimeCabecalho() {
}


private void imprimeCabecalhoNovo() {

}


private void imprimeNovo() {
}


private void imprime() {

}


private JCPageTable imprimeConteudo() {          

           	synchronized (this.objFormatoNovo) {
            		if (this.objFormatoNovo.booleanValue()) {
            			linha = this.imprimeNovo();
            		} else {
            			linha = this.imprime();
            		}
	}           
    
}

private static String getTemplate() {
	
}    


private void carregaTamanho(boolean formatoNovo) throws Exception {
	
	if (formatoNovo) {
	
} else {

}

}

}[/code]

Acima código da classe!

Eu não localizei nesta classe os métodos citados no seu post anterior, essa classe está correta mesmo?
Abraços