Я пытался использовать Graal Python для вызова сценария Python из Java, и Python вызывает обратно хост-приложение Java (простой вызов отображения сообщения).
Все это работает нормально при запуске из Eclipse. Однако когда я создаю приложение с использованием jpackage в macOS, обратный вызов с Python на Java завершается с ошибкой
AttributeError: foreign object has no attribute 'msg'.
Почему Graal Python будет вести себя по-разному с обратными вызовами в зависимости от того, как упаковано приложение?
Внутри конструктора Java:
this.pythonContext = Context.newBuilder()
.allowAllAccess(true)
.option("python.PythonPath", pythonPath)
.build();
// load initialisation script source to execute
Source source = Source.newBuilder("python", new File(".....myscript.py")).build();
this.pythonContext.eval(source);
// create PAAFBuilder with reference to this JAAFBuilder for making callbacks
this.paafBuilder = this.pythonContext.getBindings("python").getMember("create").execute(this);
Обратный вызов msg() для отображения сообщения на Java из Python:
@HostAccess.Export
public void msg(String msg) {
formatContext.getMessageContext().msg(msg);
System.out.println(msg);
}
Зависимости Maven
org.graalvm.polyglot
polyglot
${graalpy.version}
org.graalvm.polyglot
python
${graalpy.version}
pom
Подробнее здесь: https://stackoverflow.com/questions/797 ... not-others