我使用 Vertx 和 Jasper Reports,我可以成功创建我的报告,但是当我关闭 PDF 文件时服务器停止运行。我想让我的服务器继续运行。
这是我的代码:
public void start(Future<Void> startFuture){
String fileJSON = "{name : 'Stackoverflow', start: '15-06-2014', end: '02-09-2018'}";
String file = "/Test1";
Router router = Router.router(vertx);
router.route(file).handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.setChunked(true);
InputStream iostream = new ByteArrayInputStream(fileJSON.getBytes(StandardCharsets.UTF_8));
try{
JsonDataSource ds = new JsonDataSource(iostream);
Map parametersMap = new HashMap();
String report = "C:\\PathToreport\\report2.jrxml";
JasperReport Jasp = JasperCompileManager.compileReport(report);
JasperPrint JASP_PRINT = JasperFillManager.fillReport(Jasp,parametersMap,ds);
JasperViewer.viewReport(JASP_PRINT);
JasperExportManager.exportReportToPdfFile(JASP_PRINT, "C:\\Users\\path\\report4.pdf");
}
catch(Exception e){ System.out.println(e);}
routingContext.vertx().setTimer(1000, tid -> routingContext.response().end());
});
vertx.createHttpServer()
.requestHandler(router::accept)
.listen(8089, "localhost", res -> {
if (res.succeeded()){
startFuture.complete();
}
else
startFuture.fail(res.cause());
});
}
这是堆栈:
vr. 07, 2016 9:25:04 AM io.vertx.core.impl.BlockedThreadChecker AVERTISSEMENT: Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 2407 ms, time limit is 2000 avr. 07, 2016 9:25:05 AM io.vertx.core.impl.BlockedThreadChecker AVERTISSEMENT: Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 3407 ms, time limit is 2000 avr. 07, 2016 9:25:06 AM io.vertx.core.impl.BlockedThreadChecker AVERTISSEMENT: Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 4407 ms, time limit is 2000 BUILD SUCCESSFUL (total time: 27 seconds)
最佳答案
解决了,我必须向 viewReport 添加错误参数
JasperViewer.viewReport(JASP_PRINT, false);
关于java - 顶点 : Keep serve alive after closing PDF file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36460592/