以下是我尝试运行ObjectMapper om = new ObjectMapper();
Data data = om.readValue(input, Data.class);
myProgram.jar
批处理文件使用set /p _count="enter count: "
set /p _toc="enter TOC"
choice /N /C:TO /M "Select Type(T/O): "
if errorlevel ==1 set _type=T
if errorlevel ==2 set _type=O
choice /N /C:SF /M "Select status(S/F): "
if errorlevel ==1 set _status=T
if errorlevel ==2 set _status=O
java -jar dir/myProgram.jar %_count% %_type% %_status% %_toc%
,java -jar
,_count
和_type
四个参数执行_status
命令。
我只在java中获得_toc
和_count
的值。
问题是剩下的两个参数是作为_toc
值传递的,因此每次运行程序时我都面临null
。
答案 0 :(得分:0)
来自CHOICE/?
:
When you use ERRORLEVEL parameters in a batch program, list them in decreasing order.
这意味着您使用以下语法:
If ErrorLevel 2 Set "_type=O"
If ErrorLevel 1 Set "_type=T"
如果您愿意,常用的替代方法是使用%ERRORLEVEL%
代替:
If "%ErrorLevel%"=="1" Set "_status=T"
If "%ErrorLevel%"=="2" Set "_status=O"
答案 1 :(得分:0)
您的错误无法复制,我很确定它会导致简单的印刷错误,或者您的Java App中没有向我们展示。
我执行了以下操作来重现您的行为:
args
写入控制台:import java.util.Arrays;
class App {
public static void main(String[] args) {
Arrays.stream(args).forEach(System.out::println);
}
}
jdk1.8.0_91
进行编译。javac .\App.java
jar cvfe App.jar App *.class
set /p _count="enter count: "
set /p _toc="enter TOC"
choice /N /C:TO /M "Select Type(T/O): "
if errorlevel ==1 set _type=T
if errorlevel ==2 set _type=O
choice /N /C:SF /M "Select status(S/F): "
if errorlevel ==1 set _status=T
if errorlevel ==2 set _status=O
java -jar App.jar %_count% %_type% %_status% %_toc%
使用输入:5, 6, T, F
,它提供了以下输出:
5
Ť
Ø
6
这意味着 - 恕我直言 - 你的错误存在于获取args
的java代码中,NullPointerException
被System.Console()
引发而不是args[n]
,或者您发布的批处理代码不是确切地说,它是如何在您的计算机上执行的。
总结一下:如果您的批处理使用4个参数调用命令行(例如您的示例代码),args
有4个参数。