编译错误

时间:2013-04-03 01:20:11

标签: java jasper-reports

我刚刚开设了一个我几年前学习Java的“项目”,虽然它运行良好,但我得到了这些错误,我不知道它们是什么意思:

  

警告:[options] bootstrap类路径未设置   -source 1.5注意:D:*** \ src \ java \ reportes \ ServletRLineaMunieca.java使用或覆盖不推荐使用的API。

     

注意:使用-Xlint重新编译:弃用以获取详细信息。

     

注意:D:*** \ src \ java \ reportes \ ServletRLineaMunieca.java使用   未经检查或不安全的操作。

     

注意:使用-Xlint重新编译:取消选中以获取详细信息。

     

1警告


此Web项目包含许多文件,但我只会粘贴提供错误的文件:

package reportes;

import com.sql.ConectaDb;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

public class ServletRLineaMunieca extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

    try {
        HttpServletRequestWrapper srw =
                new HttpServletRequestWrapper(request);
        String fpath = srw.getRealPath("") +
                "/reporte/RLineaMunieca.jrxml";

        JasperDesign jasperDesign =
                JRXmlLoader.load(fpath);
        JasperReport jasperReport =
                JasperCompileManager.compileReport(
                jasperDesign);

        HashMap jasperParameter = new HashMap();
        jasperParameter.put("logo", "http://localhost:8084/tarea/images/logo.jpg");

        Connection cn = new ConectaDb().getConnection();
        byte[] bytes =
                JasperRunManager.runReportToPdf(
                jasperReport, jasperParameter, cn);
        cn.close();

        response.setContentType("application/pdf");
        response.setContentLength(bytes.length);
        ServletOutputStream out =
                response.getOutputStream();
        out.write(bytes, 0, bytes.length);
        out.flush();
        out.close();

    } catch (Exception e) {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>Reportes</title></head>");
        out.println("<body>");
        out.println("<pre>");
        e.printStackTrace(out);
        out.println("</pre>");
        out.println("</body>");
        out.println("</html>");
    }



} 

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** 
 * Handles the HTTP <code>GET</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
} 

/** 
 * Handles the HTTP <code>POST</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}

/** 
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

自从我很久以前就这样做以来,我已经忘记了很多关于Java的事情。请耐心等待,这也是我第一次在这里发帖,如果我的代码被粘贴错误请告诉我如何正确地做到这一点。

我忘了添加这部分:

String fpath = srw.getRealPath("") +

getrealpath是删除线(你怎么说?)

3 个答案:

答案 0 :(得分:1)

我已经解决了我的问题,我改变了这样:

String fpath = srw.getRealPath("") +

String fpath = srw.getSession().getServletContext().getRealPath("") +

HashMap jasperParameter = new HashMap();

HashMap<String, String> jasperParameter;
jasperParameter = new HashMap<>(); 

感谢所有人:)

答案 1 :(得分:0)

从Java 5开始,如果您使用的是没有类型说明符的集合(例如,HashMap()而不是HashMap())。这意味着编译器无法使用泛型来检查您是否以类型安全的方式使用集合。

要消除警告,只需具体说明您在集合中存储的对象类型。所以,而不是

HashMap jasperParameter = new HashMap();

使用

HashMap<String, String> jasperParameter = HashMap<String, String>();

答案 2 :(得分:0)

当Oracle的好人退出一个类或方法因为有问题或者他们厌倦了更新它时,他们将它标记为@Deprecated。您正在使用的方法之一标记为这样。

javac -Xlint:unchecked myFile.java将告诉您使用哪种方法,此时您可以在该方法上查找javadoc并找出它已退役的原因以及您是否在乎。

你可能不会。例如,如果计时器方法因夏令时处理不当而退役,那么您的应用程序可能不会以此缺陷的方式使用它。

在这种情况下,您没有为HashMap添加类型检查。请查看以下链接,了解Generics的工作原理。即使它不会改变这个程序的行为,也值得学习。

http://docs.oracle.com/javase/tutorial/java/generics/