Olá, Estou com um probleminha sou novato em Java e OO, e estou desenvolvendo uma aplicação. No meio dela eu faço uma lista dos arquivos que estou pegando, esta funcionando, mas o pequeno problema é que ele processa tudo e exibe na tela tudo de uma vez. Eu gostaria q ele exibisse cada linha na Jtable assim que acabar de processá-la, pois qndo ele começa a processar dá a impressão que travou a aplicação e demora um poko msmo, +/- 9min para processar 20 arquivos e eu terei no mínimo uns 150 arquivos para prcessar (processar é buscar o caminho em uma tabela no banco, contar qntas linhas tem o arquivo, o tamanho do arquivo, renomear o arquivo), não queria q desse a impressão de travamento, por isso quero trazer cada linha após ter sido processada. Como posso fazer isto?? Segue abaixo o código:
public static void Listar() {
while (modelo.getRowCount() > 0) {
modelo.removeRow(0);
}
Date DateNow = new Date(); //Variavel com Data de Hoje
DateNow.setDate(DateNow.getDate() - 1); //Subtraindo Dias da Data Corrente
SimpleDateFormat FormatDate = new SimpleDateFormat("yyyyMMdd"); //Setando Formato da Data
String CurDate = FormatDate.format(DateNow);
DecimalFormat Decimal = new DecimalFormat("0.0");
Conectar();
try {
RSet = Stmt.executeQuery("Select * from Relatorios");
while (RSet.next()) {
int numLinhas = 0;
String tamanho = null;
File Arquivo = new File(RSet.getString("caminho").replace("yyyymmdd", CurDate));
if (Arquivo.exists()) {
long date = Arquivo.lastModified();
DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
String HourArq = fmt.format(date);
double size = Arquivo.length() * 1.0 / 1024;
long tamanhoArquivo = Arquivo.length();
FileInputStream fs = new FileInputStream(Arquivo);
DataInputStream in = new DataInputStream(fs);
LineNumberReader lineRead = new LineNumberReader(new InputStreamReader(in));
lineRead.skip(tamanhoArquivo);
numLinhas = lineRead.getLineNumber();
lineRead.close();
fs.close();
in.close();
if (size >= 1024) {
tamanho = Decimal.format(size / 1024) + " mb";
} else {
tamanho = Decimal.format(size) + " kb";
}
modelo.addRow(new Object[]{RSet.getString("cod_rel"), Arquivo.getName(), tamanho, numLinhas, HourArq + " hrs", Arquivo.getParent().replace("\\\\10.221.1.31\\d$\\ftpcorporativo", "")});
ok++;
} else {
modelo.addRow(new Object[]{RSet.getString("cod_rel"), Arquivo.getName(), tamanho, numLinhas, "", Arquivo.getParent().replace("\\\\10.221.1.31\\d$\\ftpcorporativo", "")});
erro++;
tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Object ref = table.getValueAt(row, 2);
if (ref == null) {
setForeground(Color.red);
} else {
setForeground(null);
}
return this;
}
});
}
resultTotal.setText("" + tabela.getRowCount());
resultOk.setText("" + ok);
resultErro.setText("" + erro);
}
RSet.close();
Connect.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}
erro = 0;
ok = 0;
}