Antlr 4 では、このようなコードは一般的な main 関数で機能します。
public static void main(String[] args) {
.....
SicstusPrologParser parser = new SicstusPrologParser(tokens);
ParserRuleContext tree =(ParserRuleContext)parser.program();
tree.inspect(parser);
}
最後のステートメントは、パーサー ツリー構造を示すモデル JDialog をポップアップ表示します。しかし、次のようにコードをjunitテストケースにコピーしました:
@Test
public void testParserClause() { //clause
.....
SicstusPrologParser parser = new SicstusPrologParser(tokens);
ParserRuleContext tree =(ParserRuleContext)parser.program();
tree.inspect(parser);
}
「tree.inpect(parser)」によって作成された JDialog は、「OK」ボタンをクリックする前にジャントによって閉じられました。「検査」機能に飛び込みました。その主なロジックフローは次のとおりです。
.....
Callable<JDialog> callable = new Callable<JDialog>() {
JDialog result;
@Override
public JDialog call() throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
//fill the tree nodes and show the dialog.
result = showInDialog(viewer);
}
});
return result;
}
};
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
return executor.submit(callable);
}
finally {
executor.shutdown();
}
sth を実行する前にモデル JDialog が閉じられるのはなぜですか? 「検査」の戻り値を使用しましたが、それでも機能しました。
Future<JDialog> fu = tree.inpect(parser);
fu.get();
助けはありますか?