问题背景:在命令行中通过java命令运行程序加载db2数据库驱动正常,打包成jar包以后通过双击jar包执行不正常,双击按钮多次后就出现内存访问异常。
详细描述:运行环境:winxp, jdk1.4.2
目录清单:/java/src/xing.chap12.smp12_1.FirstSwing.java
/java/src/xing.chap12.smp12_1.FirstSwing.class
/java/bin/COM 为db2驱动程序。
在目录/java/bin下执行jar.exe cvfm Myjar.jar MANIFEST.MF ./ 打包成jar文件。 a. 双击Myjar.jar执行,点击'加载'按钮多次后出现内存引用错误,程序直接退出。
b. 通过java -jar Myjar.jar 执行,观察控制台输出.截取的部分内容如下:
C:\java\release\test>java -jar Myjar.jar
java.lang.NoClassDefFoundError: com/ibm/db2/jcc/SQLJPreparedStatement
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at COM.ibm.db2.jdbc.app.DB2Driver.SQLAllocEnv(Native Method)
at COM.ibm.db2.jdbc.app.DB2Driver.<init>(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2Driver.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at xing.chap12.smp12_1.TestDb2.<clinit>(Unknown Source)
c. 通过java xing.chap12.smp12_1.FirstSwing输出正常,db2驱动程序正常加载.
d. 如果改用jdk1.5.0运行上面生成的jar 文件,则会程序退出,生成hs_err_pid4216.log错误日志文件。
日志部分内容如下:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6c9759, pid=4248, tid=3860
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
# Problematic frame:
# V [jvm.dll+0x89759]
#
--------------- T H R E A D ---------------
Current thread (0x0084d030): JavaThread "AWT-EventQueue-0" [_thread_in_vm, id=3860]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000000
Registers:
EAX=0x00000000, EBX=0x00000000, ECX=0x0084a7d0, EDX=0x009b1ca8
ESP=0x037fee48, EBP=0x037fee78, ESI=0x0084d030, EDI=0x009b1ca0
EIP=0x6d6c9759, EFLAGS=0x00010202
Top of Stack: (sp=0x037fee48)
0x037fee48: 0084d0ec 0084d0ec 26cbe358 0084d0ec
0x037fee58: 0084d0ec 6d6806a4 6d64a9ab 0084d030
0x037fee68: 037fee98 6d6c5fe7 0084d030 009b1ca0
0x037fee78: 037fee98 03d2a647 0084d0ec 00000000
0x037fee88: 03d330c8 009b1ca4 0084d030 26cbe358
0x037fee98: 037feeb8 03d239b0 0084d0ec 00000000
0x037feea8: 00000000 00000000 0084d030 26cbe358
0x037feeb8: 037feee8 00ab826f 0084d0ec 037feefc
Instructions: (pc=0x6d6c9759)
0x6d6c9749: a9 00 00 00 39 5d 14 0f 84 a0 00 00 00 8b 45 0c
0x6d6c9759: ff 30 e8 2a 97 ff ff 59 50 56 8d 4d 08 e8 cf c6
Stack: [0x037c0000,0x03800000), sp=0x037fee48, free space=251k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x89759]
C [db2jdbc.dll+0xa647]
C [db2jdbc.dll+0x39b0]
j COM.ibm.db2.jdbc.app.DB2Driver.SQLAllocEnv([I)I+0
j COM.ibm.db2.jdbc.app.DB2Driver.<init>()V+678
j COM.ibm.db2.jdbc.app.DB2Driver.<clinit>()V+27
v ~StubRoutines::call_stub
V [jvm.dll+0x82696]
V [jvm.dll+0xd6fd9]
V [jvm.dll+0x82567]
V [jvm.dll+0x7576b]
V [jvm.dll+0x7467e]
V [jvm.dll+0x9fce0]
V [jvm.dll+0x98ff8]
C [java.dll+0x13d8]
j java.lang.Class.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;+0
j java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;+5
j xing.tools.sinotool.SjjhTool.<clinit>()V+3
v ~StubRoutines::call_stub
V [jvm.dll+0x82696]
V [jvm.dll+0xd6fd9]
V [jvm.dll+0x82567]
V [jvm.dll+0x7576b]
V [jvm.dll+0x7467e]
程序FirstSwing.java如下:package xing.chap12.smp12_1;import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
import java.io.*;class TestDb2{
static{
try{
System.out.println("Class1");
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
System.out.println("Class2");
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
}catch(Exception eReg){
eReg.printStackTrace();
System.out.println("Class_err");
}
}
private Connection conn = null;
private Statement stmt = null;
public int getCon(){
try{
conn = DriverManager.getConnection("jdbc:db2:zsk", "sino_zsk", "123456");
return 1;
}catch(Exception eConnect){
System.out.println("Connect database fail! Please check the param: " + eConnect.toString());
return 0;
}
}
}public class FirstSwing extends JFrame implements ActionListener {
private JLabel jLableWelcome ;
private JPanel jp = new JPanel();
private JButton jButtonSelectSqlFile = new JButton("加载");
public FirstSwing(){
//this.setLayout(null);
jLableWelcome = new JLabel();
jLableWelcome.setText("Swing编程");
jLableWelcome.setBounds(40,30,450,30);
jp.add(jLableWelcome);
jp.add(jButtonSelectSqlFile);
jButtonSelectSqlFile.addActionListener(this);
this.getContentPane().add(jp);
this.setTitle("第一个Swing程序");
this.setBounds(330,250,500,150);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
TestDb2 tdb2 = new TestDb2();
TestDb2 tdb2_2 = new TestDb2();
}
public static void main(String[] args) throws Exception{
new FirstSwing();
}
}望各位帮忙分析一下原因,谢谢!
详细描述:运行环境:winxp, jdk1.4.2
目录清单:/java/src/xing.chap12.smp12_1.FirstSwing.java
/java/src/xing.chap12.smp12_1.FirstSwing.class
/java/bin/COM 为db2驱动程序。
在目录/java/bin下执行jar.exe cvfm Myjar.jar MANIFEST.MF ./ 打包成jar文件。 a. 双击Myjar.jar执行,点击'加载'按钮多次后出现内存引用错误,程序直接退出。
b. 通过java -jar Myjar.jar 执行,观察控制台输出.截取的部分内容如下:
C:\java\release\test>java -jar Myjar.jar
java.lang.NoClassDefFoundError: com/ibm/db2/jcc/SQLJPreparedStatement
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at COM.ibm.db2.jdbc.app.DB2Driver.SQLAllocEnv(Native Method)
at COM.ibm.db2.jdbc.app.DB2Driver.<init>(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2Driver.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at xing.chap12.smp12_1.TestDb2.<clinit>(Unknown Source)
c. 通过java xing.chap12.smp12_1.FirstSwing输出正常,db2驱动程序正常加载.
d. 如果改用jdk1.5.0运行上面生成的jar 文件,则会程序退出,生成hs_err_pid4216.log错误日志文件。
日志部分内容如下:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6c9759, pid=4248, tid=3860
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
# Problematic frame:
# V [jvm.dll+0x89759]
#
--------------- T H R E A D ---------------
Current thread (0x0084d030): JavaThread "AWT-EventQueue-0" [_thread_in_vm, id=3860]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000000
Registers:
EAX=0x00000000, EBX=0x00000000, ECX=0x0084a7d0, EDX=0x009b1ca8
ESP=0x037fee48, EBP=0x037fee78, ESI=0x0084d030, EDI=0x009b1ca0
EIP=0x6d6c9759, EFLAGS=0x00010202
Top of Stack: (sp=0x037fee48)
0x037fee48: 0084d0ec 0084d0ec 26cbe358 0084d0ec
0x037fee58: 0084d0ec 6d6806a4 6d64a9ab 0084d030
0x037fee68: 037fee98 6d6c5fe7 0084d030 009b1ca0
0x037fee78: 037fee98 03d2a647 0084d0ec 00000000
0x037fee88: 03d330c8 009b1ca4 0084d030 26cbe358
0x037fee98: 037feeb8 03d239b0 0084d0ec 00000000
0x037feea8: 00000000 00000000 0084d030 26cbe358
0x037feeb8: 037feee8 00ab826f 0084d0ec 037feefc
Instructions: (pc=0x6d6c9759)
0x6d6c9749: a9 00 00 00 39 5d 14 0f 84 a0 00 00 00 8b 45 0c
0x6d6c9759: ff 30 e8 2a 97 ff ff 59 50 56 8d 4d 08 e8 cf c6
Stack: [0x037c0000,0x03800000), sp=0x037fee48, free space=251k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x89759]
C [db2jdbc.dll+0xa647]
C [db2jdbc.dll+0x39b0]
j COM.ibm.db2.jdbc.app.DB2Driver.SQLAllocEnv([I)I+0
j COM.ibm.db2.jdbc.app.DB2Driver.<init>()V+678
j COM.ibm.db2.jdbc.app.DB2Driver.<clinit>()V+27
v ~StubRoutines::call_stub
V [jvm.dll+0x82696]
V [jvm.dll+0xd6fd9]
V [jvm.dll+0x82567]
V [jvm.dll+0x7576b]
V [jvm.dll+0x7467e]
V [jvm.dll+0x9fce0]
V [jvm.dll+0x98ff8]
C [java.dll+0x13d8]
j java.lang.Class.forName0(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;+0
j java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;+5
j xing.tools.sinotool.SjjhTool.<clinit>()V+3
v ~StubRoutines::call_stub
V [jvm.dll+0x82696]
V [jvm.dll+0xd6fd9]
V [jvm.dll+0x82567]
V [jvm.dll+0x7576b]
V [jvm.dll+0x7467e]
程序FirstSwing.java如下:package xing.chap12.smp12_1;import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
import java.io.*;class TestDb2{
static{
try{
System.out.println("Class1");
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
System.out.println("Class2");
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
}catch(Exception eReg){
eReg.printStackTrace();
System.out.println("Class_err");
}
}
private Connection conn = null;
private Statement stmt = null;
public int getCon(){
try{
conn = DriverManager.getConnection("jdbc:db2:zsk", "sino_zsk", "123456");
return 1;
}catch(Exception eConnect){
System.out.println("Connect database fail! Please check the param: " + eConnect.toString());
return 0;
}
}
}public class FirstSwing extends JFrame implements ActionListener {
private JLabel jLableWelcome ;
private JPanel jp = new JPanel();
private JButton jButtonSelectSqlFile = new JButton("加载");
public FirstSwing(){
//this.setLayout(null);
jLableWelcome = new JLabel();
jLableWelcome.setText("Swing编程");
jLableWelcome.setBounds(40,30,450,30);
jp.add(jLableWelcome);
jp.add(jButtonSelectSqlFile);
jButtonSelectSqlFile.addActionListener(this);
this.getContentPane().add(jp);
this.setTitle("第一个Swing程序");
this.setBounds(330,250,500,150);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
TestDb2 tdb2 = new TestDb2();
TestDb2 tdb2_2 = new TestDb2();
}
public static void main(String[] args) throws Exception{
new FirstSwing();
}
}望各位帮忙分析一下原因,谢谢!
楼主【xing_1306】截止到2008-07-22 17:22:10的历史汇总数据(不包括此帖):
发帖的总数量:0 发帖的总分数:0 每贴平均分数:0
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html