当前位置: 首页 > 知识库问答 >
问题:

无法使用FXMLLoader在Clojure中加载FXML

秦渝
2023-03-14

我正在尝试实现下面所示的基本JavaFX示例:http://docs.oracle.com/JavaFX/2/get_started/fxml_tutorial.htm。我能够让基本的东西工作(以编程方式创建gui)和使用css,但我遇到了FXMLLoader的问题。

java版本是这样的:

@Override
public void start(Stage stage) throws Exception {
   Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

    stage.setTitle("FXML Welcome");
    stage.setScene(new Scene(root, 300, 275));
    stage.show();
}

我不是Java专家,但我不认为FXMLLoader对象是实例化的IE。没有new FXMLLoader();语句。那么load是从哪里来的呢?

null

(ns jfxtwo.core
  (:gen-class
   :extends javafx.application.Application)

  (:import (javafx.application Application)
           (javafx.fxml FXMLLoader)
           (javafx.scene Parent Scene)
           (javafx.stage Stage)))

(defn -main []
  (javafx.application.Application/launch jfxtwo.core (into-array String [])))

(defn -start [this primaryStage]
  (let [loc (clojure.java.io/resource "fxml_example.fxml")
        root (.load FXMLLoader ^java.net.URL loc)
        scene (Scene. root 300 250)]
    (.setScene primaryStage scene)
    (.show primaryStage)))

null

null

null

java中还有getClass()调用,我认为它正在获取Application的超类,但我不确定在Clojure-land中该如何处理它。

关于如何加载fxml文件有什么想法吗?

之后,java代码具有@FXML注释,以允许FXML进入私有类成员。这在clojure(当我移除它时java代码中断)中是必要的吗?Clojure中似乎没有使用@override注释。

null

共有1个答案

赖翰
2023-03-14

给定Java语法,这里调用的load方法似乎是FXMLLoader类的静态方法。要在Clojure中调用静态方法,需要使用(classname/methodname args...)语法:

(FXMLLoader/load ...)

(刚刚选中:FXMLLoader具有多个签名的静态方法和实例Load方法。您希望调用Java代码所调用的方法;静态方法将使用Java中的FXMLLoader.Load语法调用,实例方法--SomeFXMLLoaderInstance.Load。)

对于getclass方法调用,它的目标是在Java中隐式地this;在Clojure中,必须使目标显式((.getClass this))。

 类似资料:
  • 奇怪的是,它在上次系统重启之前工作得很好。 这是我的项目。clj

  • 我第一次尝试使用JavaFx与Maven。通过这个主题:链接IntelliJ不能识别JavaFX 11与OpenJDK 11,我配置的项目。但是无论我做什么,我都不能加载fxml文件,因为"getClass(). getResources(path)"返回null。 我更改了路径,以“/”开头,没有,更改了包,创建了包,删除了包,更改了模块信息中的引用,但这不起作用。 结构:https://ibb

  • 为了给出基本的思想,下面是所涉及的代码的样子: 方法处理按钮操作,位于根布局控制器中: 它填充一个可观察的列表,该列表随后传递给第二个page控制器,以便在表视图中显示它们。显示此视图并设置每件事的方法如下:

  • Clojure/Leiningen/Eclipse(和Java)newby。我试图让Eclipse加载Clojure/Leiningen项目,但在搜索Lein插件解决方案时,我看到了令人困惑/矛盾的结果。 Eclipse IDE for Java开发者版本:Juno Service Release 2构建id:20130225-0426(Windows 8) 我在中有以下用户配置文件。lein\p

  • 我试图在JavaFX中从一个控制器调用另一个控制器。我在我的代码的另一部分中以几乎完全相同的方式完成了这项工作,并且它起了作用,但出于某种原因,它在这里不起作用。 我正在获取FXML资源并加载它,但是当我调用能力信息ontroller.set能力名称文本(能力名称);它给我以下错误说能力信息控制器是NULL:

  • 问题内容: 我只是在学习Angularjs,以及如何使用templateUrl加载模板。 我有一个简单的指令: 我尝试使用这样的指令: 打开页面后,出现以下异常: 我没有确定要跨域加载模板文件(te.html与default.html处于同一折叠)。 有人可以帮我弄清楚发生了什么吗? 问题答案: 问题是您正在使用文件协议(使用协议)运行示例,并且许多浏览器(Chrome,Opera)在使用协议时都