如何在交互式控制台中的JavaFX应用程序线程上执行Python语句?

时间:2015-03-04 19:04:15

标签: python multithreading javafx jython

我正在Jython中开发一个JavaFX应用程序。我经常使用jython启动-i以获得交互式控制台,因此我可以执行Python语句来检查/激励我的应用程序。但是,我经常忘记这些语句不会在JavaFX应用程序线程上执行,所以我回答:

java.lang.IllegalStateException: java.lang.IllegalStateException: Not on FX application thread; currentThread = MainThread

所以,我想出了这个:

import java.lang.Runnable
import javafx.application.Platform

def runOnJavaFXApplicationThread(func):

    class _Runnable(java.lang.Runanble):

        def __init__(self, func):
            self.func = func

        def run(self):
            self.func()

    javafx.application.Platform.runLater(_Runnable(func))

这允许我这样做:

>>> runOnJavaFXApplicationThread(lambda: someStatement())

但是,这很难满足。我必须记住导入包含此函数的模块并将所有内容包装在runOnJavaFXApplicationThread(lambda:)中。当我想执行多个语句时,这真的很烦人。

要执行多个陈述,我希望能够这样说:

>>> runOnJavaFXApplicationThread('''
someStatement()
anotherStatement()
yetAnotherStatement()''')

我将如何实现这一目标?

或者,Python(Jython)控制台是否有办法通过某种功能“过滤”你给它的命令?

0 个答案:

没有答案