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

📄 swingio.java

📁 OSGI这是一个中间件,与UPNP齐名,是用于移植到嵌入式平台之上
💻 JAVA
字号:
/* * Copyright (c) 2003-2004, KNOPFLERFISH project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above *   copyright notice, this list of conditions and the following *   disclaimer in the documentation and/or other materials *   provided with the distribution. * * - Neither the name of the KNOPFLERFISH project nor the names of its *   contributors may be used to endorse or promote products derived *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */package org.knopflerfish.bundle.desktop.swing.console;import java.util.Vector;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.URL;import org.osgi.service.log.LogService;public class SwingIO extends JPanel {  JTextArea  text;  JTextField tfCmd;  int p0 = -1;  int p1 = 0;  String last = "";  InputStream origIn;  PrintStream origOut;  PrintStream origErr;  PipedOutputStream textSource;  TextReader       in;  PrintStream      out;  JPanel panel;  JScrollPane scroll;  Label  cmdLabel;  Vector history    = new Vector();  int    historyPos = 0;  StringBuffer lineBuff = new StringBuffer();  boolean bGrabbed = false;  int maxLines = new Integer(System.getProperty("org.knopflerfish.desktop.console.maxlines", "5000")).intValue();  void setSystemIO() {    boolean bDebugClass = "true".equals(System.getProperty("org.knopflerfish.framework.debug.classloader", "false"));    if(!bDebugClass) {      if(!bGrabbed) {        try {          ConsoleSwing.log(LogService.LOG_DEBUG, "grabbing system I/O...");          origIn  = System.in;          origOut = System.out;          origErr = System.err;          //    System.setIn(in);          System.setOut(new PrefixPrintStream(out, "[stdout] ",                                              ConsoleSwing.config.multiplexSystemOut ? System.out : null));          System.setErr(new PrefixPrintStream(out, "[stderr] ",                                              ConsoleSwing.config.multiplexSystemErr ? System.err : null));          bGrabbed = true;          ConsoleSwing.log(LogService.LOG_DEBUG, "...grabbed system I/O");        } catch (Exception e) {          ConsoleSwing.log(LogService.LOG_ERROR, "Failed to set IO", e);          bGrabbed = false;        }      }    }  }  void restoreSystemIO() {    //    synchronized(grabLock)      {      if(bGrabbed) {        ConsoleSwing.log(LogService.LOG_DEBUG, "restoring system I/O...");        try {          if(origIn != null) {            System.setIn(origIn);          }          if(origOut != null) {            System.setOut(origOut);          }          if(origIn != null) {            System.setErr(origErr);          }          ConsoleSwing.log(LogService.LOG_DEBUG, "...restored system I/O");          bGrabbed = false;        } catch (Exception e) {          ConsoleSwing.log(LogService.LOG_ERROR, "Failed to restore IO", e);        }      }    }  }  public SwingIO() {    super(new BorderLayout());    panel = this;    try {      text = new JTextArea("", 8, 80);      text.setEditable(false);      String bootText =        "Knopflerfish OSGi console. Copyright (c) 2004 Knopflerfish.";      // See if we're using the knopflerfish framework. If so, grab      // the boot string from the startup class      try {        Class mainClazz = Class.forName("org.knopflerfish.framework.Main");        bootText        = (String)mainClazz.getField("bootText").get(null);      } catch (Throwable e) {        bootText        = "";        //  e.printStackTrace();        // anything else defaults to the std boot text above      }      text.setText(bootText +       "\n\n" +       "Type 'help' for help or 'alias' for a list of common commands\n\n");      scroll = new JScrollPane(text,                               JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,                               JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);      tfCmd = new JTextField();      final KeyListener keyL = new KeyAdapter() {          public void keyPressed(KeyEvent ev) {            if(ev.getKeyCode() == KeyEvent.VK_UP) {              if(historyPos > 0) {                String line = (String)history.elementAt(historyPos-1);                historyPos--;                tfCmd.setText(line);              }            } else if(ev.getKeyCode() == KeyEvent.VK_DOWN) {              if(historyPos < history.size()-1) {                String line = (String)history.elementAt(historyPos+1);                historyPos++;                tfCmd.setText(line);              }            } else if(ev.getKeyCode() == KeyEvent.VK_ENTER) {              String line = tfCmd.getText();              if(!("".equals(line) ||                   "\n".equals(line) ||                   "\n\r".equals(line) ||                   "\r\n".equals(line))) {                history.addElement(line);                historyPos = history.size();              }              if("clear".equals(line)) {                clear();              } else if("quit".equals(line)) {                org.knopflerfish.bundle.desktop.swing                  .Activator.desktop.stopFramework();              } else {                // Try simple command expansion first                if(line.startsWith("!") && line.length() > 1) {                  String s2 = line.substring(1);                  String bestStr = "";                  for(int i = 0; i < history.size(); i++) {                    String s = (String)history.elementAt(i);                    if(s.startsWith(s2) || s.length() >= bestStr.length()) {                      bestStr = s;                    }                  }                  if(!"".equals(bestStr)) {                    line = bestStr;                  }                }                // ..and send to console via inputstream                String s = line + "\r\n";                text.append(s);                showLastLine();                if(in != null) {                  in.print(s);                  in.flush();                }              }              tfCmd.setText("");            }          }        };      tfCmd.addKeyListener(keyL);      // move focus away from text output to text input      // in key press      text.addKeyListener(new  KeyAdapter() {          public void keyPressed(KeyEvent ev) {            int modifiers = ev.getModifiers();            // Don't steal special key events like CTRL-C            if(modifiers == 0) {              tfCmd.requestFocus();            }          }        });      out = new PrintStream(new TextAreaOutputStream(this, text));      GridBagLayout gridbag = new GridBagLayout();      GridBagConstraints c = new GridBagConstraints();      panel.add(scroll,         BorderLayout.CENTER);      Panel cmdPanel = new Panel(new BorderLayout());      cmdLabel = new Label("> ");      cmdPanel.add(cmdLabel,        BorderLayout.WEST);      cmdPanel.add(tfCmd,           BorderLayout.CENTER);      panel.add(cmdPanel,        BorderLayout.SOUTH);      reinit();    } catch (Exception e) {      e.printStackTrace();    }  }  void clear() {    text.setText("");  }  void showLastLine() {    SwingUtilities.invokeLater(new Runnable() {      public void run() {        if (maxLines > 0) {          int linesToRemove = text.getLineCount() - maxLines;          int index = 0;          if (linesToRemove > 0) {            for (int i=0; i<linesToRemove; i++) {              index = text.getText().indexOf('\n', index) + 1;            }            text.setText(text.getText().substring(index));          }        }        JScrollBar bar = scroll.getVerticalScrollBar();        if(bar != null) {          int v = bar.getMaximum();          bar.setValue(v*2);        }      }    });  }  Font font;  synchronized void reinit() {    font = new Font(ConsoleSwing.config.fontName, Font.PLAIN, ConsoleSwing.config.fontSize);    text.setBackground(Config.parseColor(ConsoleSwing.config.bgColor));    text.setForeground(Config.parseColor(ConsoleSwing.config.textColor));    text.setFont(font);    tfCmd.setBackground(text.getBackground());    tfCmd.setForeground(text.getForeground());    tfCmd.setFont(text.getFont());    cmdLabel.setBackground(text.getBackground());    cmdLabel.setForeground(text.getForeground());    cmdLabel.setFont(text.getFont());  }  void start() {    stop();    in         = new TextReader();    setVisible(true);    if(ConsoleSwing.config.grabSystemIO) {      setSystemIO();    }  }  void stop() {    if(ConsoleSwing.config.grabSystemIO) {      restoreSystemIO();    }    setVisible(false);    if(in != null) {      in.close();      in = null;    }  }}

⌨️ 快捷键说明

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