日期:2014-05-20  浏览次数:20885 次

netbeans ireport插件调用报表出错
netbeans 的ireport插件设计报表格式用javabean数据源,预览成功,但是用一下的代码调用报表就报错
//调用出现异常的类
import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

public class TestReport {

  public static void main(String[] args) {
  TestReport.showReport();
  }

  private static void showReport() {
  String reportPath = "C:\\Users\\Administrator\\Documents\\NetBeansProjects\\IreportTest\\src\\com\\xgz\\newReport.jasper";
  Map parameters = new HashMap();
  // 如果报表中有用到变量,在这里给它赋值.
  //parameters.put("ReportTitle", " 报表标题 ");  
  try {
  JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportPath);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new DailySalesDataSource());//异常在这里
// System.out.println("whahwahn");
  JasperViewer jrview = new JasperViewer(jasperPrint, false);
  jrview.setPreferredSize(new Dimension(200, 100));
  jrview.setVisible(true);
  } catch (JRException e) {
  e.printStackTrace();
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
}
//异常相关的DailySalesDataSource类
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class DailySalesDataSource implements JRDataSource {

  public DailySalesDataSource() {
  }
   
  /**
  * 测试数据,实际项目中是动态获取,也不一定是数组,可以是其它的数据类型 .
  */
  private Object[][] data = {
  {" 货号 1", " 物品 1", 1, 1000},
  {" 货号 2", " 物品 2", 2, 2000},
  {" 货号 3", " 物品 3", 3, 3000},
  {" 货号 4", " 物品 4", 4, 4000},
  {" 货号 5", " 物品 5", 5, 5000},
  {" 货号 6", " 物品 6", 6, 6000},
  {" 货号 7", " 物品 7", 7, 7000},
  {" 货号 8", " 物品 8", 8, 8000},
  {" 货号 9", " 物品 9", 9, 9000},
  {" 货号 10", " 物品 10", 10, 10000}
  };
  private int index = -1;

  /**
  * 实现了 JRDataSource 中的方法.判断是否还有下一个.
  */
  @Override
  public boolean next() throws JRException {
  System.out.println("index:" + index);
  index++;
  return (index < data.length);
  }

  /**
  * 实现了 JRDataSource 中的方法.
  * @param field 是对应报表中的要填充的字段的名称.
  */
  @Override
  public Object getFieldValue(JRField field) throws JRException {
  Object value = null;
  String fieldName = field.getName();  
  if ("id".equals(fieldName)) {
  value = index + 1;  
  } else if ("productNo".equals(fieldName)) {
  value = data[index][0];  
  } else if ("productName".equals(fieldName)) {
  value = data[ index][1];