2010-01-24 7 views
2

J'ai deux visionneuses, l'un a un texte pour l'entrée de l'utilisateur et l'autre visionneuse est la vue de la console built_in d'Eclipse. Et je vais exécuter un programme Java en fonction de l'entrée de l'utilisateur, et je veux afficher les informations du journal dans la ConsoleView. Est-ce que quelqu'un sait Comment puis-je rediriger la sortie vers Console View?(Eclipse RCP) Comment rediriger la sortie vers Console View?

Merci

Répondre

1

SO des questions How to write a hyperlink to an eclipse console from a plugin et writing to the eclipse console donnent exemple de redirection vers la console.

Le blog Displaying the console in your RCP application

alt text

Les idées restent à créer un OuputStream et ouvrir un nouveau Console ou associer le MessageStream d'une console à stdout adn stderr (comme mon previous answer)

+0

Je suis votre méthode, mais malheureusement, le journal des messages démontrerai dans la console, mais la sortie de System.out ne peut pas afficher dans la console. – zjffdu

0

Rediriger la sortie sur Console RCP:

import java.io.IOException; 
import java.io.OutputStream; 
import java.io.PrintStream; 

import javax.annotation.PostConstruct; 

import org.eclipse.e4.ui.di.Focus; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.DisposeEvent; 
import org.eclipse.swt.events.DisposeListener; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Text; 

public class ConsoleView { 
    private Text text; 

    @PostConstruct 
    public void createPartControl(Composite parent) { 
     text = new Text(parent, 
       SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); 

     OutputStream out = new OutputStream() { 
      StringBuffer buffer = new StringBuffer(); 

      @Override 
      public void write(final int b) throws IOException { 
       if (text.isDisposed()) 
        return; 
       buffer.append((char) b); 
      } 

      @Override 
      public void write(byte[] b, int off, int len) throws IOException { 
       super.write(b, off, len); 
       flush(); 
      } 

      @Override 
      public void flush() throws IOException { 
       final String newText = buffer.toString(); 
       Display.getDefault().asyncExec(new Runnable() { 
        public void run() { 
         text.append(newText); 
        } 
       }); 
       buffer = new StringBuffer(); 
      } 
     }; 

     System.setOut(new PrintStream(out)); 
     final PrintStream oldOut = System.out; 

     text.addDisposeListener(new DisposeListener() { 
      public void widgetDisposed(DisposeEvent e) { 
       System.setOut(oldOut); 
      } 
     }); 
    } 

    @Focus 
    public void setFocus() { 
     text.setFocus(); 
    } 
} 

La capture d'écran:

enter image description here

Questions connexes