调用applet的html页面<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>打印窗口</title>
</head>
<script language="javascript">
<!--
function openApp()
{
var url = "http://localhost:8080/BsIreport/TEST/JRPrintServlet";
document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "./TEST" ARCHIVE = "jasperreports-3.5.3-applet.jar" WIDTH = "100%" HEIGHT = "100%">');
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');
document.write('<PARAM NAME = "scriptable" VALUE="false">');
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
document.write('</APPLET>');
}-->
</script>
<body bgcolor="#FFFFFF">
<input type="button" value="测试打印" onclick="openApp();"></body>
</html>Appletpublic class JRPrinterApplet extends Applet {//    @Override
//    public void paint(Graphics g) {
//        g.drawString("Hello World",50,50);
//    }
    private URL url = null;
    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    @Override
    public void init() {
        super.init();
        String strUrl = getParameter("REPORT_URL");
        
        if(strUrl!=null){
        try{
            //JOptionPane.showMessageDialog(this,getCodeBase().toString());
            url = new URL(getCodeBase(),strUrl);//从获得html参数中获得报表URL
           // JOptionPane.showMessageDialog(this,url.toString());
        }catch(Exception e){
        e.printStackTrace();
        }
        }else
        JOptionPane.showMessageDialog(this, "Source URL not specified");
        // TODO start asynchronous download of heavy resources
    }    @Override
    public void start(){
        if(url!=null){
            try{
            JOptionPane.showMessageDialog(this,url.toString());
            Object obj = JRLoader.loadObject(url);//发送对象请求,获得JasperPrint对象
            JOptionPane.showMessageDialog(this,url.toString());
            //JasperPrint jprint = (JasperPrint) JRLoader.loadObject(url);
            JasperViewer.viewReport((JasperPrint)obj, true);
            
            //JasperPrintManager.printReport((JasperPrint)obj, true);//调用方法打印所获得的JasperPrint对象
            }catch(Exception e){
            e.printStackTrace();
            }
        // TODO overwrite start(), stop() and destroy() methods
       }
    }
}servlet
public class JRPrintServlet extends HttpServlet {
   
    private static final long serialVersionUID = 348226870594216833L;    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        this.doPost(req, resp);
    }    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException
    {
        try
        {
            //生成测试数据var url = "http://10.168.0.178:8080/BsIreport/TEST/JRPrinterApplet";
            String repFilePath="E:\\IReport\\BsIreport\\build\\web\\TEST\\BS.jasper";
            Map Param=new HashMap();
            File file=new File(repFilePath);
            //JasperReport jasperReport=(JasperReport)JRLoader.loadObject(JasperCompileManager.compileReportToFile(repFilePath));
            JasperReport jasperReport=(JasperReport)JRLoader.loadObject(repFilePath);
            JRDataSource dataSource=new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(DeptBeanFactory.getBeanCollection());
            JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, Param,dataSource);            //设定输出格式
             resp.setContentType("application/octet-stream");
             ServletOutputStream out = resp.getOutputStream();
             ObjectOutputStream os = new ObjectOutputStream(out);
             os.writeObject(jasperPrint);
             os.flush();
             os.close();
             out.flush();
             out.close();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
   Object obj = JRLoader.loadObject(url);//发送对象请求,获得JasperPrint对象
运行的时候一直卡在这一步。是不是我的URL 传递错误?这里的URL到底是一个什么路径
我这里的这里的url 就是这个 http://localhost:8080/BsIreport/TEST/JRPrintServletBsIreport 为工程目录
TEST 是编译后产生的class文件
JRPrintServlet为servlet类web/test/JRPrintServlet.class
web/test/JRPrinterApplet.class
web/JRPrintTest.html用的是jboss服务 工具是NetBeans6.5 jasperreports-3.5.0.jar

解决方案 »

  1.   


    JAVA主控台的提示Exception in thread "thread applet-JRPrinterApplet.class-1" java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/util/JRLoader
    at JRPrinterApplet.start(JRPrinterApplet.java:57)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.util.JRLoader
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 3 more
    Caused by: java.io.IOException: open HTTP connection failed:http://localhost:8080/BsIreport/TEST/net/sf/jasperreports/engine/util/JRLoader.class
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 7 more
      

  2.   

    我这几天在做项目时也出现了这个问题,在网上搜了一下基本全是在问没有回答,这个帖子也够老的了还是回复下吧,以助后来人。
    楼主的问题主要是因为没有引入相关的JAR包原因,有一个jasperreports-3.0.0.jar文件(版本会有所不同后面的版本号也会不同),将APPLET所用到的类文件全部打包到这个JAR文件中,在页面引用APPLET时引用此JAR文件即解决问题。
    可能说的不详细,时间仓促就这样吧。