我正在使用Scene Builder2.0和eclipse Luna。在fxml文件中,我有我的场景的代码和图像。如果我在eclipse上测试这一点,一切都是正常的,但是如果我将它导出到可运行的jar中,然后运行它,我就会得到没有图像的窗口...以下是部分代码:
<ImageView layoutX="63.0" layoutY="14.0">
<image>
<Image url="@../Images/MainPage/O.png" />
</image>
</ImageView>
文件结构:
Graph:
MainPage:
MainPage.fxml
Images:
MainPage:
O.png
我觉得问题出在路径上,但我不知道这条路是怎么走的。加载程序代码:
public class ScreensController extends StackPane{
private HashMap<String, Node> screens = new HashMap<>();
public ScreensController() {
super();
}
public void addScreen(String name, Node screen){
System.out.println("name: "+name);
System.out.println("screen: "+name);
screens.put(name, screen);
}
public Node getScreen(String name){
return screens.get(name);
}
//name - nazwa Screenu
//rescue - nazwa pliku FXML
public boolean loadScreen(String name, String rescue){
try {
System.out.println("loading Screen "+name+" path: "+rescue);
System.out.println("0001");
FXMLLoader myLoader= new FXMLLoader(getClass().getResource(rescue));
System.out.println("0002");
Parent loadScreeen = (Parent) myLoader.load();
System.out.println("0003");
ScreenControlled myScreenControler = ((ScreenControlled) myLoader.getController());
System.out.println("0004");
myScreenControler.setScreenParent(this);
System.out.println("0005");
addScreen(name, loadScreeen);//Dodanie do HashMap
System.out.println("0006");
return true;
} catch (IOException e) {
System.out.println("IOException Error in ScreenController: "+e.getMessage().substring(1,e.getMessage().length())
+"\n Cause: "+e.getCause()
+"\n Localized Message: "+e.getLocalizedMessage().substring(1,e.getLocalizedMessage().length())
+"\n Class: "+e.getClass()
+"\n ST: ");
e.printStackTrace();
return false;
}
}
public boolean setScreen(final String name){
System.out.println("Setting Screen: "+name);
if(screens.get(name) != null) { //screen loaded
final DoubleProperty opacity = opacityProperty();
if(!getChildren().isEmpty()) { //if there is more than one screen
Timeline fade = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(opacity, 1.0)),
new KeyFrame(new Duration(1000), new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t){
getChildren().remove(0); //remove the displayed screen
getChildren().add(0, screens.get(name)); //add the screen
Timeline fadeIn = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
new KeyFrame(new Duration(800), new KeyValue(opacity, 1.0)));
fadeIn.play();
}
}, new KeyValue(opacity, 0.0)));
fade.play();
}else{
setOpacity(0.0);
getChildren().add(screens.get(name)); //no one else been displayed, then just show
Timeline fadeIn = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
new KeyFrame(new Duration(1000), new KeyValue(opacity, 1.0)));
fadeIn.play();
}
return true;
}else{
System.out.println("screen hasn't been loaded!!!\n");
return false;
}
}
public boolean unloadSCreen(String name) {
if(screens.remove(name)==null) {
System.out.println("Screen " +name+ " didn't exist");
return false;
}else{
return true;
}
}
}
初始化函数:
public void start(Stage stage) throws Exception {
new Fonts().initialize();
this.stage=stage;
ScreensController mainContainer = new ScreensController();
mainContainer.loadScreen(ScreensFramework.screen2ID, ScreensFramework.screen2File);
mainContainer.setScreen(ScreensFramework.screen2ID);
root = new StackPane();//Group root = new Group();
root.getChildren().addAll(mainContainer);
Scene scene = new Scene(root);
this.stage.setScene(scene);
this.stage.show();
}
路径起始处缺少/
。请使用:
FXMLLoader myLoader= new FXMLLoader(getClass()
.getResource(/com/gmail/Slupik98/Project_Stangar/Graph/MainPage/MainPage.fxml));
问题内容: 看了关于SO的其他帖子,他们没有解决此问题。 我正在尝试从jar文件加载图像。它持续为null。该图像位于以下位置: 要加载我正在执行的图像: url为null,bImg也为null。 我已经检查过了,不必担心区分大小写。 问题答案: 试试这个 :
我的目录结构如下
问题内容: 虽然此答案适用于从Jar文件中加载图像,但似乎无法为SwingHTML中引用的图像找到正确的路径。 当资源未捆绑到jar中时,这将在Swing HTML中显示图像: 在jar内部,可以将图像成功引用(并显示)到: 但是,我尝试将技术用于Swing HTML无效。 有什么秘密? 问题答案: 如果没有实际尝试,我认为如果在HTML代码中包含资源URL,则HTML渲染器可以访问您的图像:
我的JavaFX项目可以在一台机器中加载图像,但是相同的代码不能在另一台机器中加载图像。 我有包结构(在src中)-/com/mypackagestructure/view/images/,它保存图像文件。 我的CSS文件位于-/com/mypackagestructure/view/Login。css 我在另一台机器上有完全相同的代码(安装了相同的操作系统、相同的Eclipse IDE和JDK/
问题内容: 我已经尝试搜索,但仍然没有解决方案。当我导出到jar文件时,我的所有图像突然不再起作用。它们在Eclipse中运行良好,并且我已确保它们在jar文件中。我尝试使用get资源方法并制作一个图像加载器类来自动向上目录树,但它仍然失败。这是我所做的: 我将发送的路径如下所示:“ doc / icon.png” 我将所有图像放置在doc文件夹中,结构是最终项目,在内部有doc文件夹,然后是sr
我试图在JavaFX中实现一个非常简单的Raspberry Pi接口。我用的是一台电脑。基于fxml的布局和样式我的项目与css。我的问题是,尽管该应用程序在我的主计算机(从eclipse运行)上运行得很好,但它在Raspberry上也不工作,当我尝试在主计算机上运行导出的jar时也不工作。 我就是这样把纽扣剥皮的。当然,resources/images文件夹位于我的构建路径中。按钮的颜色与我在c