【问题】
用antlrworks 1.5rc2,去调试antlr v3的代码,结果出错:
后来也就接着出现,无法打开对应的DebuggerTab。
其中,关于无法打开对应的DebuggerTab,之前就遇到了:
【已解决】ANTLRWorks调试出错:Cannot launch the debuggerTab. Time-out waiting to connect to the remote parser
【解决过程】
1.换了别的antlrworks 1.x的版本,比如:
antlrworks-1.4.3.jar
antlrworks-1.2.2.jar
错误依旧。
2.确认了,当前环境变量,都是正确的:
- JAVA_HOME是正确的:
- C:\Program Files\Java\jdk1.7.0_11
- PATH中包含java的bin目录:
- %JAVA_HOME%\bin;
- CLASSPATH = .;%JAVA_HOME%\jre\lib\rt.jar;D:\DevTool\DD_Parser\Parser\ANTLR\antlr\antlr-4.0-complete.jar;
但是,结果还是错误依旧。
3.注意到,当前的antlrworks->Help->About->Information中,检测出来的Java,却是:
jdk_1.6.0_31,
而不是上面,环境变量中,设置的jdk1.7.0_11
所以,觉得有些诡异。
4.另外,针对antlrworks->File>Preferences->Compiler中
设置Javac为手动添加的Path=C:\Program Files\Java\jdk1.7.0_11\bin
classpath也手动加上custom为
.;%JAVA_HOME%\jre\lib\rt.jar;
或
.;%JAVA_HOME%\jre\lib\rt.jar;D:\DevTool\DD_Parser\Parser\ANTLR\antlr\antlr-4.0-complete.jar;
均是无效,错误依旧。
5.后来,经过很多测试,发现,把
antlrworks->File>Preferences->Compiler->javac->Path
设置为,antlrworks所检测到那个java6所对应的bin路径:
C:\Program Files (x86)\Java\jdk1.6.0_31\bin
就可以解决此问题了。
所以,推导出根本原因:
【总结】
由于系统当前安装了多个java:
有3个版本的jdk(x86版的java1.6.0_31,x64版的java1.7.0_11等等),加上3个版本的jre
导致,antlrworks检测出的java是
java1.6.0_31
而不是环境变量所设置的
java1.7.0_11
导致,无法正常找到javac并运行。
解决办法:
手动设置
antlrworks->File>Preferences->Compiler->javac->Path
为,antlrworks所检测到的那个java的bin路径,即可。
此处为:
C:\Program Files (x86)\Java\jdk1.6.0_31\bin
更加建议:
删除系统中,多余的,其他的版本的java,只包括一个必须要用的,
比如此处的x64的1.7.0_11版本的jdk(其包含了jre),其他的版本都删除了。
以避免多种java(jdk和jre)混合,导致类似此处的某个工具(antlrworks)检测出的java版本和你环境变量中的java的版本不一致,而出现各种奇怪的问题。
转载请注明:在路上 » 【已解决】antrlworks调试出错:Compiler exception: java.io.IOException Cannot run program "\javac": CreateProcess error=2 The system cannot find the file specified