2011-03-18 87 views

回答

0

謝謝!一個簡單的println重定向到新的printstream就可以做到。這是代碼。該類將創建一個內部框架,該框架將顯示包含所有sysout和syserr語句的文本區域。

public class ConsoleFrame extends JInternalFrame 
{ 
    JTextArea outArea = new JTextArea(300,300); 
    static JInternalFrame cons; 
    public ConsoleFrame() 
    { 
    JScrollPane pain = new JScrollPane(outArea); 
    //pain.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
    this.add(pain); 
    this.setVisible(true); 
    this.setSize(785,255); 
    this.setTitle("Groovy Console"); 
    this.closable = false; 
    this.maximizable = false; 
    this.isSelected = true; 
    this.resizable = false; 
    BasicInternalFrameUI ui = (BasicInternalFrameUI)this.getUI(); 
    Component north = ui.getNorthPane(); 
    MouseMotionListener[] actions = 
    (MouseMotionListener[])north.getListeners(MouseMotionListener.class); 

    for (int i = 0; i < actions.length; i++) 
    north.removeMouseMotionListener(actions[i]); 

    this.setFocusable(false);  
    System.setOut(new PrintStream(new JTextAreaOutputStream(outArea))); 
    System.setErr(new PrintStream(new JTextAreaOutputStream(outArea))); 
    setConsole(this); 
    } 


    static public JInternalFrame getConsole(){ 
     return cons; 
    } 
    public void setConsole(JInternalFrame console){ 
     cons = console; 
    } 
    public class JTextAreaOutputStream extends OutputStream { 
    JTextArea ta; 

    public JTextAreaOutputStream(JTextArea t) { 
     super(); 
     ta = t; 
    } 

    public void write(int i) { 
     ta.append(Character.toString((char)i)); 
    } 

    public void write(char[] buf, int off, int len) { 
     String s = new String(buf, off, len); 
     ta.append(s); 
    } 

    } 

} 
1

您的解決方案將取決於您如何實例化groovyConsole以及如何以及爲何要訪問它。

當您說內容時,是指從控制檯運行腳本或在控制檯本身的編輯器區域顯示的腳本的輸出?

請注意,groovy控制檯本身使用一個swing builder實例化的textareas和編輯器窗格集。請參閱源代碼:http://svn.codehaus.org/groovy/trunk/groovy/groovy-core/src/main/groovy/ui/Console.groovy

請參閱如何創建控制檯的主要方法。如果你在你自己的代碼中這樣做,並保持對控制檯對象的引用,你應該能夠訪問各種文本區域的內容。

相關問題