2016-10-11 83 views
-1

我正在嘗試創建一個可運行的jar文件。我的項目包含models.txt文件。我的項目在eclipse中完美工作,沒有錯誤,但是當導出到可運行jar文件時,它不起作用。我在此附上錯誤和該文件被調用的代碼片段。Runnable Jar文件中沒有這樣的文件異常

public static HashMap<String, RenderModel> getModelList(String file) throws IOException { 
    List<String> data; 
    HashMap<String, RenderModel> namesToModels = new HashMap<String, RenderModel>(); 

    if (file != null) { 
     data = Files.readAllLines(Paths.get(file), StandardCharsets.UTF_8); 
    } else { 
     String path = "models/models.txt"; 
     data = Files.readAllLines(Paths.get(path), StandardCharsets.UTF_8); 
    } 

    Iterator<String> dataIterator = data.iterator(); 
    while (dataIterator.hasNext()) { 
     String dataLine = dataIterator.next(); 
     System.out.println(dataLine); 
     String[] line = dataLine.split("; "); 
     String key = line[0]; 
     String valueObj = line[1]; 
     String valueMtl = line[2]; 
     float scale = Float.parseFloat((String) line[3]); 
     RenderModel v = new RenderModel(valueObj, valueMtl, scale); 
     namesToModels.put(key, v); 
    } 
    RenderModel v = new RenderModel("custom", "custom", 1.0f); 
    namesToModels.put("Choose Model from file", v); 
    return namesToModels; 
} 

錯誤圖片:

Error Image

+0

將代碼添加爲文本而不是圖像 – Jens

+0

在你的jar中你沒有src文件夾。 – Jens

+0

在eclipse中,我有src文件夾,一切正常。如何在jar中創建src文件夾。 – Ankit1016

回答

1

如果文件是在Jar,你不能閱讀,嘗試通過做訪問文件:

getClass().getClassLoader().getResource(fileName); 

使用此而不是靜態方法:

ClassName.class.getClassLoader().getResource(fileName); 

哪裏fileName是名稱文件的名稱和ClassName從中調用該語句的類的名稱。

+0

非常感謝這可能會解決我在主代碼上的問題... – Ankit1016

0

在代碼中model.txt的路徑是 'SRC /模型/ model.txt'。當你的項目打包時,通常不包括src文件夾。然後您必須更改文件位置;可以更好地把文件放在jar外面,但是在java classpath中。

0

它不起作用,因爲當您運行jar時,路徑上沒有任何文件src/models/models.txt其中,此路徑僅存在於您的IDE中(當然,您可以將jar放在它可以到達的位置該路徑,但這不是它應該如何),當您將項目打包到jar文件時,它將打包在包models中,如果您想將其作爲默認文件通過classpath讀取,您可以將其打包。