Antlr 4 JDialog, созданный tree.inspect(parser), автоматически закрывается JUnit

В Antlr 4 такой код работает в основной функции.

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);
 }

JDialog, созданный "tree.inpect (parser)", был недавно закрыт пользователем, пока я не нажал кнопку "ОК". Я погрузился в функцию "осмотреть", ее основной логический поток выглядит следующим образом:

   .....
 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();
    }

Почему модель JDialog закрыта, прежде чем я с ней что-то сделаю? Я использовал возвращаемое значение "inspect", но оно все равно работало.

       Future<JDialog> fu = tree.inpect(parser);
       fu.get();

любая помощь?

1 ответ

Решение

Служебный метод предоставляется на тот случай, если вам нужно дождаться закрытия окна, прежде чем продолжить:

Future<JDialog> future = tree.inspect(parser);
Utils.waitForClose(future.get());
Другие вопросы по тегам