Em 99% dos casos, você não precisa de um método static. Dá para contar nos dedos quantos desse existem no programa. E mais ainda, quantos deles não são fábricas.
Se seu método for static, você terá que passar por parâmetro o JFrame ou JDialog que está abrindo o JOptionPane, e usa-lo no lugar do this.
public class BemaECF {
public static void analisaRetorno(){
switch(iRetorno){
case 0:
JOptionPane.showMessageDialog(null, "Erro de Comunicação.");
break;
}
}
}
public class Vendas extends JFrame{
// Aqui tenho um JButtom que chama o JDialog
}
public class Fechamento extends javax.swing.JDialog {
public Fechamento(Vendas parent, boolean modal) {
super(parent, modal);
this.venda = parent; // Aqui ja estou passando o JFRame
}
// aqui tenho um botao que chama o metodo analisaRetorno()
}
Duvida: qdo chamo este metodo a mensagem fica no JFrame e nao no JDialog, qdo fecho JDialog ai aparece a mensagem “Erro de comunicação”.
o q da pra fazer??
Valeu.
Você teria que criar uma versão alternativa para seus métodos:
public static void analisaRetorno(JDialog dialog){
switch(iRetorno){
case 0:
JOptionPane.showMessageDialog(dialog, "Erro de Comunicação.");
break;
}
}
Outra alternativa é, ao invés de mostrar os dialogs diretamente na classe, disparar uma Exception:
public static void analisaRetorno() throws BematecException{
switch(iRetorno){
case 0:
throw new ErroDeComunicacaoException("Erro de Comunicação.");
break;
}
}
Eu gosto mais da segunda opção. Ela mantém o texto na camada de view, não forçando que a dll dispare uma JOptionPane. É particularmente útil se vc depois quiser criar um serviço que use essa dll (sem tela gráfica), ou mesmo um método para fazer algo via console.