package uk.co.mmscomputing.util.log; import java.awt.*; import javax.swing.*; import javax.swing.text.*; import uk.co.mmscomputing.concurrent.*; public class LogBook extends JPanel{ static SimpleAttributeSet black, blue, green, red; JTextPane pane; Document doc; Semaphore blocker=new Semaphore(1,true); public LogBook(){this(false);} public LogBook(boolean redirectSystemErr){ pane=new JTextPane(); pane.setFont(new Font("Courier",Font.PLAIN,12)); doc=pane.getDocument(); setLayout(new BorderLayout()); add(new JScrollPane(pane),BorderLayout.CENTER); LogBookStream lbs=new LogBookStream(this); lbs.redirectSystemOut(); if(redirectSystemErr){lbs.redirectSystemErr();} System.out.println("Log started."); } private void write(String s, SimpleAttributeSet a){ try{ blocker.acquire(); doc.insertString(doc.getLength(),s,a); blocker.release(); }catch(Exception e){ // System.err.println(e.getMessage()); // System.err.println(s); } } public void write(final int level,final String s){ new Thread(){ public void run(){ switch(level){ case 0: write(s,black); break; case 1:case 2:case 3: write(s,blue); break; case 4:case 5:case 6: write(s,green); new Thread(){ public void run(){ try{ blocker.acquire(); JOptionPane.showMessageDialog(null, s.substring(s.indexOf('\t')), "Message", JOptionPane.ERROR_MESSAGE); blocker.release(); }catch(Exception e){} } }.start(); break; case 7:case 8:case 9: write(s,red); new Thread(){ public void run(){ try{ blocker.acquire(); JOptionPane.showMessageDialog(null, s.substring(s.indexOf('\t')), "Message", JOptionPane.ERROR_MESSAGE); blocker.release(); }catch(Exception e){} } }.start(); break; } repaint(); } }.start(); } static{ black=new SimpleAttributeSet(); StyleConstants.setForeground(black,Color.black); blue =new SimpleAttributeSet(); StyleConstants.setForeground(blue,Color.blue); green=new SimpleAttributeSet(); StyleConstants.setForeground(green,Color.green); red =new SimpleAttributeSet(); StyleConstants.setForeground(red,Color.red); } }