Java 6 - 尝试复制和粘贴文件时出现StackOverflowError

时间:2016-09-12 04:50:20

标签: java jboss7.x fileutils

Java 6
jboss-as-7.1.1.Final

我需要复制并粘贴文件。使用org.apache.commons.io.FileUtils,我尝试使用以下代码,

如果我从jsp调用sync(),那么

  

... java.lang.StackOverflowError at   org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280)   [jbossweb-7.0.13.Final.jar:] at   org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280)   [jbossweb-7.0.13.Final.jar:] at   org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280)   [jbossweb-7.0.13.Final.jar:]

private void sync() {
    try {
        FileUtils.copyFile(new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_src/compose.xml"), 
        new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_dest/compose.xml"));            
    } 
    catch (IOException e) {
        e.printStackTrace();
    }
}

如果我运行与独立java应用程序相同的代码,则会将文件复制并粘贴到目标

public static void main(String s[]) {
    try {
        FileUtils.copyFile(new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_src/compose.xml"), 
        new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_dest/compose.xml"));        
    } 
    catch (IOException e) {
        e.printStackTrace();
    }
}

为什么我在JBoss环境中调用代码时获取StackOverflowError,而执行与java应用程序相同的代码却成功运行?感谢。

2 个答案:

答案 0 :(得分:3)

我猜测,因为您将文件复制到具有复制程序的WAR中,然后它会同步。然后将文件复制到正在复制它的WAR中,然后进行同步。然后将文件复制到正在复制它的WAR中,然后同步....

JBoss非常聪明,可以通过自动重新部署来重新加载WAR文件中已更改的代码。当您作为独立的Java应用程序运行时,没有容器,因此不会重新部署。

答案 1 :(得分:0)

我找到了解决此问题的方法。我的框架中的动作类配置(内部构建的框架)不正确,因此导致在循环中调用动作类。我更新了该设置,从而阻止了循环中的动作类执行。

SO post也引导了我。