Поиск в Jython (и Gephi)

Я пытаюсь использовать Gephi Toolkit в Jython, но у меня с этим проблемы. Код ниже:

import sys
sys.path.append('gephi-toolkit.jar')
from org.openide.util import Lookup
import org.gephi.project.api.ProjectController as ProjectController

pc = Lookup.getDefault().lookup(ProjectController)
workspace = pc.newProject()

print "done."

Он никогда не доходит до последней строки. Вместо этого выдает следующую ошибку:

Traceback (most recent call last):
  File "standalone.py", line 9, in <module>
    workspace = pc.newProject()
AttributeError: 'NoneType' object has no attribute 'newProject'

По-видимому, «Lookup.getDefault().lookup(ProjectController)» возвращает None. Кто-нибудь может сказать мне, почему? Я обнаружил, что работает следующий обходной путь (который обходит поиск):

...
import org.gephi.project.impl.ProjectControllerImpl as ProjectControllerImpl
pc = ProjectControllerImpl()
workspace = pc.newProject()

Я хотел бы узнать больше об этой проблеме. Спасибо.


person Ruggiero Spearman    schedule 10.05.2011    source источник


Ответы (1)


я думаю, это потому, что для поиска нужна ссылка на класс java, а не на оболочку jython

попробуйте это и посмотрите, работает ли это для вас, по крайней мере, для меня он возвращает экземпляр org.gephi.project.impl.ProjectControllerImpl

импорт системы

из org.openide.util импортировать Lookup

импортировать java.lang.Класс

импортировать org.gephi.project.api.ProjectController как ProjectController

pc = Lookup.getDefault(). lookup(java.lang.Class.forName("org.gephi.project.api.ProjectController"))

печать (ПК)


вызывать с помощью (перейдите туда, где установлен ваш gephi)

установить CLASSPATH=%CLASSPATH%;C:\java\gephi-toolkit-0.7.2014-all\gephi-toolkit.jar

jython.bat gephi_test.jy

вы должны увидеть что-то вроде

C:\jython2.5.2>jython.bat gephi_test.jy

org.gephi.project.impl.ProjectControllerImpl@8ddb93

person rlawson    schedule 10.05.2011
comment
Спасибо! Это определенно имеет смысл, но я не мог заставить это работать. Мой код: import org.gephi.project.api.ProjectController ref = java.lang.Class.forName(org.gephi.project.api.ProjectController) org.gephi.project.api.ProjectController Не могли бы вы опубликовать свой полный код, который возвращает ProjectControllerImpl и ваш JythonPath? - person Ruggiero Spearman; 11.05.2011
comment
также следует обратить внимание на то, что в вашем коде вызов newProject() возвращает void, должен быть pc.newProject(), за которым следует workspace = pc.getCurrentWorkspace() - person rlawson; 11.05.2011
comment
Ну, проблема была не в ссылке на класс, а в отсутствующем CLASSPATH. Добавления файла jar в sys.path недостаточно, и нужно также установить CLASS PATH, как вы говорите. Мой исходный код работает в этом случае. Еще раз спасибо. - person Ruggiero Spearman; 11.05.2011