Estou desenvolvendo um aplicativo em Java que executa um processo externo (ele roda um programa escrito em Clipper 5). Pra manter esse tipo de aplicação (em Clipper) rodando sobre o win2k e winXP é necessário usar de bibliotecas que permitam o YIELD para liberar o uso de CPU.
A aplicação em Clipper rodando sozinha não consome além 15% de CPU (monitorado pelo Gerenciador de Tarefas, guia Desempenho). O programa roda normalzinho.
Quando executado pela interface do aplicativo em Java (Swing), o aplicativo também entra e permanece normal (entre 1% e 5% de uso de CPU). Quando a opção que executa o processo externo é chamada, o uso de CPU sobe a 100%…; o processo externo termina (eu sei porque capturo o stream do processo e o mapeio com pipes para um JTextArea) e uso de CPU continua a 100% e não baixa!!
Um pedaço do código que executa o processo externo é esse:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd, null, fpath);
StreamConsumer errConsumer =
new StreamConsumer(proc.getErrorStream(), "err", true);
StreamConsumer outConsumer =
new StreamConsumer(proc.getInputStream(), ">", false);
errConsumer.start();
outConsumer.start();
proc.waitFor();
Eu não sei bem o que fazer.
Logo após o proc.waitFor() eu coloquei um System.gc(). Ele baixa o consumo de 100% para cerca 50% quando o processo externo termina…; mas sobe de novo para 100% em seguida e não baixa mais!
Alguém tem alguma idéia do que possa ser?
Obrigado.