2014-09-26 2 views
1

Я пытаюсь открыть файл в редакторе Eclipse из моей программы python.Открытие редактора Eclipse из python с Py4J

Вот пример того, как сделать это с помощью Java:

import java.io.File; 
import org.eclipse.core.filesystem.EFS; 
import org.eclipse.core.filesystem.IFileStore; 
import org.eclipse.ui.PartInitException; 
import org.eclipse.ui.IWorkbenchPage; 
import org.eclipse.ui.PlatformUI; 
import org.eclipse.ui.ide.IDE; 

File fileToOpen = new File("externalfile.xml"); 

if (fileToOpen.exists() && fileToOpen.isFile()) { 
    IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI()); 
    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 

    try { 
     IDE.openEditorOnFileStore(page, fileStore); 
    } catch (PartInitException e) { 
     //Put your exception handler here if you wish to 
    } 
} else { 
    //Do something if the file does not exist 
} 

Я пытаюсь использовать этот API из питона с использованием Py4j.

from py4j.java_gateway import JavaGateway, java_import 

gateway = JavaGateway() 
jvm = gateway.jvm 

java_import(jvm, 'org.eclipse.core.filesystem.EFS') 
java_import(jvm, 'org.eclipse.ui.PlatformUI') 

fileToOpen = jvm.java.io.File('c:/test.txt') 

fileStore = jvm.org.eclipse.core.filesystem.EFS.getLocalFileSystem().getStore(fileToOpen.toURI()); 

Это прекрасно работает. Но я уложился с получением page.

page = jvm.org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 

Я получаю Нет здесь. Похоже, Рудольф Видман написал ответ на этот вопрос here. Таким образом, решение java будет:

Display.getDefault().asyncExec(new Runnable() { 
    @Override 
    public void run() { 
     IWorkbenchWindow iw = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
    } 
}); 

Но как я могу это сделать из python? Как реализовать его с Py4j?

+0

Это Java-код будет работать только в плагин Eclipse, он не будет работать в «нормальной» программы Java. –

+0

Py4j имеет плагин eclipse, который позволяет программисту взаимодействовать с API-интерфейсом eclipse. Просто взгляните: http://py4j.wordpress.com/2010/02/18/eclipse-py4j/ – Adam

ответ

0

ли вы пытаетесь реализовать Runnable interface in Python?

class PythonRunner(object): 
    def __init__(self, gateway): 
     self.gateway = gateway 
     self.iw 

    def run(self): 
     self.iw = gateway.jvm.org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow() 

    class Java: 
     implements = ['java.lang.Runnable'] 

gateway = JavaGateway(start_callback_server=True) 
runner = PythonRunner(gateway) 
gateway.jvm.org.eclipse.swt.widgets.Display.getDefault().asyncExec(runner) 
# Replace with a synchronization primitive 
time.sleep(2) 
page = runner.iw.getActivePage()