2016-04-01 101 views
0

这是我在Stack上的第一篇文章,我一直在寻找关于我的问题的答案,但是我没有找到任何有用的东西。 我在学习Java,所以要温柔;)如何加载超出* .jar文件的FXML文件

我的问题是,我不想让一个文件的所有内容在“jar”中。我必须加载FXML文件,该文件不在* .jar文件中。 例如: 我正在制作FXML文件,它位于我的JavaFXMLApplication文件夹中,我运行“JavaFXApplication.jar”文件,此应用程序使用我刚制作的FXML文件。

我希望我清楚地描述它:)

编辑: 我已经找到另一种解决方案,这对我的作品更好...

File file = new File("absolutPathToFile\\FXMLDocument.fxml"); 
    InputStream is = new BufferedInputStream(new FileInputStream(file)); 

    Pane root = new Pane(); 

    FXMLLoader loader = new FXMLLoader(); 
    try 
    { 
     root = loader.load(is); 

    } 
    catch (IOException ex) 
    { 
     System.out.println(ex); 
    } 

我希望这会帮助别人

Cheers :)

回答

0

您可以从任何地方加载FXML文件。一种可能性是使用以URL作为参数的load命令。您可以轻松地获取URL是这样的:

try { 
     File file = new File("../../FXMLDocument.fxml"); 
     if (file.canRead()) { 
      URL url = file.toURI().toURL(); 
      Pane root = FXMLLoader.load(url); 
     } else { 
      System.err.println("File does not exist."); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

我觉得这个问题要取出来FXML罐子的,而不是作为一个单独的文件(在这种情况下[getResource()方法(HTTP://计算器。 com/a/19603055/1155209)将是更适用的例子)。 – jewelsea

+0

嗯,重新阅读这个问题,也许我解释错了,提问者确实想要加载一个不在jar中的fxml文件。 Stackoverflow不会让我逆转downvote :( – jewelsea

+0

我得到例外,当我用这样的: File file = new File(“../../ FXMLDocument.fxml”); String url = file。 toURI()。toURL()。toExternalForm(); Pane root = FXMLLoader.load(getClass()。getResource(url)); 我在做什么错? – Regemaster