Мой плагин должен писать в консоль eclipse - для целей тестирования я упростил свой код, чтобы у меня было только следующее:
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
System.out.println("Tecomp Plugin is running");
MessageConsole myConsole = new MessageConsole("My Console", null);
//myConsole.activate();
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{ myConsole });
ConsolePlugin.getDefault().getConsoleManager().showConsoleView(myConsole);
final MessageConsoleStream stream = myConsole.newMessageStream();
stream.setActivateOnWrite(true);
stream.println("Hi there!");
stream.close();
}
Это простой плагин, метод start запускает класс, расширяющий AbstractUIPlugin - это не приложение rcp.
Код прекрасно работает в рабочей среде времени выполнения - после установки плагина вывод теряется где-то. Остальная часть плагина работает правильно.
Возможно, есть проблема с ConsolePlugin? Или потоки обрабатываются по-разному в среде исполнения и в среде разработки?
Я попробовал оба варианта - проект с возможностью добавления файлов и непосредственное копирование jar плагина в каталог eclipse - для установки плагина - одинаковый результат для обоих ...
Любая помощь приветствуется, потому что сейчас я борюсь с этой проблемой ...
С уважением, Кати
Edit:
похоже, что это не проблема Консоли ... Я предоставил свой собственный вид для печати вывода, но хотя в файле plugin.xml declard нет представления после установки плагина ... вот что Я сделал:
экспортировать плагин с помощью ExportWizard в jar-архив
скопировал этот архив в / usr / share / eclipse / plugins
затмение
или с художественным проектом:
-экспортировал проект с моим плагином с помощью ExportWizard
убрал указанный выше архив из затмения
-установлена функция
затмение
оба не сказали - я что-то не так с установкой плагина?
Jar-архив в порядке, я проверил - это последняя версия. Но почему-то кажется, что Eclipse все еще работает с более старым плагином без изменений, которые я сделал
С уважением, Кати
Edit:
Я реализовал интерфейс интерфейса IStartup, расширил точку org.eclipse.ui.startup, но ничего не изменилось ... Я действительно думаю, что это проблема установки. Я закомментировал некоторые результаты, но они все еще выводятся на консоль отладки.
Есть ли в Eclipse какой-то кеш плагина? Чтобы новый код не читался?
Edit:
Спасибо за предложения, но запуск eclipse с опцией -clean не помог - я постараюсь установить плагин в какой-то другой среде на следующей неделе - возможно, что-то не так с моим ...
Edit:
код в классе, вызывающем компилятор, выглядит следующим образом:
private MessageConsole findConsole(String name){
ConsolePlugin plugin = ConsolePlugin.getDefault();
IConsoleManager conMan = plugin.getConsoleManager();
IConsole[] existing = conMan.getConsoles();
for (int i = 0; i<existing.length; i++){
if (name.equals(existing[i].getName())){
return (MessageConsole)existing[i];
}
}
//no console found -> create new one
MessageConsole newConsole = new MessageConsole(name, null);
conMan.addConsoles(new IConsole[]{newConsole});
return newConsole;
}
public void run() {
MessageConsole console = findConsole("tecompConsole");
//display the tecomp Console
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
String id = IConsoleConstants.ID_CONSOLE_VIEW;
try {
IConsoleView view = (IConsoleView) page.showView(id);
view.display(console);
} catch (PartInitException e) {
e.printStackTrace();
}
MessageConsoleStream output = console.newMessageStream();
String tecompPath = TecompPlugin.getDefault().getPreferenceStore().getString(IEiffelConstants.TECOMP_PATH);
if (checkTecompPath(tecompPath)){
String line;
String[] cmd = {tecompPath, pathToAceFile};
try{
output.println("calling tecomp");
Process tecomp = Runtime.getRuntime().exec(cmd);
//capture stdout und stderr from tecomp
BufferedReader input = new BufferedReader(
new InputStreamReader(tecomp.getInputStream()));
BufferedReader err = new BufferedReader(
new InputStreamReader(tecomp.getErrorStream()));
while ((line = input.readLine()) != null ){
output.println(line);
}
input.close();
while ((line = err.readLine()) != null){
output.println(line);
}
err.close();
output.close();
tecomp.waitFor();
//System.out.println(tecomp.exitValue());
}catch (Exception err){
err.printStackTrace();
}
} else {
try{
output.println("please specify a tecomp path");
output.close();
}catch (Exception err){}
}
}
но первый тестовый пример должен работать, не так ли? Я создаю новый MessageConsoleStream и пишу в него вручную. Это в точности как примеры, которые я нашел.
Edit:
Код не относится к rcp-приложению - это просто плагин, расширяющий Eclipse Idea с поддержкой языка Eiffel. Поэтому я думаю, что ваше предложение не работает для моего плагина - VonC, по крайней мере, я не знаю, куда поместить ваш код ...
Мой первый пример кода в начальном вопросе вызывается внутри класса Plugin, расширяющего AbstractUIPlugin в методе start (контекст BundleContext). Мой плагин работает, поэтому где-то этот метод вызывается. И, как я уже говорил, плагин прекрасно работает в рабочей среде времени выполнения ...
Извините, если это не подходящее место для дополнительного объяснения моего вопроса - но, похоже, это единственное место, где система позволяет мне публиковать дополнительные строки. Комментарии к вашим ответам не разрешены для меня, потому что я только что вошел в систему, и для этого у меня недостаточно очков репутации ... поэтому, пожалуйста, поправьте меня, если я использую систему неправильно :) thx