在java中的插件中从控制台获取输入

时间:2013-06-11 13:49:07

标签: java eclipse-plugin console

我正在开发一个Eclipse插件,我想从用户那里获取输入。我在处理控制台之前遇到了问题,因为我在原始Eclipse应用程序中有2个控制台1,而在新打开的Eclipse插件窗口中有另外2个控制台。我使用下面显示的方法在插件的控制台中打印

public static void writeToConsole(String output) {

        MessageConsole console = new MessageConsole("My Console", null);
        console.activate();
        ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{ console });
        MessageConsoleStream stream = console.newMessageStream();
        stream.println(output);
    }

我只是不知道如何在控制台中编写并使用变量中的内容

N.B。 通常的方法,如

BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
        String s = bufferRead.readLine();


    System.out.println(s);

正在使用原始Eclipse而不是插件

1 个答案:

答案 0 :(得分:0)

您无法占用等待用户输入的UI,因此您必须在收到用户输入时处理用户输入。一种方法是使用文档侦听器。这是打印输入的最后一行的示例:

        console.getDocument().addDocumentListener(new IDocumentListener() {
            @Override
            public void documentChanged(final DocumentEvent event) {
                if ("\r\n".equals(event.getText())) {
                    final IDocument doc = event.getDocument();
                    try {
                        final IRegion region = doc.getLineInformationOfOffset(event.getOffset());
                        try {
                            final String line = doc.get(region.getOffset(), region.getLength());
                            System.out.println(line);
                        } catch (BadLocationException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    } catch (BadLocationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            @Override
            public void documentAboutToBeChanged(final DocumentEvent event) {
                // TODO Auto-generated method stub                    
            }
        });