Java 表.getSelectedRow()上的nullpointer异常
我有甲级和乙级。 在A类中有一个构造函数: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(),如下
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);