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];