package exercise.swt;import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JTextField; import exercise.swt.dal.DBManager; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; //import java.text.ParsePosition; import java.text.ParsePosition; import java.text.SimpleDateFormat;public class OffComputerDialog extends JDialog implements ActionListener { private JComboBox cboMachineNum; private JTextField txtEndTime; private Date now; private SimpleDateFormat sdf; private String url; private Connection con; private Statement st; private ResultSet rs; private PreparedStatement pre; private String sql; // private int rowCount; /** * */ private static final long serialVersionUID = 1L; /** * Launch the application * * @param args */ // public static void main(String args[]) { // try { // OffComputerDialog dialog = new OffComputerDialog(); // dialog.addWindowListener(new WindowAdapter() { // public void windowClosing(WindowEvent e) { // System.exit(0); // } // }); // dialog.setVisible(true); // } catch (Exception e) { // e.printStackTrace(); // } // } /** * Create the dialog */ public OffComputerDialog() { super(); getContentPane().setLayout(null); setTitle("欢迎再次光临"); setBounds(100, 100, 500, 375); final JButton btnSure = new JButton(); btnSure.setFont(new Font("黑体", Font.BOLD, 22)); btnSure.addActionListener(this); btnSure.setText("确定"); btnSure.setBounds(98, 256, 89, 41); getContentPane().add(btnSure); final JButton btnReset = new JButton(); btnReset.setFont(new Font("黑体", Font.BOLD, 22)); btnReset.setText("重置"); btnReset.setBounds(265, 256, 89, 41); getContentPane().add(btnReset); final JLabel lblMachineNum = new JLabel(); lblMachineNum.setFont(new Font("黑体", Font.BOLD, 18)); lblMachineNum.setText("机 器 号:"); lblMachineNum.setBounds(98, 69, 125, 18); getContentPane().add(lblMachineNum); final JLabel lblEndTime = new JLabel(); lblEndTime.setFont(new Font("黑体", Font.BOLD, 18)); lblEndTime.setText("结束时间:"); lblEndTime.setBounds(98, 164, 125, 18); getContentPane().add(lblEndTime); now = new Date(); sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); txtEndTime = new JTextField(); txtEndTime.setText(sdf.format(now)); txtEndTime.setEditable(false); txtEndTime.setBounds(214, 161, 140, 25); getContentPane().add(txtEndTime); cboMachineNum = new JComboBox(); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { ce.printStackTrace(); } try { url = "jdbc:odbc:test1"; con = DriverManager.getConnection(url); st = con.createStatement(); rs = st.executeQuery("select ComNum from Computer where Status=1"); while (rs.next()) { cboMachineNum.addItem(rs.getInt(1)); } rs.close(); st.close(); con.close(); } catch (SQLException ce) { ce.printStackTrace(); } cboMachineNum.setBounds(214, 66, 140, 28); getContentPane().add(cboMachineNum); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("重置")) { txtEndTime.setText(null); } else { // “确定”按钮的响应 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { ce.printStackTrace(); } try { url = "jdbc:odbc:test1"; con = DriverManager.getConnection(url); /* * 更新下機時間 */ sql = "update Record set ComOffLine=? where ComNum=? and Fee is null"; pre = con.prepareStatement(sql); pre.setString(1, new String(txtEndTime.getText())); pre.setString(2, new String(cboMachineNum.getSelectedItem().toString())); int rowcount = pre.executeUpdate(); System.out.println(rowcount + "時間插入成功"); /* * 显示本次上網記錄信息中的卡号,上机时间 */ sql = "select CardNum,ComOnLine,ComOffLine from Record where ComNum =? and ComOffline=?"; pre = DBManager.getPreparedStatement(con, sql); pre.setInt(1, Integer.parseInt(cboMachineNum.getSelectedItem() .toString())); pre.setString(2, txtEndTime.getText()); rs = pre.executeQuery(); rs.next(); int cardN = rs.getInt(1); String comOnLine = rs.getString(2); String comOffline=rs.getString(3);
SimpleDateFormat format = new SimpleDateFormat(); Date cD=format.parse(comOnLine,new ParsePosition(0)); Date coD=format.parse(comOffline,new ParsePosition(0)); long mL=cD.getTime(); long mL2=coD.getTime(); // Date date2 = format.parse(txtEndTime.getText()); long time = (((mL2 - mL) / 1000) / 60) / 60; int fee = (int) (time * 2);
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import exercise.swt.dal.DBManager;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//import java.text.ParsePosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;public class OffComputerDialog extends JDialog implements ActionListener { private JComboBox cboMachineNum; private JTextField txtEndTime; private Date now; private SimpleDateFormat sdf; private String url; private Connection con; private Statement st; private ResultSet rs; private PreparedStatement pre; private String sql; // private int rowCount;
/**
*
*/
private static final long serialVersionUID = 1L; /**
* Launch the application
*
* @param args
*/
// public static void main(String args[]) {
// try {
// OffComputerDialog dialog = new OffComputerDialog();
// dialog.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// System.exit(0);
// }
// });
// dialog.setVisible(true);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
/**
* Create the dialog
*/
public OffComputerDialog() {
super();
getContentPane().setLayout(null);
setTitle("欢迎再次光临");
setBounds(100, 100, 500, 375); final JButton btnSure = new JButton();
btnSure.setFont(new Font("黑体", Font.BOLD, 22));
btnSure.addActionListener(this);
btnSure.setText("确定");
btnSure.setBounds(98, 256, 89, 41);
getContentPane().add(btnSure); final JButton btnReset = new JButton();
btnReset.setFont(new Font("黑体", Font.BOLD, 22));
btnReset.setText("重置");
btnReset.setBounds(265, 256, 89, 41);
getContentPane().add(btnReset); final JLabel lblMachineNum = new JLabel();
lblMachineNum.setFont(new Font("黑体", Font.BOLD, 18));
lblMachineNum.setText("机 器 号:");
lblMachineNum.setBounds(98, 69, 125, 18);
getContentPane().add(lblMachineNum); final JLabel lblEndTime = new JLabel();
lblEndTime.setFont(new Font("黑体", Font.BOLD, 18));
lblEndTime.setText("结束时间:");
lblEndTime.setBounds(98, 164, 125, 18);
getContentPane().add(lblEndTime); now = new Date();
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
txtEndTime = new JTextField();
txtEndTime.setText(sdf.format(now));
txtEndTime.setEditable(false);
txtEndTime.setBounds(214, 161, 140, 25);
getContentPane().add(txtEndTime); cboMachineNum = new JComboBox();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException ce) {
ce.printStackTrace();
}
try {
url = "jdbc:odbc:test1";
con = DriverManager.getConnection(url);
st = con.createStatement();
rs = st.executeQuery("select ComNum from Computer where Status=1");
while (rs.next()) {
cboMachineNum.addItem(rs.getInt(1));
}
rs.close();
st.close();
con.close();
} catch (SQLException ce) {
ce.printStackTrace();
}
cboMachineNum.setBounds(214, 66, 140, 28);
getContentPane().add(cboMachineNum); } public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("重置")) {
txtEndTime.setText(null);
} else {
// “确定”按钮的响应
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException ce) {
ce.printStackTrace();
}
try {
url = "jdbc:odbc:test1";
con = DriverManager.getConnection(url); /*
* 更新下機時間
*/
sql = "update Record set ComOffLine=? where ComNum=? and Fee is null";
pre = con.prepareStatement(sql);
pre.setString(1, new String(txtEndTime.getText()));
pre.setString(2, new String(cboMachineNum.getSelectedItem().toString()));
int rowcount = pre.executeUpdate();
System.out.println(rowcount + "時間插入成功"); /*
* 显示本次上網記錄信息中的卡号,上机时间
*/
sql = "select CardNum,ComOnLine,ComOffLine from Record where ComNum =? and ComOffline=?";
pre = DBManager.getPreparedStatement(con, sql);
pre.setInt(1, Integer.parseInt(cboMachineNum.getSelectedItem()
.toString()));
pre.setString(2, txtEndTime.getText());
rs = pre.executeQuery();
rs.next();
int cardN = rs.getInt(1);
String comOnLine = rs.getString(2);
String comOffline=rs.getString(3);
SimpleDateFormat format = new SimpleDateFormat();
Date cD=format.parse(comOnLine,new ParsePosition(0));
Date coD=format.parse(comOffline,new ParsePosition(0));
long mL=cD.getTime();
long mL2=coD.getTime();
// Date date2 = format.parse(txtEndTime.getText());
long time = (((mL2 - mL) / 1000) / 60) / 60;
int fee = (int) (time * 2);
System.out.println("本次上机费用为:"+fee); /*
* 将本次上机费用插入到表中
*/
// Date xDate=format.parse(txtEndTime.getText());
sql = "update Record set fee=? where ComNum =?and ComOffline=?";
pre = con.prepareStatement(sql);
pre.setInt(1, fee);
pre.setInt(2, Integer.parseInt(cboMachineNum.getSelectedItem().toString()));
pre.setString(3, txtEndTime.getText());
rowcount = pre.executeUpdate();
System.out.println("fee插入成功");
/*
* 查询余额
*/
sql = "select CardBalance from Card where ComNum =?";
pre = DBManager.getPreparedStatement(con, sql);
pre.setInt(1, Integer.parseInt(cboMachineNum.getSelectedItem().toString()));
rs = pre.executeQuery(sql);
rs.next();
int banlance=rs.getInt(1)-fee;
rs.close();
pre.close();
st.close();
con.close();
//跳转到EndIfoPanel页面
try {
BarFee window = new BarFee(new EndIfoPanel(cboMachineNum.getSelectedItem().toString(),cardN,txtEndTime.getText(),txtEndTime.getText(),fee,banlance));
window.setvisible();
} catch (Exception ex) {
ex.printStackTrace();
}
this.setVisible(false);
} catch (Exception ce) {
ce.printStackTrace();
}
}
}
}
运行的时候在这个地方出错了long mL=cD.getTime();
良好的编程习惯是,在使用对象前,判断其是否为空。
Date cD=format.parse(comOnLine,new ParsePosition(0));
显然是comOnLine的值有问题,导致cD为空,所以在cD.getTime();时抛错。