尝试在Jython中加载JavaFX类时导入问题

时间:2014-12-18 20:52:38

标签: python jython

我有类似的JavaFX示例Jython代码:

# hello.py
from javafx.application import Application
from javafx.scene import Scene
import javafx.scene.control
from javafx.scene.layout import AnchorPane

class Hello(Application):
    def start(self, stage):
        stage.setTitle("Hello, World!")

        root = AnchorPane()
        label = javafx.scene.control.Label("Hello, World!")
        root.getChildren().add(label)

        scene = Scene(root, 100, 40)
        stage.setScene(scene)

        stage.show()


if __name__ == '__main__':
    Application.launch(Hello().class, [])

在这里,我可以执行import javafx.scene.control,然后像javafx.scene.control.Label("Hello, World!")一样使用它,但为什么我不能from javafx.scene.control import Label

这里的Jython信息:

$ jython
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:48:36)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_25
Type "help", "copyright", "credits" or "license" for more information.
>>>

1 个答案:

答案 0 :(得分:2)

如果您在from方法内移动了import / start语句,则在您需要Label控件之前,我打赌您的代码可以正常运行。

在JavaFX8上运行Jython时,在JavaFX运行时启动之前,有些事情是您无法做到的(例如导入控件)。 (JavaFX2不是那么挑剔。)因此,启动JavaFX运行时是Jython / JavaFX程序应该做的第一件事。 (我有一个专门用于执行此操作的模块。)然后您可以导入其他所有内容。

顺便说一句,我认为您不想使用from / import方法,而是使用import / as方法。前者无法缓存,而后者则没有。