我正在构建一个用Java编写的JPEG编码器的优化。要做我的基准测试,我想将原始代码和优化代码提取到单独的jar中。每个jar都必须有两个参数。第一个用于文件名,第一个用于重复压缩jpeg。
public static void main(String[] args) {
String filepath = args[0];
try {
int times = Integer.getInteger(args[1]);
runBenchmark(filepath, times);
} catch(IOException | NumberFormatException ioe) {
System.out.println("Your arguments are Wrong! Use the follow order!");
System.out.println("1. Argument must be the filename of the image.");
System.out.println("2. Argument must be a number to repeat the compression.");
}
}
这是我的主人,女巫处理我的args。我无法在IntellJ上运行参数。即使我把它编译成jar,我也无法通过我的arg2。
我通过intellj中的配置传递了两个参数,我得到一个NullPointerException。所以我试图弄清楚我的java是否可以采用两个参数。我在vim中编写了一个简单的main,并使用两个args编译运行它。我在intellj的一个新项目中重复了这个。 这很有效。但为什么呢?
答案 0 :(得分:2)
您必须检查参数是否为int。 使用Integer.parseInt()和try-catch块通知用户是否发生了故障。
int times = 0;
try {
times = Integer.parseInt(args[1]);
} catch (Exception e) {
System.out.println("failure with a parameter");
}
答案 1 :(得分:2)
我将方法更改为Integer.parseInt(string),现在它可以工作了。它是Integer.getInt()。我以为我现在有2. arg因为我得到了NullPointerException。 现在它可以使用这段代码了。
public static void main(String[] args) {
try {
String filepath = args[0];
int times = Integer.parseInt(args[1]);
runBenchmark(filepath, times);
} catch (NumberFormatException nfe) {
System.out.println("2. Arg must be an number");
} catch (IOException ioe) {
System.out.println("File not found.");
} catch(Exception e) {
System.out.println("Your arguments are Wrong! Use the follow order!");
System.out.println("1. Argument must be the filename of the image.");
System.out.println("2. Argument must be a number to repeat the compression.");
}
}