我用JTable显示数据,需要修改/添加的时候,直接在JTable的单元格输入数据。输入英文可以操作成功,但是一输入中文就报空指针异常NullPointerException,请问怎么解决这个问题?

解决方案 »

  1.   

    /**
     * 
     */
    package com.stock.gui;import java.awt.Color;
    import java.awt.Font;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.SQLException;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;import com.stock.dto.P_managerDTO;
    import com.stock.model.Database;/**
     * @author Antti King
     * 
     */
    class AddStock extends JFrame implements ActionListener { /**
     * 添加股票窗口
     */ private JPanel pAddStock;
    private JLabel lAddStock;
    private JButton bAddStock;
    private JTable tAddStock;
    private JScrollPane jScrollPane_addStock; public AddStock() {
    // TODO Auto-generated constructor stub // 添加股票面板
    lAddStock = new JLabel("在下表输入股票信息");
    lAddStock.setFont(new Font(null, Font.BOLD, 18));
    bAddStock = new JButton("添  加");
    bAddStock.addActionListener(this); tAddStock = new JTable(new DefaultTableModel(new String[] { "股票名称",
    "股票代码", "发行公司", "单股价格", "上市时间", "发行总数" }, 1));
    jScrollPane_addStock = new JScrollPane();
    tAddStock.setBackground(Color.BLACK);
    tAddStock.setForeground(Color.YELLOW);
    tAddStock.setGridColor(Color.RED);
    jScrollPane_addStock.getViewport().add(tAddStock); pAddStock = new JPanel();
    pAddStock.add(lAddStock);
    pAddStock.add(jScrollPane_addStock);
    pAddStock.add(bAddStock); // 设置面板布局 pAddStock.setLayout(null);
    lAddStock.setBounds(200, 20, 180, 40);
    jScrollPane_addStock.setBounds(20, 100, 560, 100);
    bAddStock.setBounds(260, 240, 80, 30); this.add(pAddStock);
    this.setTitle("添加股票");
    this.setSize(600, 360);
    int x = ((Toolkit.getDefaultToolkit().getScreenSize().width - this
    .getSize().width) / 2);
    int y = ((Toolkit.getDefaultToolkit().getScreenSize().height - this
    .getSize().height) / 2);
    this.setLocation(x, y);
    this.setResizable(false);
    this.setVisible(true);
    } /**
     * @param args
     */ public void actionPerformed(ActionEvent ae) {
    // TODO Auto-generated method stub
    if (ae.getSource() == bAddStock) { /*
     * byte[] stocknameByte; String stockname = ""; byte[] stockidByte;
     * String stockid = ""; byte[] companyByte; String company = "";
     * byte[] singlepriceByte; String singleprice = ""; byte[]
     * ontimeByte; String ontime = ""; byte[] allcountByte; String
     * allcount = "";
     * 
     * try { stocknameByte = (((String)tAddStock.getValueAt(0,
     * 0)).getBytes("gb2312")); stockname = stocknameByte.toString();
     * stockidByte = (((String)tAddStock.getValueAt(0,
     * 1)).getBytes("gb2312")); stockid = stockidByte.toString();
     * companyByte = (((String)tAddStock.getValueAt(0,
     * 2)).getBytes("gb2312")); company = companyByte.toString();
     * singlepriceByte = (((String)tAddStock.getValueAt(0,
     * 3)).getBytes("gb2312")); singleprice =
     * singlepriceByte.toString(); ontimeByte =
     * (((String)tAddStock.getValueAt(0, 4)).getBytes("gb2312")); ontime =
     * ontimeByte.toString(); allcountByte =
     * (((String)tAddStock.getValueAt(0, 5)).getBytes("gb2312"));
     * allcount = allcountByte.toString(); } catch
     * (UnsupportedEncodingException e1) { 
     *  e1.printStackTrace(); }
     */

    String stockname = (String) tAddStock.getValueAt(0, 0);
    String stockid = (String) tAddStock.getValueAt(0, 1);
    String company = (String) tAddStock.getValueAt(0, 2);
    String singleprice = (String) tAddStock.getValueAt(0, 3);
    String ontime = (String) tAddStock.getValueAt(0, 4);
    String allcount = (String) tAddStock.getValueAt(0, 5); if (stockname == null || stockname.equals("") || stockid == null
    || stockid.equals("") || company == null
    || company.equals("") || singleprice == null
    || singleprice.equals("") || ontime == null
    || ontime.equals("") || allcount == null
    || allcount.equals("")) { JOptionPane.showMessageDialog(null, "表中各项值不能为空!"); } else {
    P_managerDTO mdto = new P_managerDTO();
    mdto.setStockName(stockname);
    mdto.setStockId(stockid);
    mdto.setCompany(company);
    mdto.setSinglePrice(Float.parseFloat(singleprice));
    mdto.setOnTime(ontime);
    mdto.setAllCount(Integer.parseInt(allcount));
    try {
    String str = new Database().addstock(mdto);
    JOptionPane.showMessageDialog(null, str);
    } catch (SQLException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
    注意绿色被注释掉部分是换了另外一种方法,还是没通过。 现在吧JDK改成1.6,可以正常运行了。不知道各位有没有更好的方法,在不改JDK版本的情况下,解决这个问题!