java.lang.NoClassDefFoundError:org / apache / commons / collections / ReferenceMap

时间:2014-04-03 19:44:06

标签: java eclipse classnotfoundexception

真正的新手java,西班牙语,所以,生病尽力让你理解我:)。我制作了一个程序,管理一个mysql数据库,用于存储客户,客户信息等。并生成(或尝试...)报告。我从Eclipse Market安装了JasperReports(BTW,使用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集合,进口的罐子......就是这样!我想......但是没办法......我明白了:

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

... sooooo ...我仔细检查了库是否正确,它在那里,但由于某种原因,它看起来像eclipse或java,或某种外星人,没有找到它..无论如何,我做了研究在整个互联网上,发现这个错误,主要通过导入公共收集来解决...不是我的情况。 Eclipse kepler,java 7和apache commons 4.0。任何模糊的想法..?非常感谢您花时间阅读它,对不起我的英语并等待一些亮点..:D

3 个答案:

答案 0 :(得分:5)

嗯,问题解决了!我只是不得不将集合降级到3.2.1,这很有效..部分,因为我一直有其他类的错误(joda-time,commons-digester和javax-servlet)。在某些情况下,下载最新版本不起作用,只需下载前一个版本。所以,之后我的报告完美无瑕。非常感谢您的帮助!! :)

答案 1 :(得分:0)

更好的技巧是获取缺少的类。这里缺少的类是interface IProps { myVar: boolean; setMyVar?: (value: boolean | (prevVar: boolean) => boolean) => void; }

然后用Google搜索 jar 文件,并下载最新的稳定版,然后检查jar文件是否包含缺少的类。找到正确的jar文件后,将其添加到项目中。

答案 2 :(得分:-1)

我为共同收集下载了一个不同的.jar文件,它解决了这个问题。 您可以在此处下载:http://www.java2s.com/Code/Jar/o/Downloadorgapachecommonscollectionsjar.htm