在鼠标单击时打开自定义弹出窗口时出现异常

时间:2013-12-17 08:54:28

标签: javafx-2

我有一个包名com.soarite,其中包含SOARiteController类和两个fxml文件,如soaritemain.fxml和custom_control.fxml。

我在soaritemain.fxml中有一棵树。我试图在那棵树上点击鼠标弹出窗口。或者只想显示两个菜单。

这是我的代码。

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/com/soarite/custom_control.fxml"));
    //fxmlLoader.setRoot(this);
    fxmlLoader.setController(this);
    fxmlLoader.setLocation(null);
    try {
        fxmlLoader.load();
    }
    catch(Exception e)
    {
    }

这是我的custom_control.fxml。

<AnchorPane id="AnchorPane" minHeight="119.5" prefHeight="119.5" prefWidth="188.0" styleClass="mainFxmlClass" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.soarite.SOARiteController">
<children>
<VBox layoutX="33.0" layoutY="35.0" prefHeight="73.0" prefWidth="100.0">
  <children>
    <Button fx:id="treeOpenTestBed" mnemonicParsing="false" onAction="#handleOpenTestBedTree" text="Open TestBed" />
    <Button fx:id="treeNewTestBed" mnemonicParsing="false" onAction="#handleNewTestBedTree" text="New TestBed" />
  </children>
</VBox>
</children>
<stylesheets>
<URL value="@main.css" />
</stylesheets>
</AnchorPane>    

这里有我得到的异常细节。

Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2021)
at com.soarite.SOARiteController.MouseClickedOnTree(SOARiteController.java:224)   

我不明白该怎么做。这是我做得对还是需要做别的事。我是JavaFx的新手。

1 个答案:

答案 0 :(得分:1)

fxmlLoader.setLocation(null);

导致您看到的异常。该位置是表示要加载的fxml文件的资源;因此,如果将其设置为null,则加载程序不知道在何处找到该文件。删除此行。

这会给你另一个例外。您还可以使用行

“手动”设置控制器
fxmlLoader.setController(this);

然后你的fxml文件本身在根元素中指定一个带有fx:controller属性的控制器。如果已在FXMLLoader上设置控制器,则无法在fxml中指定控制器。您可能希望删除Java代码中的setController(...)调用。