java.lang.NullPointerException
java.io.File.<init>(File.java:262)
com.yiyi.action.UploadAction.upload(UploadAction.java:32)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.

解决方案 »

  1.   

    我的uploadaction类package com.yiyi.action;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport{ /**
     * 
     */
    private static final long serialVersionUID = -8936956951350346958L;

    private File picture;
    @SuppressWarnings("unused")
    private String pictureContentType;
    private String pictureFileName;

    public String execute(){
     return "input";
    }

    public String upload() throws Exception{

    File saved = new File(ServletActionContext.getServletContext().getRealPath("upload"),pictureFileName);
    InputStream ins = null;
    OutputStream ous = null;
    try {
    saved.getParentFile().mkdirs();//确保文件夹upload存在
    ins = new FileInputStream(picture);
    ous = new FileOutputStream(saved);
    byte[] b = new byte[1024]; // 字节缓存
    int len = 0 ;
    while((len = ins.read(b))!= -1){ //循环读入,直至结束
    ous.write(b,0,len);
    }


    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if(ins != null ){
    try {
    ins.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if(ous != null){
    try {
    ous.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    return "list";

    }}
      

  2.   

    struts的配置
    <package name="test" namespace="/test" extends="struts-default">
    <action name="upload" class="com.yiyi.action.UploadAction" method="upload">
    <result name="list">/upload_list.jsp</result>
    <result name="input">/upload.jsp</result>
    </action>
    </package>
    upload.jsp <s:form action="test/upload" enctype="multipart/form-data" method="post">
         <s:label value="上传测试"></s:label>
         <s:file name="picture" label="文件:"></s:file>
         <s:submit value="上传" method="upload"></s:submit>
        </s:form>
      

  3.   


        private File picture;
        @SuppressWarnings("unused")
        private String pictureContentType;
        private String pictureFileName;这些有get/set方法没?