遇到一个很诡异的问题。这几天突然来了兴趣,写了个身份证号码验证的小程序。在Eclipse下的Run as运行正常(能够成功连接数据库和显示程序图标)。可是导出成.jar可执行文件后,运行却不正常了(不能连接到数据库和显示程序图标)。请大家帮忙看看,谢谢了~(应该是项目的相对路径的问题。我把生成的.jar放到IdCardValidation\下就又正常了,但我jar里已经有包含相关的资源文件了,搞的郁闷了~)PS:程序用到了一个access的mdb数据文件和一个程序图标文件。项目的结构如下:IdCardValidation
    src
       edu.mdqy195905(包)
           IdCardValidation.java(主类)
           UtilConfig.java(数据库工具类,用于获取数据库配置信息)
           UtilConnection.java(数据库连接类)
           DB.properties(数据库配置信息,这里写了数据库连接字符串等相关信息)  
    DB
       information.mdb(身份证地区代码)
    image
       Ninja.JPG(图标文件)我已经把该项目打包上传到下面的链接里了,压缩包里含有一个.jar可执行文件(机器上有JRE双击可以执行)和项目文件。请大家指正,谢谢~传了老半天没传上去。,汗,还是这里贴下代码吧,别取笑我了>_<.DB.propertites内容conn_type=
conn_url=jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=DB\\information.mdb
conn_user=
conn_pwd=
conn_driver=sun.jdbc.odbc.JdbcOdbcDriverUtilConfig.java内容package edu.mdqy195905;
import java.io.IOException;
import java.util.Properties;public class UtilConfig { private static Properties prop=new Properties();
static
{
try
{
prop.load(UtilConfig.class.getResourceAsStream("DB.properties"));
}
catch(IOException e)
{
e.printStackTrace();
}
}
public static String CONNECTION_TYPE=prop.getProperty("conn_type");
public static String CONNECTION_URL=prop.getProperty("conn_url");
public static String CONNECTION_USER=prop.getProperty("conn_user");
public static String CONNECTION_PWD=prop.getProperty("conn_pwd");
public static String CONNECTION_DRIVER=prop.getProperty("conn_driver");
}
UtilConnection.java内容package edu.mdqy195905;import java.sql.Connection;
import java.sql.DriverManager;public class UtilConnection { public static Connection getConnection()
{
Connection conn=null;
try
{
Class.forName(UtilConfig.CONNECTION_DRIVER);
conn=DriverManager.getConnection(UtilConfig.CONNECTION_URL,UtilConfig.CONNECTION_USER,UtilConfig.CONNECTION_PWD);
}
catch(Exception e)
{
e.printStackTrace();
}
if(conn==null)
{
System.out.println("no get connection! throws Exception");
}
return conn;
}
}
IdCardValidation.java内容package edu.mdqy195905;import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;@SuppressWarnings("serial")
public class IdCardValidation extends JFrame implements ActionListener{ private Connection con=null;
private JLabel label;
private JTextField idnumber;
private JButton search;
private int[] power={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
private int[] check={1,0,10,9,8,7,6,5,4,3,2};

public IdCardValidation()
{
init();
}

public void actionPerformed(ActionEvent e) {
verification();
}

private void init()
{
label=new JLabel("身份证号码:");
idnumber=new JTextField(12);
idnumber.setToolTipText("请在这里输入18位身份证号码");
search=new JButton("查询");
search.setToolTipText("点击查询");
search.addActionListener(this);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(label);
getContentPane().add(idnumber);
getContentPane().add(search);
setSize(325,75);
setResizable(false);
setTitle("身份证验证");
setIconImage(new ImageIcon("image\\Ninja.JPG").getImage());
setVisible(true);
}

private void verification()
{
if(idnumber.getText().trim().length()!=18)
{
JOptionPane.showMessageDialog(this, "请输入正确的身份证号!", "警告", JOptionPane.ERROR_MESSAGE);
idnumber.setText("");
idnumber.requestFocus();
return;
}
con=UtilConnection.getConnection();
Statement st=null;
ResultSet rs=null;
try {
st=con.createStatement();
rs=st.executeQuery("select DQ from idcard where BM="+idnumber.getText().substring(0,6));
if(rs.next())
{
if(checkCode(idnumber.getText()))
{
JOptionPane.showMessageDialog(this, "来自:\n"+rs.getString(1), "查询结果", JOptionPane.INFORMATION_MESSAGE);
idnumber.setText("");
idnumber.requestFocus();
}
else
{
JOptionPane.showMessageDialog(this, "无效的身份证号", "出错了", JOptionPane.INFORMATION_MESSAGE);
idnumber.requestFocus();
}
}
else
{
JOptionPane.showMessageDialog(this, "无效的身份证号", "出错了", JOptionPane.INFORMATION_MESSAGE);
idnumber.requestFocus();
}

} catch (SQLException e1) {
JOptionPane.showMessageDialog(this, "请输入正确的身份证号!", "警告", JOptionPane.ERROR_MESSAGE);
idnumber.setText("");
idnumber.requestFocus();
}
finally
{
rs=null;
st=null;
con=null;
}
}

private boolean checkCode(String idCardNumber)
{
int sum=0;
for(int i=0;i<idCardNumber.length()-1;i++)
sum+=(Integer.parseInt(idCardNumber.charAt(i)+"")*power[i]);
int remainder=sum%11;
if(Integer.parseInt(idCardNumber.charAt(idCardNumber.length()-1)+"")==check[remainder])
return true;
else
return false;
}

public static void main(String[] args) {
new IdCardValidation().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
先这样吧,待会我再把程序传上来