⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textpanelappender.java

📁 实现在电脑平台上控制短信modem或手机进行通讯的jar包和相关实例
💻 JAVA
字号:
package org.apache.log4j.gui;import java.awt.Color;import java.awt.Image;import java.awt.Toolkit;import java.io.*;import java.net.URL;import java.util.Enumeration;import java.util.StringTokenizer;import java.util.Hashtable;import java.util.ArrayList;import javax.swing.JPanel;import org.apache.log4j.*;import org.apache.log4j.spi.LoggingEvent;import org.apache.log4j.helpers.Loader;import org.apache.log4j.helpers.QuietWriter;import org.apache.log4j.helpers.TracerPrintWriter;import org.apache.log4j.helpers.OptionConverter;/** * * @author James House */public class TextPanelAppender extends AppenderSkeleton {  TracerPrintWriter tp;  StringWriter sw;  QuietWriter qw;  LogTextPanel logTextPanel;  LogPublishingThread logPublisher;  final String COLOR_OPTION_FATAL = "Color.Fatal";  final String COLOR_OPTION_ERROR = "Color.Error";  final String COLOR_OPTION_WARN = "Color.Warn";  final String COLOR_OPTION_INFO = "Color.Info";  final String COLOR_OPTION_DEBUG = "Color.Debug";  final String COLOR_OPTION_BACKGROUND = "Color.Background";  final String FONT_NAME_OPTION = "Font.Name";  final String FONT_SIZE_OPTION = "Font.Size";  final String EVENT_BUFFER_SIZE_OPTION = "EventBuffer.Size";  public TextPanelAppender(Layout layout, String name) {    this.layout = layout;    this.name = name;    this.sw = new StringWriter();    this.qw = new QuietWriter(sw, errorHandler);    this.tp = new TracerPrintWriter(qw);    setLogTextPanel(new LogTextPanel());    logPublisher = new LogPublishingThread(logTextPanel, Priority.ERROR, 500);    //logPublisher = new LogPublishingThread(logTextPanel, null, 500);  }  public  void close() {  }  public void append(LoggingEvent event) {    String text = this.layout.format(event);    // Print Stacktrace    // Quick Hack maybe there is a better/faster way?    if (event.throwable!=null) {      event.throwable.printStackTrace(tp);      for (int i=0; i< sw.getBuffer().length(); i++) {        if (sw.getBuffer().charAt(i)=='\t')          sw.getBuffer().replace(i,i+1,"        ");      }      text += sw.toString();      sw.getBuffer().delete(0,sw.getBuffer().length());    }    else      if(!text.endsWith("\n"))        text += "\n";    logPublisher.publishEvent(event.priority, text);  }  public  JPanel getLogTextPanel() {    return logTextPanel;  }  public  String[] getOptionStrings() {    return new String[] { COLOR_OPTION_FATAL, COLOR_OPTION_ERROR,         COLOR_OPTION_WARN, COLOR_OPTION_INFO, COLOR_OPTION_DEBUG,         COLOR_OPTION_BACKGROUND, FONT_NAME_OPTION, FONT_SIZE_OPTION};  }  public  void setName(String name) {    this.name = name;  }  protected  void setLogTextPanel(LogTextPanel logTextPanel) {    this.logTextPanel = logTextPanel;    logTextPanel.setTextBackground(Color.white);  }  public  void setOption(String option, String value) {    if (option.equalsIgnoreCase(COLOR_OPTION_FATAL))      logTextPanel.setTextColor(Priority.FATAL,value);    if (option.equalsIgnoreCase(COLOR_OPTION_ERROR))      logTextPanel.setTextColor(Priority.ERROR,value);    if (option.equalsIgnoreCase(COLOR_OPTION_WARN))      logTextPanel.setTextColor(Priority.WARN,value);    if (option.equalsIgnoreCase(COLOR_OPTION_INFO))      logTextPanel.setTextColor(Priority.INFO,value);    if (option.equalsIgnoreCase(COLOR_OPTION_DEBUG))      logTextPanel.setTextColor(Priority.DEBUG,value);    if (option.equalsIgnoreCase(COLOR_OPTION_BACKGROUND))      logTextPanel.setTextBackground(value);    if (option.equalsIgnoreCase(FONT_SIZE_OPTION))      logTextPanel.setTextFontSize(Integer.parseInt(value));    if (option.equalsIgnoreCase(FONT_NAME_OPTION))      logTextPanel.setTextFontName(value);    if (option.equalsIgnoreCase(EVENT_BUFFER_SIZE_OPTION))      logTextPanel.setEventBufferSize(Integer.parseInt(value));    return;  }  public  boolean requiresLayout() {    return true;  }  class LogPublishingThread extends Thread {    LogTextPanel logTextPanel;    ArrayList evts;    Priority triggerPrio;    long pubInterval;    public LogPublishingThread(LogTextPanel logTextPanel, Priority triggerPrio, long pubInterval) {      this.logTextPanel = logTextPanel;      this.evts = new ArrayList(1000);      this.triggerPrio = triggerPrio;      this.pubInterval = pubInterval;      //this.setPriority(Thread.NORM_PRIORITY - 1);      this.start();    }    public void run() {      while(true) {        synchronized(evts) {          try {            evts.wait(pubInterval);          }          catch(InterruptedException e) {}          logTextPanel.newEvents((EventBufferElement[])evts.toArray(new EventBufferElement[evts.size()]));          evts.clear();        }      }    }    public void publishEvent(Priority prio, String text) {      synchronized(evts) {        evts.add(new EventBufferElement(prio, text));        if(triggerPrio != null && prio.isGreaterOrEqual(triggerPrio))          evts.notify();      }    }  }} // TextPaneAppenderclass EventBufferElement {  public String text;  public Priority prio;  public int numLines;  EventBufferElement(Priority prio, String text) {    this.prio = prio;    this.text = text;    numLines = 1;    int pos = pos = text.indexOf('\n', 0);    int len = text.length() - 1;    while( (pos > 0) && (pos < len) )      numLines++;      pos = text.indexOf('\n', pos + 1);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -