我有一個FXML文檔在那裏我使用它存儲在包net.aninnovation.baseUtility.view.ImageButton
這3個文件 ImageButton.class,ImageButton.fxml和ImageButton.css自定義控件ImageButton
。 .class
文件是控制器,.fmxl
是FXML文檔,而.css
文件是樣式表。
現在我在包net.aninnovation.csp.main
中創建一個FXML文檔。該文件的名稱是Default.fxml。這基本上是一個VBox
如下圖所示:
<?xml version="1.0" encoding="UTF-8"?>
<?import ...........................?>//Other required Imports
<?import net.aninnovation.baseUtility.view.ImageButton.ImageButton?>
<VBox id="defaultPanel" fx:id="defaultPanel" styleClass="centerBox" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="net.aninnovation.CSP.main.DefaultController">
<children>
<FlowPane>
<children>
.
.
.
. //Other
. //Components
.
<ImageButton/>
.
. //Other
. //Components
.
</children>
</FlowPane>
</children>
<stylesheets>
<URL value="@Default.css" />
</stylesheets>
</VBox>
當我嘗試加載該文件中SceneBuilder它提供了以下異常:
造成的:拋出java.lang.ClassNotFoundException:淨。在java.lang.ClassLoader.loadClass(ClassLoader.java:424) 上的java.lang.ClassLoader.findClass(ClassLoader.java:530) (java.lang.ClassLoader.loadClass)上的java.lang.ClassLoader.loadClass(ClassLoader.java:424) (ClassLoader.java:357) 在javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916) 在javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905) 在javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846) 。 .. 20更多
在這裏我發現,雖然我已經導入net.aninnovation.baseUtility.view.ImageButton
。ImageButton
,異常狀態net.aninnovation.baseUtility.view.ImageButton
$ImageButton
。現在爲什麼.
被$
取代?我做了什麼錯了嗎?
ImageButton
類的構造如本文中加載FXML文件:
public ImageButton() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("ImageButton.fxml"));
loader.setRoot(this);
loader.setController(this);
try {
loader.load();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
ImageButton.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<fx:root stylesheets="@ImageButton.css" type="Button" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
<graphic>
<VBox>
<children>
<SVGPath fx:id="svgImage" />
<Label fx:id="label" />
</children>
</VBox>
</graphic>
</fx:root>
這些位於包net.aninnovation.baseUtility.view.ImageButton
。如前所述還有在位置3檔ImageButton.class,ImageButton.fxml和ImageButton.css
當我移動的ImageButton打包net.aninnovation.csp.main
和net.aninnovation.csp.main.imageButton
。我有錯誤爲:拋出java.lang.ClassNotFoundException:
所致net.aninnovation.csp $主$ ImageButton的 在java.lang.ClassLoader.findClass(ClassLoader.java:530) 是java .lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader。Java的:2916) 在javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905) 在javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846) ...... 20多個
和
產生的原因:在java.lang.ClassLoader.loadClass net.aninnovation.csp $主$ $的ImageButton ImageButton控件 在java.lang.ClassLoader.findClass(ClassLoader.java:530) :拋出java.lang.ClassNotFoundException (ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916) 在javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905) 在javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846) .. 20更
我不知道這是否會導致問題,但軟件包名稱應該是小寫。 – Thilo
通常'$'用於表示內部類。不知道爲什麼它認爲它正在尋找一個內部類。如果包名爲'net.aninnovation.baseUtility.view.imageButton'(注意小寫字母i),是否也有同樣的問題?我無法想象這實際上解決它,雖然... – Krease
@Krease我已經移動了'ImageButton'的代碼,幾個包如'net.aninnovation.baseUtility.imageButton'和'net.aninnovation.csp.main'和'net.aninnovation.csp.main.imageButton'。我發佈了非常不尋常的錯誤。 – Blip