FileUploadTools.java 封装了 四个属性和一个beginUpload()方法
private String username;

private File uploadFile[];

private String uploadFileFileName[];

private String uploadFileContentType[];        public String beginUpload() { ...};然后用Register.java调用FileUploadTools.java的方法报错,检查了很多遍,就是没有找到原因,还望大家帮帮忙,找找别扭啊。
Register.java代码:package controller;import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.text.SimpleDateFormat;import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;import upload.FileUploadTools;import com.opensymphony.xwork2.ActionSupport;
public class Register extends ActionSupport{

/**
 * 
 */ private FileUploadTools fileUploadTools = new FileUploadTools();

public FileUploadTools getUploadTools(){
return fileUploadTools;
}

public void setFileUploadTools(FileUploadTools fileUploadTools){
this.fileUploadTools=fileUploadTools;
}
@Override
public void validate(){

} public String execute() throws IOException{
fileUploadTools.beginUpload();

return "register";
}


}
FileUploadTools.java代码:

package upload;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;public class FileUploadTools { private String username;

private File uploadFile[];

private String uploadFileFileName[];

private String uploadFileContentType[];



public String getUsername(){
return username;
}

public void setUsername(String username){
this.username=username;
}

public File[] getUploadFile(){
return uploadFile;
}

public void setUploadFile(File[] uploadFile){
this.uploadFile=uploadFile;
}

public String[] getUploadFileFileName(){
return uploadFileFileName;
}

public void setUploadFileFileName(String[] uploadFileFileName){
this.uploadFileFileName=uploadFileFileName;
}

public String[] getUploadFileContentType(){
return uploadFileContentType;
}

public void setUploadFileContentType(String[] uploadFileContentType){
this.uploadFileContentType=uploadFileContentType;
}

public String beginUpload() throws IOException {

System.out.println("username的值是:"+username);

String targetDirectory=ServletActionContext.getServletContext().getRealPath("/upload");

for(int i=0;i<uploadFile.length;i++){

File target = new File(targetDirectory,new SimpleDateFormat(
"yyyy_mm_dd_hh_mm_ss").format(new Date()).toString(
)+System.nanoTime()+uploadFileFileName[i]);

FileUtils.copyFile(uploadFile[i],target);
}
System.out.println("");
return "register";
}
}其他代码及配置register.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false" %>
<%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   
  <body> 
 
<s:form action="register" method="post" enctype="multipart/form-data" >
username:<s:textfield name="fileUploadTools.username"></s:textfield>
<br/>
<s:file name="fileUploadTools.uploadFile"></s:file>
<br/>
<s:file name="fileUploadTools.uploadFile"></s:file>
<br/>
<s:file name="fileUploadTools.uploadFile"></s:file>
<br/>
<s:submit value="提交"></s:submit>
</s:form>

  </body>
</html>struts.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="struts3.1" extends="struts-default" > <action name="register" class="controller.Register">
<result name="register">showregister.jsp</result>
<result name="input">register.jsp</result>

</action>
</package><constant name="struts.ui.theme" value="simple"></constant>
</struts>
struts.propertiesstruts.multipart.maxSize=2048000000
struts.multipart.SaveDir=/tempUploadFile
BeanJavaStrutsweb

解决方案 »

  1.   


    2013-6-29 2:13:37 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
    严重: Exception occurred during processing request: null
    java.lang.NullPointerException
    at upload.FileUploadTools.beginUpload(FileUploadTools.java:61)
    at controller.Register.execute(Register.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:325)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
      

  2.   

    严重: Exception occurred during processing request: null
    java.lang.NullPointerException
    at upload.FileUploadTools.beginUpload(FileUploadTools.java:61)
    at controller.Register.execute(Register.java:39)
      

  3.   

    你的username值get,set()是放在FileUploadTools中,但是你页面提交的时候,跳转的action是Register,
    Register调用FileUploadTools的时候,username没有获取到,也就是null,所有报空指针异常,你可以把FileUploadTools中的get,set()放到Register里面,然后再方法中传参数过去。
      

  4.   

    或者你直接跳转到FileUploadTools    action中,省去Register这一步
      

  5.   


    for(int i=0;i<uploadFile.length;i++){

    System.out.println("当前i的值是:"+i);

    File target = new File(targetDirectory,new SimpleDateFormat(
    "yyyy_MM_dd_hh_MM_ss").format(new Date()).toString(
    )+System.nanoTime()+uploadFileFileName[i]);

    FileUtils.copyFile(uploadFile[i],target);
    }
    问题出在这段代码上面,for循环的第一句都没有执行
      

  6.   

    问题找到了,upload实现文件上传的时候是不能在Action的bean中封装的,只能在Action中封装upload。