MainFrame/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jas.report.reclaimer;import java.awt.Container;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;/**
 *
 * @author Steven
 */
public final class MainFrame extends JFrame {    private int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
    private int frameWidth = 600;
    private int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
    private int frameHeight = 400;
    private static MainFrame mf;
    public JPanel panelDataBase;
    public JPanel panelCorpList;    public static synchronized MainFrame getInstance() {
        if (mf == null) {
            mf = new MainFrame();
        }
        return mf;
    }    private MainFrame() {
        Container c = this.getContentPane();
        c.setLayout(null);
        panelDataBase = this.getPanelDataBase();
        panelDataBase.setBounds((frameWidth - panelDataBase.getWidth()) / 2, (frameHeight - panelDataBase.getHeight()) / 2, panelDataBase.getWidth(), panelDataBase.getHeight());
        panelCorpList = this.getPanelCorpList();
        panelCorpList.setBounds((frameWidth - panelCorpList.getWidth()) / 2, (frameHeight - panelCorpList.getHeight()) / 2, panelCorpList.getWidth(), panelCorpList.getHeight());
        c.add(panelDataBase);
        c.add(panelCorpList);        this.setTitle("报表系统文件清理程序");
        this.setSize(frameWidth, frameHeight);
        this.setLocation((screenWidth - this.getSize().width) / 2, (screenHeight - this.getSize().height) / 2);
        this.setResizable(false);
        this.setVisible(true);        this.addWindowListener(
                new WindowAdapter() {                    @Override
                    public void windowClosing(WindowEvent e) {
                        //OracleDBConn.closedb();
                        System.exit(0);
                    }
                });
    }
    JComboBox cmbDataBase = new JComboBox();
    JComboBox cmbIP = new JComboBox();
    JTextField txtPort = new JTextField();
    JComboBox cmbSid = new JComboBox();
    JTextField txtUserName = new JTextField();
    JPasswordField txtPwd = new JPasswordField();    private JPanel getPanelDataBase() {
        JPanel panel1 = new JPanel();
        panel1.setLayout(null);
        panel1.setSize(400, 300);        JLabel label1 = new JLabel("数据库类型 :");
        label1.setBounds(0, 0, 100, 20);
        label1.setHorizontalAlignment(SwingConstants.RIGHT);        JLabel label2 = new JLabel("IP :");
        label2.setBounds(0, 30, 100, 20);
        label2.setHorizontalAlignment(SwingConstants.RIGHT);        JLabel label3 = new JLabel("Port :");
        label3.setBounds(0, 60, 100, 20);
        label3.setHorizontalAlignment(SwingConstants.RIGHT);        JLabel label4 = new JLabel("SID :");
        label4.setBounds(0, 90, 100, 20);
        label4.setHorizontalAlignment(SwingConstants.RIGHT);        JLabel label5 = new JLabel("用户名 :");
        label5.setBounds(0, 120, 100, 20);
        label5.setHorizontalAlignment(SwingConstants.RIGHT);        JLabel label6 = new JLabel("密码 :");
        label6.setBounds(0, 150, 100, 20);
        label6.setHorizontalAlignment(SwingConstants.RIGHT);
        DefaultComboBoxModel comboBoxModel1 = new DefaultComboBoxModel();
        comboBoxModel1.addElement("Oracel");
        cmbDataBase.setModel(comboBoxModel1);
        cmbDataBase.setBounds(120, 0, 200, 20);        DefaultComboBoxModel comboBoxModel2 = new DefaultComboBoxModel();
        comboBoxModel2.addElement("22.117.79.27");
        comboBoxModel2.addElement("22.117.79.11");
        cmbIP.setEditable(true);
        cmbIP.setModel(comboBoxModel2);
        cmbIP.setBounds(120, 30, 200, 20);        txtPort.setText("1521");
        txtPort.setBounds(120, 60, 200, 20);        DefaultComboBoxModel comboBoxModel3 = new DefaultComboBoxModel();
        comboBoxModel3.addElement("jasdb");
        comboBoxModel3.addElement("pubdb");
        comboBoxModel3.addElement("testdb");
        cmbSid.setEditable(true);
        cmbSid.setModel(comboBoxModel3);
        cmbSid.setBounds(120, 90, 200, 20);        txtUserName.setText("jas");
        txtUserName.setBounds(120, 120, 200, 20);        txtPwd.setText("a123456");
        txtPwd.setEchoChar('*');
        txtPwd.setBounds(120, 150, 200, 20);        JButton button = new JButton("下一步");
        button.setBounds(160, 250, 80, 20);
        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent ae) {
                cmbIP.setSelectedItem(cmbIP.getSelectedItem().toString().trim());
                txtPort.setText(txtPort.getText().trim());
                cmbSid.setSelectedItem(cmbSid.getSelectedItem().toString().trim());
                txtUserName.setText(txtUserName.getText().trim());
                if (cmbIP.getSelectedItem().toString().length() == 0) {
                    JOptionPane.showMessageDialog(panelDataBase, "请输入IP地址", "Error Message", JOptionPane.WARNING_MESSAGE);
                } else if (txtPort.getText().length() == 0) {
                    JOptionPane.showMessageDialog(panelDataBase, "请输入端口", "Error Message", JOptionPane.WARNING_MESSAGE);
                } else if (cmbSid.getSelectedItem().toString().length() == 0) {
                    JOptionPane.showMessageDialog(panelDataBase, "请输入SID", "Error Message", JOptionPane.WARNING_MESSAGE);
                } else if (txtUserName.getText().length() == 0) {
                    JOptionPane.showMessageDialog(panelDataBase, "请输入用户名", "Error Message", JOptionPane.WARNING_MESSAGE);
                } else if (txtPwd.getPassword().length == 0) {
                    JOptionPane.showMessageDialog(panelDataBase, "请输入密码", "Error Message", JOptionPane.WARNING_MESSAGE);
                } else {
                    panelDataBase.setVisible(false);
                    panelCorpList.setVisible(true);
                    Thread t1 = new Thread(new CorpReportList());
                    t1.start();
                }
            }
        });
        panel1.add(label1);
        panel1.add(label2);
        panel1.add(label3);
        panel1.add(label4);
        panel1.add(label5);
        panel1.add(label6);
        panel1.add(cmbDataBase);
        panel1.add(cmbIP);
        panel1.add(txtPort);
        panel1.add(cmbSid);
        panel1.add(txtUserName);
        panel1.add(txtPwd);
        panel1.add(button);        return panel1;
    }
    public JLabel lblCorpList;
    public JTable jTable;
    public JButton btnSelectCorp;    private JPanel getPanelCorpList() {
        JPanel panel1 = new JPanel();
        panel1.setLayout(null);
        panel1.setSize(550, 390);        lblCorpList = new JLabel("正在读取数据,请稍候......");
        lblCorpList.setBounds(0, 0, 300, 20);        jTable = new JTable();
        TableColumn col1 = new TableColumn();
        col1.setHeaderValue("公司名称");
        col1.setWidth(400);
        TableColumn col2 = new TableColumn();
        col2.setHeaderValue("成功");
        col2.setWidth(50);
        TableColumn col3 = new TableColumn();
        col3.setHeaderValue("失败");
        col3.setWidth(50);
        TableColumn col4 = new TableColumn();
        col4.setHeaderValue("总计");
        col4.setWidth(50);
        jTable.addColumn(col1);
        jTable.addColumn(col2);
        jTable.addColumn(col3);
        jTable.addColumn(col4);
        JScrollPane scrollPane = new JScrollPane(jTable);
        scrollPane.setBounds(0, 25, 550, 300);        btnSelectCorp = new JButton("下一步");
        btnSelectCorp.setBounds(470, 330, 80, 20);
        btnSelectCorp.setEnabled(false);        panel1.add(lblCorpList);
        panel1.add(scrollPane);
        panel1.add(btnSelectCorp);
        panel1.setVisible(false);
        return panel1;
    }
}

解决方案 »

  1.   

    CorpReportList/*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package jas.report.reclaimer;import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;
    import javax.swing.table.DefaultTableModel;/**
     *
     * @author Steven
     */
    public class CorpReportList implements Runnable {    public void run() {
            try {
                Thread.sleep(5000);
                DefaultTableModel tableModel = (DefaultTableModel) MainFrame.getInstance().jTable.getModel();
                tableModel.insertRow(0, new String[]{"aa"});
                MainFrame.getInstance().lblCorpList.setText("以下是有报表的公司列表:");
                MainFrame.getInstance().btnSelectCorp.setEnabled(true);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(MainFrame.getInstance().panelCorpList, "程序遇到不可预知的错误", "Error Message", JOptionPane.ERROR_MESSAGE);
                System.out.println(e);
            }
        }
    }
    对jtable设值就出现:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
            at java.util.Vector.elementAt(Vector.java:427)
            at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:633)
            at javax.swing.JTable.getValueAt(JTable.java:2639)
            at javax.swing.JTable.prepareRenderer(JTable.java:5653)
            at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
            at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
            at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
            at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
            at javax.swing.JComponent.paintComponent(JComponent.java:763)
            at javax.swing.JComponent.paint(JComponent.java:1027)
            at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
            at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
            at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
            at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
            at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
            at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
            at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
            at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
            at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
            at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    求解答???
      

  2.   

    你构造的JTable是一个4列的表,所以插入的时候应该这样:DefaultTableModel tableModel = (DefaultTableModel) MainFrame.getInstance().jTable.getModel();
    tableModel.insertRow(0, new String[]{"a1","a2","a3","a4"});
      

  3.   

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
      

  4.   

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 >= 5
    是什么意思?
      

  5.   

    给后来者:的确是4楼所说的,将Jtable中写死了,后来的数据如果缺少,比如只有3行,但Jtable在初次设置model时有4行,则会报这个异常。解决方法:就是在放入不足4行的新数据时,给Jtable从新new Jtable(),再给model就可以解决。记得在把新的table放到panel或者需要的地方上。不见得最好,但可以解决。