问题描述
我目前正在尝试使用 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);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)