Java 在linux上部署时出现NoSuchMethodError
我有以下从文件读取的代码:Java 在linux上部署时出现NoSuchMethodError,java,linux,windows,tomcat,Java,Linux,Windows,Tomcat,我有以下从文件读取的代码: private static void writeLogs(String filePath, PrintWriter writer)throws ServletException, IOException { String fullFilePath = AppConfig.getAppDir()+"/auditlogs/"+filePath+".log"; System.out.println("loading log files from --&g
private static void writeLogs(String filePath, PrintWriter writer)throws ServletException, IOException {
String fullFilePath = AppConfig.getAppDir()+"/auditlogs/"+filePath+".log";
System.out.println("loading log files from --> "+fullFilePath);
BufferedReader br = new BufferedReader(new FileReader(fullFilePath));
try {
StringBuilder sb = new StringBuilder();
String line;
List<String> tmp = new ArrayList<String>();
do {
line = br.readLine();
tmp.add(line);
}while (line != null);
for(int i=tmp.size()-1;i>=0;i--) {
if(tmp.get(i)!=null){
sb.append(tmp.get(i));
sb.append(System.lineSeparator());
}
}
String logs = sb.toString();
writer.write(logs);
} finally {
br.close();
}
}
该错误是由于System.lineSeparator()
引起的,但当我检查javadoc时,它显示:
返回系统相关的行分隔符字符串。它总是回来
相同值-系统属性的初始值
行分隔符
在UNIX系统上,它返回“\n”;Microsoft Windows系统上的it
返回“\r\n”
有人能解释一下为什么这不起作用,以及如何修复它,使它能在多个平台上工作吗?似乎您在Linux和Windows之间使用的Java版本不同 如您所见,
System.lineSeparator()
在java<7中不存在
因此,如果要在java<7上获得行分隔符,必须使用:
System.getProperty("line.separator")
您似乎正在Windows和Linux上运行不同的JDK版本
- 在Windows上,JDK是7,它已定义了)方法李>
- 在Linux机器上运行的以前的JDK版本(Java6中的check类)中不存在相同的方法
对于向后兼容的代码,请使用
System.getProperty(“line.separator”)
System.lineSeparator()
在Java7
中引入。看来您在Linux机器上使用的是早期版本。您可以使用System.getProperty(“line.separator”)代码>以获取它或在linux机器上升级java版本。正如其他人指出的,版本存在问题。
我敢说仅仅改变JVM是不够的。
您的程序可以在启动时检查预期版本,以避免将来出现此类问题:
您也可以对其他设置(区域设置…)执行此操作,但这些设置取决于项目的性质。一个想法是一个死掉的程序比一个残废的程序好(快速失败),另一个想法是你应该一次解决一个问题(一次查找bug)。
您可以在这里找到更多提示:您的系统是否有jre7System.lineSeparator()
是java 1.7中的一个新方法,那么System.getProperty(“line.separator”)
呢<代码>行分隔符()
方法从java 1.7开始引入。。。
System.getProperty("line.separator")
String runtimeName = System.getProperty("java.runtime.name");
String runtimeVersion = System.getProperty("java.runtime.version");
... check if JVM is the expected one, log some informative message if not ...