我是一个 Java 方面的新手,母语为西班牙语,因此我会尽力让您理解我的意思 : )。我编写了一个程序,用于管理 MySQL 数据库以存储客户、客户信息等,并生成(或试图生成)报告。我从 Eclipse 市场安装了 JasperReports(顺便说一下,使用的是 Eclipse Kepler)。遵循一些教程,我学会了通过参数创建报告。只有一个参数来识别一个客户,这不是问题。问题在于当我点击生成报告的按钮时,它包含以下代码:
JButton btnOk = new JButton("OK");
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String doc = jftxtDni.getText();
String sql;
boolean respuesta = false;
ConexionBaseDatos cc = new ConexionBaseDatos();
sql = "SELECT * FROM clientes WHERE DNI = '"+doc+"'";
rs = cc.Consultar(sql);
try
{
while (rs.next())
{
respuesta = true;
}
}
catch (SQLException e)
{
JOptionPane.showMessageDialog(null, "error sql: "+e.getMessage());
}
if (respuesta)
{
ConexionBaseDatos cd = new ConexionBaseDatos();
Connection cn = cd.Conectar();
JasperReport jr = null;
String archivo = "src/reportes/Tree.jasper";
try
{
HashMap<String, Object> parametro = new HashMap<String, Object>();
parametro.put("dni", doc);
jr = (JasperReport) JRLoader.loadObjectFromFile(archivo);
JasperPrint jp = JasperFillManager.fillReport(jr,parametro,cn);
JasperViewer jv = new JasperViewer(jp);
jv.setVisible(true);
jv.setTitle("Informe de cliente");
}
catch (JRException e)
{
JOptionPane.showMessageDialog(null, "error Jasper: "+e.getMessage());;
}
}
else
{
JOptionPane.showMessageDialog(null, "No existe el cliente en la base de datos, verifique.");
}
}
}
)
尽管变量具有西班牙名称,但它可以捕获用户输入的变量,连接到数据库,并通过“dni”检查此类用户的存在,如果存在,则生成报告,否则显示错误消息。当我第一次执行它时,出现了apache.commons.logging未找到的错误,我通过导入apache commons库解决了这个问题。但是之后,我遇到了我所称的这个主题的错误。我想:很简单,下载apache commons集合,导入jar文件...就这样!我以为…但绝不可能...我得到了:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.<init>(DefaultExtensionsRegistry.java:97)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:59)
at net.sf.jasperreports.extensions.ExtensionsEnvironment.createDefaultRegistry(ExtensionsEnvironment.java:82)
at net.sf.jasperreports.extensions.ExtensionsEnvironment.<clinit>(ExtensionsEnvironment.java:69)
at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83)
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:123)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:179)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:81)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)
at formularios.ImprimirCliente$2.actionPerformed(ImprimirCliente.java:143)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ReferenceMap
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 55 more
......所以我仔细检查了库,确认它存在,但出于某种原因,看起来Eclipse、Java或某种外星人找不到它... 无论如何,我在互联网上做了大量研究,并找到了这个错误,大多数情况下是通过导入commons collections解决的...不是我的情况。Eclipse Kepler,Java 7和Apache Commons 4.0。有什么模糊的想法吗?非常感谢您抽出时间阅读此内容,对我的英语表示歉意,并等待一些提示..:D