Bom dia pessoal…
Desenvolvi um programa para captura de informações em um terminal 3270 da IBM e para testar os métodos da classe que faz essas capturas criei uma main que executa no console do Netbeans:
package models;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
import models.Capturador;
import models.ManipulaDatas;
public class TesteRobo {
public static void main(String [] args) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
protected Void doInBackground() {
try {
//para testar se a senha esta correta
boolean retornoOK = Capturador.iniciaRobo();
if(retornoOK){
Capturador.captura();
}
//não se esquça sempre de fechar o robo após realizar as capturas
CapturadorfechaRobo();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
return null;
}
};
worker.execute();
}
}[/code]
- O método iniciaRobo() passa uma tela de login e depois instancia uma janela que herda de JFrame (nela esta "embutido" um objeto Terminal 3270) e inicia o processo de logon do usuário.
- O método captura() faz a captura dos dados na tela e o método fechaRobo finaliza a instância do objeto e suas conexões;
- O programa utiliza o SwingWorker para que a janela criada rode em uma thread a parte para que o usuário possa ver as atualizações da tela do Terminal 3270
Ao executar o teste por esta classe no console o program rodou direitinho - a janela foi com o terminal 3270 foi instanciada e a captura dos dados foi realizada com sucesso.
Para fazer o mesmo teste por meio de um form criei pelo Netbeans um JFrame e inseri um botão para realizar a esta rotina novamente, utilizando o mesmo código testado anteriormente:
[code]
private void btnTesteActionPerformed(java.awt.event.ActionEvent evt) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
protected Void doInBackground() {
try {
//para testar se a senha esta correta
boolean retornoOK = Capturador.iniciaRobo();
if(retornoOK){
Capturador.captura();
}
//não se esquça sempre de fechar o robo após realizar as capturas
Capturador.fechaRobo();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
return null;
}
};
worker.execute();
}
[/code]
Quando realizei o teste com o form, a rotina funcionou normalmente até a tela de login, porém após a entrada do login e senha recebi um NullPointerException e ao depurar o código vi que a exceção estava ocorrendo dentro do método iniciaRobo, na linha de instanciação da classe:
[code]public static boolean iniciaRobo() {
login = new Login(null, true);
login.setLocation(40,40);;
String[] chaveSenha = login.getReturnStatus();
chave = chaveSenha[0];
senha = chaveSenha[1];
boolean retorno = true;
if (chave.equals("") || senha.equals("")) {
login = null;
JOptionPane.showMessageDialog(null, "Insira a Matrícula e Senha");
retorno = false;
} else {
try {
[color=red] sisbb = new Janela3270(); (linha do erro)[/color]
Não sei como resolver este problema, já que no console a rotina roda normal, mas ao utilizar uma interface gráfica a janela não é exibida…será que alguém poderia me dar uma luz?
Valeu…