S
Sven Z.
Gast
Hallo *.*,
ich habe mir eine kleine Swing-Anwendung geschrieben, die viele Statusmeldungen ausgibt. Damit das möglichst komfortabel und schön ist, habe ich mir dazu eine von JFrame abgeleitete Klasse geschrieben:
In meiner Applikation starte initialtisiere ich das Fenster folgendermaßen:
Anschließend knall ich im ms-Takt Nachrichten in mein Log-Fenster
Leider wird die JTextArea erst gefüllt, nachdem das ganze Programm durchgelaufen ist. Ich verstehe leider nicht warum das so ist, und vorallem, wie ich das verhindern könnte. Ich möchte nämlich das ich die Statusmeldungen sehe als bald ich sie zugefügt habe.
Ich hoffe ihr versteht mich und könnt mir irgendwie helfen! Ich würde mich darüber jedenfalls sehr freuen!
ich habe mir eine kleine Swing-Anwendung geschrieben, die viele Statusmeldungen ausgibt. Damit das möglichst komfortabel und schön ist, habe ich mir dazu eine von JFrame abgeleitete Klasse geschrieben:
Code:
public class WndLogging extends JFrame implements java.lang.Runnable
{
private javax.swing.JPanel jContentPane = null;
private javax.swing.JScrollPane jScrollPane = null;
private javax.swing.JTextArea taLogging = null;
public WndLogging()
{
super();
setVisible(false);
setResizable(false);
setTitle("Log-Window");
setLocation(545,100);
setSize(545, 328);
taLogging = new javax.swing.JTextArea();
jScrollPane = new javax.swing.JScrollPane();
jContentPane = new javax.swing.JPanel();
jScrollPane.setViewportView(taLogging);
jScrollPane.setBounds(0, 0, 537, 303);
jContentPane.setLayout(null);
jContentPane.add(jScrollPane, null);
setContentPane(jContentPane);
}
private String getFullFormat(String str)
{
String erg = null;
if (str.trim().length() == 1)
{
erg = new String("0"+str);
}
else
erg = new String(str);
return erg;
}
private String getDateTime()
{
StringBuffer sb = new StringBuffer("[ ");
java.util.Calendar rightNow = java.util.Calendar.getInstance();
String year = new String(""+rightNow.get(java.util.Calendar.YEAR));
String month = getFullFormat(new String(""+rightNow.get(java.util.Calendar.MONTH)));
String day = getFullFormat(new String(""+rightNow.get(java.util.Calendar.DAY_OF_MONTH)));
String hour = getFullFormat(new String(""+rightNow.get(java.util.Calendar.HOUR_OF_DAY)));
String minute = getFullFormat(new String(""+rightNow.get(java.util.Calendar.MINUTE)));
String second = getFullFormat(new String(""+rightNow.get(java.util.Calendar.SECOND)));
return sb.append(year).append("-").append(month).append("-").append(day).append(" ").append(hour).append(":").append(minute).append(":").append(second).append(" ] ").toString();
}
public void addMessage(String str)
{
StringBuffer sb = new StringBuffer(getDateTime());
if (str.indexOf("\n") == -1)
{
sb.append(str);
sb.append("\n");
taLogging.insert(sb.toString(),taLogging.getText().length());
return;
}
java.util.StringTokenizer st = new java.util.StringTokenizer(str,"\n");
if (st.countTokens()>0)
{
while (st.hasMoreTokens()) {
taLogging.insert(getDateTime()+st.nextToken()+"\n",taLogging.getText().length());
}
}
}
public void run() {
this.setVisible(true);
}
}
In meiner Applikation starte initialtisiere ich das Fenster folgendermaßen:
Code:
frmLogging = new WndLogging();
new Thread(frmLogging).start();
Anschließend knall ich im ms-Takt Nachrichten in mein Log-Fenster
Code:
frmLogging.addMessage("bla");
Leider wird die JTextArea erst gefüllt, nachdem das ganze Programm durchgelaufen ist. Ich verstehe leider nicht warum das so ist, und vorallem, wie ich das verhindern könnte. Ich möchte nämlich das ich die Statusmeldungen sehe als bald ich sie zugefügt habe.
Ich hoffe ihr versteht mich und könnt mir irgendwie helfen! Ich würde mich darüber jedenfalls sehr freuen!