Java 表.getSelectedRow()上的nullpointer异常

Java 表.getSelectedRow()上的nullpointer异常,java,Java,我有甲级和乙级。 在A类中有一个构造函数: public A() { getSelectedRow(); } 此构造函数调用: public int getSelectedRow() { System.out.println("The row is : " + table.getSelectedRow()); return table.getSelectedRow(); } 到这里一切都很好! 然后类B调用方法getSelectedRow(),如下

我有甲级和乙级。 在A类中有一个构造函数:

public  A() {
        getSelectedRow();
    }
此构造函数调用:

public int getSelectedRow() {
    System.out.println("The row is : " + table.getSelectedRow());
    return table.getSelectedRow();

}
到这里一切都很好! 然后类B调用方法
getSelectedRow()
,如下所示:

        A results = new A();
        System.out.println("YEAH! IT'S: " + results.getSelectedRow());
我只想从类A中找出所选的表行。问题是我得到了一个空指针异常,我不知道为什么。如果我不调用该方法,一切正常

A类:

public class AllResultsFromDB extends JFrame {

    @SuppressWarnings("compatibility:9056676689615464658")
    private static final long serialVersionUID = 188850508334531506L;


    GUI ins = new GUI();
    JTable table;

    public AllResultsFromDB(GUI x) {
        final Vector columnNames = new Vector();
        final Vector data = new Vector();
        this.ins = x;


        try {


            /** Initializing GUI class
             * in order to call
             * getSelectedTable() method. **/

            Login sgui = new Login();


            String dburl = "jdbc:oracle:thin:@localhost:1521:ORCL";
            Connection connection = DriverManager.getConnection(dburl, sgui.getUsername(), sgui.getPassword());


            //  Fetch data from table specified by user

            String query = "SELECT * FROM " + ins.getSelectedTable() + " ORDER BY id";
            System.out.println(query);
            Statement stmt = connection.createStatement();
            ResultSet rset = stmt.executeQuery(query);
            ResultSetMetaData metad = rset.getMetaData();
            int columns = metad.getColumnCount();


            //  This loop gets the names of the columns

            for (int i = 1; i <= columns; i++) {
                columnNames.addElement(metad.getColumnName(i));
            }


            //  This loop gets the data inside the rows

            while (rset.next()) {
                final Vector row = new Vector(columns);


                for (int i = 1; i <= columns; i++) {
                    row.addElement(rset.getObject(i));

                }

                data.addElement(row);
            }

            rset.close();
            stmt.close();
            connection.close();


            //  Create table with results

            table = new JTable(data, columnNames) {

                    public boolean isCellEditable(int row, int col) {

                        return false;
                    }


                    public Class getColumnClass(int column) {

                        for (int row = 0; row < getRowCount(); row++) {
                            Object obj = getValueAt(row, column);
                            if (obj != null) {

                                return obj.getClass();

                            }
                        }

                        return Object.class;
                    }


                };


            JScrollPane scroll = new JScrollPane(table);
            getContentPane().add(scroll);


            JPanel panel = new JPanel();
            getContentPane().add(panel, BorderLayout.SOUTH);


            table.addMouseListener(new MouseListener() {

                public void mousePressed(MouseEvent e) {

                    //System.out.println(table.getSelectedRow());

                }

                public void mouseReleased(MouseEvent e) {
                    //System.out.println(table.getSelectedRow());

                }

                public void mouseEntered(MouseEvent e) {
                    //System.out.println(table.getSelectedRow());

                }

                public void mouseExited(MouseEvent e) {
                    //System.out.println(table.getSelectedRow());
                }

                public void mouseClicked(MouseEvent e) {

                    getSelectedRow();
                    if (e.getClickCount() == 2) {


                        //System.out.println(table.getSelectedRow());

                        Profile profile = new Profile();

                        try {

                            profile.getData();
                            //wait(500000);
                            profile.getImage();

                        } catch (Exception f) {
                        }
                        profile.setVisible(true);
                    }

                }
            });


        } catch (SQLException e) {
        }

    }

   public  AllResultsFromDB(int x) {
        x = getSelectedRow();
        System.out.println(table.getSelectedRow());
    }


    public int getSelectedRow() {
        System.out.println("The row is : " + table.getSelectedRow());
        return table.getSelectedRow();

    }

}

在classB中,因为您正在创建一个新实例

A results = new A();
表.getSelectedRow()中的值也是新创建的,并将指向null

所以一定要做点什么

A结果=新A(selectedRow)

在A的构造函数中,将参数传递给函数

    getSelectedRow(selectedRow);

请注意:确保维护“table.selectedRow”的值

如果table是类A中的实例变量,则当您尝试在类A的构造函数中访问它时,它可能不会初始化。 从构造函数调用getSelectedRow也没有任何意义


尝试在构造函数中初始化表变量,而不是调用该方法,它应该在初始化后工作

这是因为没有初始化表对象。

尝试在构造函数中初始化table对象……这是一个很好的做法

是否初始化了
table
?是的,我初始化了。如果我放置一个自定义行,它可以正常工作。当我试图将行号从类A“拉”到类B时,问题开始了。@JunedAhsan results是类A到类B的实例化。您在哪里初始化了表?请发布更多的代码,以便能够正确理解上下文。如果没有问题,请添加整个代码
    getSelectedRow(selectedRow);