Как захватить консольный вывод плагина Eclipse с пользовательской конфигурацией запуска? - PullRequest
2 голосов
/ 27 сентября 2011

Я пишу плагин Eclipse с пользовательской конфигурацией запуска, то есть метод launch() внутри подкласса LaunchConfigurationDelegate. Этот метод, по сути, просто вызывает Runtime.exec(), но когда я пишу в System.out из launch(), он отправляется на консоль экземпляра Eclipse, которая отлаживает плагин, а не на консоль самого экземпляра плагина. Я проанализировал аргументы ILaunchConfiguration и ILaunch метода, но нигде не могу найти, чтобы они указывали какие-либо потоки вывода / ошибок, которые я могу записать.

Как рекомендуется в уроках, у меня есть 2 отдельных плагина, работающих вместе; один, который обрабатывает содержимое пользовательского интерфейса (LaunchConfigurationTab, LaunchConfigurationTabGroup, LaunchShortcut,), а другой, который содержит сам LaunchConfigurationDelegate.

Я создал консоль в своем плагине пользовательского интерфейса, используя этот код , и я могу писать в него нормально из кода пользовательского интерфейса. Но я не могу понять, как направить вывод, сгенерированный в моем плагине без пользовательского интерфейса, в консоль, созданную в моем плагине пользовательского интерфейса.

Я прочитал этот пост и этот , но они не указывают, как "получить" результат, который генерируется в методе launch() в первое место.

Любые указатели будут очень кстати, я застрял!

1 Ответ

2 голосов
/ 28 сентября 2011

Ну, наконец-то мне удалось заставить что-то работать следующим образом:

В моем LaunchConfigurationDelegate я ввел следующий статический метод:

public static void setConsole(PrintStream ps) {
    System.setOut(ps);
    System.setErr(ps);
}

Затем при создании моей консоли в плагине моего пользовательского интерфейса PerspectiveFactory я называю это следующим образом:

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

    MyLaunchConfigurationDelegate.setConsole(new PrintStream(stream));
}

Это работает, за исключением того, что каждый раз, когда я закрываю Eclipse и перезапускаю его, консоль исчезает. Однако, когда я сбрасываю свою перспективу, консоль появляется снова. Поэтому, очевидно, мне нужно, чтобы этот код вызывался при запуске, а не в самом PerspectiveFactory.

Надеюсь, это кому-нибудь поможет ... и если у кого-то есть какие-то комментарии по этой последней проблеме (или по поводу моего подхода в целом), пожалуйста, оставьте комментарий!

...