jar 工作正常,但 exe 显示异常

问题描述

我目前正在尝试使用 launch4j 制作 exe 以使用 jasper 生成报告。当我运行可运行的 jar 时,它完美地显示出来。但是当我运行 exe 文件时,总是会出现与 jar 依赖项相关的异常。我在通过launch4j创建exe时显示了jre文件夹。尽管如此,我还是将以下 jars 文件添加到我的构建路径中,

  • jasperreports-5.6.0.jar
  • commons-logging-1.1.jar
  • commons-beanutils-1.8.2.jar
  • commons.digester-2.1.jar
  • commons-collections-3.2.1.jar
  • groovy-all-2.0.1.jar
  • jdt-compiler-3.1.1.jar
  • jfreechart-1.0.12.jar
  • jcommon-1.0.15.jar
  • iText-2.1.7.js2.jar

该程序生成了与集合相关的未找到类异常。我的主要目标是通过使用 jrxml 文件生成报告。我正在使用 iReport 5.6.0 生成 jrxml 文件。任何帮助表示赞赏。错误堆栈跟踪如下;

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JRDataSource
at shg.da.com.MainFrame.<init>(MainFrame.java:63)
at shg.da.com.MainFrame$1.run(MainFrame.java:41)
at java.awt.event.InvocationEvent.dispatch(UnkNown Source)
at java.awt.EventQueue.dispatchEventImpl(UnkNown Source)
at java.awt.EventQueue.access$500(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$JavaSecurityAccessImpl.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: net.sf.jasperreports.engine.JRDataSource
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)
... 16 more

我的编码如下:

package shg.da.com;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.swing.JRViewer;

public class MainFrame extends JFrame {

    private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokelater(new Runnable() {
        public void run() {
            try {
                MainFrame frame = new MainFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printstacktrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public MainFrame() {
    setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100,100,450,300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5,5,5));
    contentPane.setLayout(new BorderLayout(0,0));
    setContentPane(contentPane);
    
    JButton vouPrintButton = new JButton("Print");
    
    vouPrintButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {             
            
            try {
                List<Map<String,?>> datasource = new ArrayList<Map<String,?>>();
                
                Map<String,Object> m;
                
                    m = new HashMap<String,Object>();
                    m.put("zorg",880022);
                    m.put("xvoucher","JV--005282/2017");
                    m.put("xdate","2021-07-03");
                    datasource.add(m);

                JRDataSource jrDataSource = new JRBeanCollectionDataSource(datasource);
                String sourceName = "glv.jrxml";
                JasperReport report = JasperCompileManager.compileReport(sourceName);
                JasperPrint filledReport =  JasperFillManager.fillReport(report,null,jrDataSource) ;
                JFrame rptFrame = new JFrame(); 
                
                rptFrame.getContentPane().add(new JRViewer(filledReport));
                rptFrame.pack();
                rptFrame.setVisible(true);
            }catch(Exception e) {
                e.printstacktrace();
            }
        }
    });
    contentPane.add(vouPrintButton);
}

}

running the jar from command prompt

running the exe from command prompt

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)