我已经将我的Java控制台应用程序导出为Jar文件,但是当我运行该jar并调用解析JSON文件的代码时,会出现java.lang.IllegalArgumentException
异常。
有人知道为什么在作为JAR运行程序时会抛出异常吗?当应用程序从Eclipse运行时,解析工作正常。
当我执行jar文件并调用解析JSON文件的代码时,会输出以下确切错误:
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierar
chical
at java.io.File.<init>(Unknown Source)
at gmit.GameParser.parse(GameParser.java:44)
at gmit.Main.main(Main.java:28)
这是我的GameParser类中解析的方式:
public class GameParser {
private static final String GAME_FILE = "/resources/game.json";
private URL sourceURL = getClass().getResource(GAME_FILE);
private int locationId;
private List<Location> locations;
private List<Item> items;
private List<Character> characters;
public void parse() throws IOException, URISyntaxException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
try {
// read from file, convert it to Location class
Location loc = new Location();
loc = mapper.readValue(new File(sourceURL.toURI()), Location.class);
Item item = mapper.readValue(new File(sourceURL.toURI()), Item.class);
GameCharacter character = mapper.readValue(new File(sourceURL.toURI()), GameCharacter.class);
// display to console
System.out.println(loc.toString());
System.out.println(item.toString());
System.out.println(character.toString());
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我项目的文件夹结构:
File
需要一个字符串而不是一个输入流。private InputStream sourceURL = getClass().getResourceAsStream(GAME_FILE);
loc = mapper.readValue(new File(sourceURL), Location.class);
- Brian VarreadValue(sourceInputStream, Location.class)
。 - CrazyjavahackingGameState parser = mapper.readValue(resourceAsStream, GameState.class);
但是这将引发映射异常,http://hastebin.com/tolehexumi.avrasm。 - Brian Var