Fala pessoal, tudo certo? eu estou tentando fazer um “log” que a medida que vai processando os dados por baixo dos panos o usuário vai vendo na telinha o que esta acontecendo pra não pensar que está travado… A ideia é simples, e a execução eu imaginei que seria também, porém, já tentei usar threads pra view e pro método que popula a tabela mas não consigo, depois que finaliza a emissão ele mostra na tela o que aconteceu, e eu preciso que seja em tempo real, alguém teria uma luz para mim?
Método que popula a textArea
public static void setTextForLoaderViewNFCe(String informacao) {
StringBuilder builder = new StringBuilder();
String textoEspelhoNotaFiscal = null;
builder.append(informacao);
textoEspelhoNotaFiscal = builder.toString();
LoaderViewNFCe.getLoaderViewNFCe().textAreaNotificacaoNFCe.insert(textoEspelhoNotaFiscal,
LoaderViewNFCe.getLoaderViewNFCe().textAreaNotificacaoNFCe.getCaretPosition());
LoaderViewNFCe.getLoaderViewNFCe().textAreaNotificacaoNFCe.append("\n");
LoaderViewNFCe.getLoaderViewNFCe().textAreaNotificacaoNFCe.update(LoaderViewNFCe.getLoaderViewNFCe().textAreaNotificacaoNFCe.getGraphics());
}
JFrame da view do “Loader”
public class LoaderViewNFCe extends JFrame{
private static final long serialVersionUID = 1L;
private static LoaderViewNFCe loaderViewNFCe;
private JPanel panelExternal;
private JPanel panelWithComponents;
public JTextArea textAreaNotificacaoNFCe;
private JLabel lblEmitindoNFCe;
/*
* Create the application.
*/
public LoaderViewNFCe() {
initialize();
}
/*
* Initialize the contents of the frame.
*/
private void initialize() {
this.setBounds(100, 100, 330, 215);
this.setIconImage(Toolkit.getDefaultToolkit().getImage("./db/resources/images/icone.png"));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setUndecorated(true);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.getContentPane().setLayout(null);
this.getContentPane().add(getPanelExternal());
this.setBackground(new Color(0,0,0,0));
setLoaderViewNFCe(this);
}
private JPanel getPanelExternal() {
if(panelExternal == null) {
panelExternal = new RoundedPanel(15);
panelExternal.setOpaque(false);
panelExternal.setBackground(new Color(48, 61, 108));
panelExternal.setBounds(0, 0, 331, 216);
panelExternal.setLayout(null);
panelExternal.add(getPanelWithComponents());
}
return panelExternal;
}
private JPanel getPanelWithComponents() {
if(panelWithComponents == null) {
panelWithComponents = new RoundedPanel(15);
panelWithComponents.setOpaque(false);
panelWithComponents.setBackground(new Color(135, 158, 208));
panelWithComponents.setBounds(5, 5, 321, 206);
panelWithComponents.setLayout(null);
panelWithComponents.add(getTextAreaNotificacaoNFCe());
panelWithComponents.add(getLblEmitindoNfce());
}
return panelWithComponents;
}
private JTextArea getTextAreaNotificacaoNFCe() {
if(textAreaNotificacaoNFCe == null) {
textAreaNotificacaoNFCe = new JTextArea();
textAreaNotificacaoNFCe.setEditable(false);
DefaultCaret caret = (DefaultCaret) textAreaNotificacaoNFCe.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM);
textAreaNotificacaoNFCe.setRows(1);
textAreaNotificacaoNFCe.setTabSize(15);
textAreaNotificacaoNFCe.setBackground(new Color(220, 227, 250));
textAreaNotificacaoNFCe.setBounds(5, 49, 311, 152);
textAreaNotificacaoNFCe.setFont(new Font("Tahoma", Font.PLAIN, 14));
}
return textAreaNotificacaoNFCe;
}
private JLabel getLblEmitindoNfce() {
if(lblEmitindoNFCe == null) {
lblEmitindoNFCe = new JLabel("Imprimindo NFCe");
lblEmitindoNFCe.setFont(new Font("Tahoma", Font.BOLD, 16));
lblEmitindoNFCe.setHorizontalAlignment(SwingConstants.CENTER);
lblEmitindoNFCe.setBounds(74, 11, 163, 28);
}
return lblEmitindoNFCe;
}
public static LoaderViewNFCe getLoaderViewNFCe() {
return loaderViewNFCe;
}
public void setLoaderViewNFCe(LoaderViewNFCe loaderViewNFCe) {
LoaderViewNFCe.loaderViewNFCe = loaderViewNFCe;
}
}
Ultimo tipo de tentativa de chamada do método(Também não funcionou)
new Thread(new Runnable() {
public void run() {
LoaderViewNFCe loaderNFCe = new LoaderViewNFCe();
loaderNFCe.setVisible(true);
}
}).start();
new Thread(new Runnable() { public void run() { PopulaLoaderViewNFCe.setTextForLoaderViewNFCe("Configurando NFCe para emissão..."); } }).start();
desde já agradeço se alguém puder me ajudar a resolver isso.