Eclipse 4 RCP (Luna), файловая ассоциация Windows
Я пытаюсь заставить работать Файловую ассоциацию с моим приложением RCP на основе Eclipse 4.4 Luna.
Я следовал этому руководству http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fproduct_open_file.htm.
У меня это работает на Linux и Mac OS, но в Windows я не могу загрузить файл при первом запуске приложения. Если приложение не запущено и я открываю его с помощью входного файла, запускается новый экземпляр приложения, но файл не загружается. После запуска экземпляра приложения я могу загрузить файл через командную строку с аргументом --launcher.openFile без проблем, но это раздражает. Похоже, событие SWT.OpenDocument не обрабатывается правильно при первом запуске приложения.
Я нашел эту ветку ( http://www.eclipse.org/forums/index.php/t/460936/) на форуме сообщества Eclipse, которая выглядит примерно так же, как и я, но пользователь никогда не публикует решение, поэтому любая помощь по этому вопросу будет принята с благодарностью.
Заранее спасибо.
Извините за мой английский.
РЕДАКТИРОВАТЬ:
Вот код для открытия файлов:
public class OpenDocumentEventProcessor implements Listener {
private ArrayList<String> filesToOpen = new ArrayList<String>(1);
public static final OpenDocumentEventProcessor INSTANCE = new OpenDocumentEventProcessor();
public OpenDocumentEventProcessor() {
System.out.println("OpenDocumentEventProcessor instantiated.");
}
public void handleEvent(Event event) {
System.out.println("Handle Event called \n");
if (event.text != null){
System.out.println("Files to Open " + event.text);
filesToOpen.add(event.text);
}else{
System.out.println("event text null");
}
}
public void openFiles(IEclipseContext ctx) {
if (filesToOpen.isEmpty()){
return;
}
String[] filePaths = filesToOpen.toArray(
new String[filesToOpen.size()]);
filesToOpen.clear();
for (String path : filePaths) {
// open the file path
System.out.println(">> Open file : "+ path);
FileManager.open(path, ctx);
}
}
}
Этот прослушиватель добавляется в событие приложения SWT.OpenDocument. Когда событие инициируется, обработчик сохраняет путь к файлу. Затем вызывается метод openFiles в IEventLoopAdvisor, который я определил в контексте приложения.