2014-11-03 276 views
1

我已经领先于自己了,正在上一个学期,这要求我掌握超出我所了解的Java的知识。我不知道我如何命令像参数传递给主要参数,除了通过命令行“echo Java foo bar” 我试图通过Java解析JSON;我希望下面的代码足够什么是我的参数[]?

这是我的方法:

public static void parseCrewWithListMapping(String filePath) { 
    ObjectMapper mapper = new ObjectMapper(); 

    try { 
     List<Crew> crews = mapper.readValue(new File(filePath), 
       mapper.getTypeFactory().constructCollectionType(List.class, Crew.class)); 

     for(Crew crew : crews) { 
      System.out.println(crew); 
     } 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
} 

这是我试图运行这个方法主要方法。

public class CrewParsing { 
    public static void main(String[] args) 
      throws ParserConfigurationException, SAXException, IOException, XMLStreamException { 

     if(args.length < 1) 
      throw new RuntimeException("No argument exception"); 

     System.out.println("Parsing Crew Names"); 
     CrewParser.parseCrewWithListMapping(args[2]); 
     System.out.println("Finished\n\n"); 

    } 
} 

我所有的文件都在正确的地方,我想重新创建:

public static void parseJSONWithListMapping(String filePath) { 
    ObjectMapper mapper = new ObjectMapper(); 

    try { 
     List<Employee> employees = mapper.readValue(new File(filePath), 
       mapper.getTypeFactory().constructCollectionType(List.class, Employee.class)); 

     for(Employee employee : employees){ 
      System.out.println(employee); 
     } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

方法:

public static void parseJSONWithListMapping(String filePath) { 
    ObjectMapper mapper = new ObjectMapper(); 

    try { 
     List<Employee> employees = mapper.readValue(new File(filePath), 
       mapper.getTypeFactory().constructCollectionType(List.class, Employee.class)); 

     for(Employee employee : employees){ 
      System.out.println(employee); 
     } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

主要方法(工作):

public class Practice1Test { 
    public static void main(String[] args) 
      throws ParserConfigurationException, SAXException, IOException, XMLStreamException { 

     if(args.length < 1) 
      throw new RuntimeException("No argument exception"); 

     System.out.println("Parsing Crew Names"); 
     CrewParser.parseJSONWithListMapping(args[2]); 
     System.out.println("Finished\n\n"); 

    } 
} 

通过时args[2]作为parseJSONWithListMapping在代码工作的参数,我得到了我的JSON结果就好。 但是当我尝试我的代码时,运行了“无参数异常”,我认为这是告诉我没有参数传递。

可能是什么问题?我真的希望这是足够的细节; _;

+0

你能展示一个你用来运行你的程序的示例命令行参数列表吗? – Eran 2014-11-03 17:11:41

+0

args是您可以调用主要方法的参数!如果你使用的是eclipse,请选择“运行配置”来为你的启动添加一些参数! – Michael 2014-11-03 17:12:33

回答

0

当您运行在命令行程序,你可以在参数列表中传递,如:

java CrewParsing jsonPath1 jsonPath2 jsonPath3 

如果从一个IDE,比如Eclipse运行时,你很可能只是点击RunDebug并忘记输入任何参数。在Eclipse中 - 右键单击​​您的主类,并将鼠标悬停在Run(or Debug) as...上时,请选择run(debug) configuration。有一个参数标签,你可以在那里输入它们。您正在复制的程序可能已经设置好了。


如果您想对参数的一些详细信息,我觉得Oracle command line tutorial解释说得好:(所有的链接所)

Java应用程序可以接受的命令行任意数量的参数。这允许用户在启动应用程序时指定配置信息。

用户在调用应用程序时输入命令行参数,并在要运行的类的名称后指定它们。例如,假设一个名为Sort的Java应用程序对文件中的行进行排序。要在文件名为friends.txt对数据进行排序,用户需要输入:

java Sort friends.txt 

当一个应用程序启动时,运行时系统通过将命令行参数的应用程序的主要方法字符串数组。在前面的示例中,将命令行参数传递给包含单个字符串:“friends.txt”的数组中的Sort应用程序。

回声例如通过本身显示每个的一行其命令行参数:

public class Echo { 
    public static void main (String[] args) { 
     for (String s: args) { 
      System.out.println(s); 
     } 
    } 
} 

下面的示例示出了用户如何可能遇到回声。用户输入用斜体表示。

java的回声喝辣的Java

Drink 
Hot 
Java 
//3 separate arguments are all printed out - args[0], args[1], args[2] 

如果你仍然不知道你确实有,我会尝试打印出你的论点一样,教程介绍了哪些参数。

+0

如果您从IDE等IDE运行,您可能只是单击运行或调试并忘记输入任何参数。在Eclipse中 - 右键单击​​主类,并将鼠标悬停在Run(或Debug)上时,选择运行(调试)配置。有一个参数标签,你可以在那里输入它们。您正在复制的程序可能已经设置好了。 <=哦哈哈哈当我在eclipse中甚至没有意识到这个特性。你提到的其他事情我知道,但我认为我错过了一些东西,实际上并非如此。谢谢! – user3240534 2014-11-04 03:25:49

3

你检查args.length < 1和投掷“无参数异常”,但此时你试图使用args[2],这是第三命令行参数。

如果你想要第一个,它是args[0],第二个是args[1],依此类推。如果你需要一个参数,你的args.length < 1是正确的,你会使用args[0]。如果您需要两个参数,则会使用args.length < 2作为错误,然后使用args[0]args[1]