abstract sclass DynPrintLog extends DynModule { transient JTextArea ta; transient Lock updatePrintLog_lock = lock(); transient StringBuilder actualPrintLog; JComponent visualize() { ret awtEvery( jSection("Log", ta = moveCaretToEnd(typeWriterTextArea(getPrintLog()))), 500, r updatePrintLog); } void updatePrintLog { // TODO: optimize lock updatePrintLog_lock; if (ta != null) setText(ta, getPrintLog()); } JTextArea myPrintLogComponent() { ret ta; } void enableWordWrap { enableWordWrapForTextArea(ta); } StringBuilder getPrintLog() { ret str(or(actualPrintLog, liveLocalPrintLog())); } }