hi leute,
ich habe mir eine java gui gschrieben, die via Runtime.exec() ein von mir gschriebenes kommandozeilenprogramm aufruft.
jetzt soll die kommandozeile immer abgegrast werden und der ausgegebene text in der gui in einem logfeld erscheinen.
soweit so gut, leider repainted mir die gui mein logfeld so lange nicht, bis mein kommandozeilenprogramm beendet ist (2-3 min).
den aufruf des prozesses habe ich jetzt in eine klasse gepackt die thread extended. jedoch wird die gui immer noch erst am ende neu gezeichnet.
in frame.log() steht das repaint der jeweiligen komponente drin. das sysout in der konsole wird ausgegeben, es erfolgt jedoch kein repaint.
was mache ich falsch?
anbei der thread der den prozess abwickelt, sowie die actionperformed die den thread aufruft.
danke für eure hilfe.
jperl
ich habe mir eine java gui gschrieben, die via Runtime.exec() ein von mir gschriebenes kommandozeilenprogramm aufruft.
jetzt soll die kommandozeile immer abgegrast werden und der ausgegebene text in der gui in einem logfeld erscheinen.
soweit so gut, leider repainted mir die gui mein logfeld so lange nicht, bis mein kommandozeilenprogramm beendet ist (2-3 min).
den aufruf des prozesses habe ich jetzt in eine klasse gepackt die thread extended. jedoch wird die gui immer noch erst am ende neu gezeichnet.
in frame.log() steht das repaint der jeweiligen komponente drin. das sysout in der konsole wird ausgegeben, es erfolgt jedoch kein repaint.
was mache ich falsch?
anbei der thread der den prozess abwickelt, sowie die actionperformed die den thread aufruft.
danke für eure hilfe.
jperl
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CLThread extends Thread
{
public CLThread(String cmd, ACRLSFrame frame)
{
this.cmd = cmd;
this.frame = frame;
}
public void run()
{
try
{
System.out.println(cmd);
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
BufferedReader buf = new BufferedReader(
new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line = buf.readLine()) != null)
{
System.out.println(line);
frame.log(line, ACRLSFrame.LOG_NORMAL);
frame.repaint();
}
pr.exitValue();
} catch (IOException e)
{
e.printStackTrace();
}
}
private String cmd;
private ACRLSFrame frame;
}
Code:
public void actionPerformed(ActionEvent arg0)
{
String cmd = "c:\\cygwin\\home\\jperl\\ACRLS\\bin\\acrls.exe c:\\input\\ c:\\output\\ 28 \""
+ foveaX.getText()
+ "\" \""
+ foveaY.getText()
+ "\" \""
+ eyePanel.getEye()
+ "\" \""
+ patientID.getText()
+ "\" \""
+ scanID.getText()
+ "\" \""
+ df.format(examDate)
+ "\" %d1001_os_sn6040 bmp %d bmp";
CLThread pr = new CLThread(cmd, ACRLSFrame.this);
pr.run();
}
}