Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在linux上部署时出现NoSuchMethodError_Java_Linux_Windows_Tomcat - Fatal编程技术网

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)。
您可以在这里找到更多提示:

您的系统是否有jre7
System.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 ...