从JavaSwingGUI文本区域运行ANTLR语法

从JavaSwingGUI文本区域运行ANTLR语法,java,swing,user-interface,antlr,jtextarea,Java,Swing,User Interface,Antlr,Jtextarea,我有ANTLR解析器和树语法,它们工作得很好。我希望用户在JTextarea中输入语法(我正在使用JavaSwing进行gui开发)。一旦语法进入JTextarea,用户应按下按钮(运行),语法结果(操作)将显示在另一个文本区域 为了简单起见,可以使用最简单的HelloWorld ANTLR语法(解析器和树语法)来演示如何从JavaSwingGUI的JTextarea运行ANTLR语法 private void addReRunButtonListener() { btnReRu

我有ANTLR解析器和树语法,它们工作得很好。我希望用户在JTextarea中输入语法(我正在使用JavaSwing进行gui开发)。一旦语法进入JTextarea,用户应按下按钮(运行),语法结果(操作)将显示在另一个文本区域

为了简单起见,可以使用最简单的HelloWorld ANTLR语法(解析器和树语法)来演示如何从JavaSwingGUI的JTextarea运行ANTLR语法

private void addReRunButtonListener() {
        btnReRun.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                 try {
                     //for Random Simulation
                     if(rdbtnRandomWithSeed.isSelected())
                     {
                      String line = "";
                      String nl ;

                      Process p = Runtime.getRuntime().exec("java org.antlr.Tool protocol.g protocolWalker.g");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("javac protocolLexer.java protocolParser.java protocolWalker.java SimulatorRandom.java");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("java RandomSimulator");

                      OutputStreamWriter stdin = new OutputStreamWriter(p.getOutputStream ());

                      stdin.write(simAlgoEdit.getText()+"\n");

                              stdin.close();

                      BufferedReader bri = new BufferedReader
                        (new InputStreamReader(p.getInputStream()));
                      nl = bri.readLine();
                      while (nl != null) {
                          line = line + nl + "\n";
                          nl = bri.readLine();

                      }
                      bri.close();

                      System.out.println("Done.");
                      simGraphicsArea.setText(line);
                      graphicsArea.setText(line);

                     }
我还没有找到任何与ANTLR和JavaSwingGUI相关的东西,也没有找到任何说明如何从JavaSwingGUI的JTextArea运行ANTLR语法的东西

有什么想法/建议/简单的例子/演示吗?
编辑解决方案
下面是我的GUI类中处理simulate按钮的部分代码。用户在JTextarea中输入ANTLR语法

private void addReRunButtonListener() {
        btnReRun.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                 try {
                     //for Random Simulation
                     if(rdbtnRandomWithSeed.isSelected())
                     {
                      String line = "";
                      String nl ;

                      Process p = Runtime.getRuntime().exec("java org.antlr.Tool protocol.g protocolWalker.g");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("javac protocolLexer.java protocolParser.java protocolWalker.java SimulatorRandom.java");
                      p.waitFor();
                      p = Runtime.getRuntime().exec("java RandomSimulator");

                      OutputStreamWriter stdin = new OutputStreamWriter(p.getOutputStream ());

                      stdin.write(simAlgoEdit.getText()+"\n");

                              stdin.close();

                      BufferedReader bri = new BufferedReader
                        (new InputStreamReader(p.getInputStream()));
                      nl = bri.readLine();
                      while (nl != null) {
                          line = line + nl + "\n";
                          nl = bri.readLine();

                      }
                      bri.close();

                      System.out.println("Done.");
                      simGraphicsArea.setText(line);
                      graphicsArea.setText(line);

                     }
上面的代码还获取输出并将其插入GUI中的另一个JTextarea中。 @垃圾神:非常感谢你的帮助


谢谢

您可以使用
ProcessBuilder
调用ANTLR,就像您从。有一个相关的例子。您可以使用
JTextArea
append()
方法来显示来自
stdout

的结果,如果不使用Swing,如何运行它?除了在ActionListener代码中,或者使用SwingWorker之外,您也可以执行相同的操作。另请参见使用
append()
。我已经介绍了ProcessBuilder类以及您提到的各种资源。我尝试了一个在Windows7中启动记事本进程的简单示例。请看我的编辑,我仍然不知道如何在我的情况下使用它。我们已经研究了您提供的链接示例,但这是针对Mac的。示例中使用的字符串是特定于Mac的,但代码是可移植的。尝试替换DOS命令,如
dir
,这样您就可以读取
stdout
。明天可以吗?我很难理解流程的内容,你可能想先自己完成一些。