2016-10-11 80 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读取,您可以将其打包。