2017-05-10 1 views
0

i JDK bin mit 1,8, 7,0 tomcat, ZK 8.0.2.2 und JSF-2.2.8 und ich habe in meinem Web-inf/lib den fowlling Für die ZK Rahmen Gläser:download zip mit Zk Rahmen

zcommon-8.0.2.2.jar

zel-8.0.2.2.jar

zk-8.0.2.2.jar

zul-8.0.2.2.jar

zweb-8.0. 2.2.jar

bsh-2.0b6.jar

commons-codec-1.8.jar

commons-Fileupload-1.2.2.jar

Javassist-3.18.2-GA.jar

slf4j-api-1.7.5.jar

slf4j-jdk14-1.7.5.jar

Ich erstelle eine Zip-Datei, die 4 Dateien mit Erfolg enthält.

Dies ist die Funktion, die eine Zip-Datei public class FileDownloadServer schafft {

public static void getZipFile(List<String> fileList, String fileZip, String sourcePath){ 
    byte[] buffer = new byte[2014]; 
    try { 
     FileOutputStream fos = new FileOutputStream(fileZip); 
     ZipOutputStream zos = new ZipOutputStream(fos); 

     for(String file : fileList){ 
      ZipEntry ze= new ZipEntry(file); 
      zos.putNextEntry(ze); 
      System.out.println("avant"); 
      FileInputStream in = new FileInputStream(sourcePath + File.separator + file); 
      System.out.println("aprés"); 
      int len; 
      while ((len = in.read(buffer)) > 0) { 
        zos.write(buffer, 0, len); 
      } 
      in.close(); 
     } 
     zos.closeEntry(); 
     zos.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 


    } 

Und hier die Funktion für Benutzer:

@ManagedBean 
    public class testBean { 

    private final static List<String> fileList=Arrays.asList("x.csv","z.csv","y.csv","t.csv"); 
    private final static String sourcePath="C:/output/"; 
    private final static String fileZip="C:/zip/batch.zip"; 
    private final static String contentType="application/zip"; 

public void download() throws IOException{ 
    FileDownloadServer.getZipFile(fileList, fileZip, sourcePath); 

     File f = new File(fileZip); 
     InputStream is = new FileInputStream(f); 
     if(is.equals(null)){ 
      System.out.println("is is null"); 
     }else{ 
      System.out.println(" is not null"); 
     } 
     if(contentType.equals(null)){ 
      System.out.println("contentType is null"); 
     }else{ 
      System.out.println("contentType not null"); 
     } 
     if(f.getName()!=null){ 
      System.out.println("name " + f.getName()); 
     }else{ 
      System.out.println("flnm is null"); 
     } 

     //For downloading zip file 
     Filedownload.save(is, contentType, f.getName()); 
} 

}
und ich erhalte diese Ausnahme java.lang.NullPointerException und die Parameter der Funktion sind nicht null Ich versuchte, sie vor dem Aufruf der Funktion alle ist gut angezeigt:

mai 10, 2017 6:04:33 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError 
GRAVE: java.lang.NullPointerException 
at org.zkoss.zul.Filedownload.save(Filedownload.java:54) 
at org.zkoss.zul.Filedownload.save(Filedownload.java:94) 
at ma.controle.gestion.bean.batch.BatchExcelBean.uploadFile(BatchExcelBean.java:112) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.el.parser.AstValue.invoke(AstValue.java:279) 
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) 
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:319) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755) 
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931) 
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.primefaces.barcelona.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 

Ich schätze Ihre Hilfe.

Danke.

+0

Ist 'Filedownload' eine Klasse, die Sie geschrieben haben? – VGR

+0

@VGR Nein, es ist eine zk-Framework-Klasse, um den Browser zum Herunterladen der Datei auszulösen: https://www.zkoss.org/wiki/ZK_Component_Reference/Essential_Components/Filedownload –

+2

@Rodik, ich habe den 'Filedownload'-Code (Version 8.0), und in Zeile 54 versucht es, die aktuelle Ausführung zu erhalten, die nur innerhalb eines Ereignis-Listener-Threads funktioniert. Ich bin auch auf dieses Problem gestoßen. Rufen Sie 'Filedownload.save()' in einem Worker-Thread auf? –

Antwort

1

Sie es einfach zu wickeln für zukünftige Leser auf: Die Zeile in Filedownload.save(), die versucht, den aktuellen Execution abzurufen ausfällt, die, wie Sie save() in einem Worker-Thread aufrufen fehl (dh ein Thread, der keinen Zugang zum Desktop hat) .

diesen Link Lesen Sie für weitere Informationen, wie mit Hilfe von Executions.activate(Desktop) den Desktop/Ausführung von einem Worker-Thread zuzugreifen: https://www.zkoss.org/wiki/Small_Talks/2015/January/Simplify_Long_Operation_Handlings#Long_Operations_made_simple