从JavaSwingGUI文本区域运行ANTLR语法
我有ANTLR解析器和树语法,它们工作得很好。我希望用户在JTextarea中输入语法(我正在使用JavaSwing进行gui开发)。一旦语法进入JTextarea,用户应按下按钮(运行),语法结果(操作)将显示在另一个文本区域 为了简单起见,可以使用最简单的HelloWorld ANTLR语法(解析器和树语法)来演示如何从JavaSwingGUI的JTextarea运行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
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
。明天可以吗?我很难理解流程的内容,你可能想先自己完成一些。