Java 当我点击Run按钮时,我的JFrame不会出现,尽管NetBeans说它正在运行
我用NetBeans创建了一个简单的表单。一切都很好,但当我为JTabel添加一些代码时,当我点击run时,它不会显示任何内容。 这是我的代码:Java 当我点击Run按钮时,我的JFrame不会出现,尽管NetBeans说它正在运行,java,sql,Java,Sql,我用NetBeans创建了一个简单的表单。一切都很好,但当我为JTabel添加一些代码时,当我点击run时,它不会显示任何内容。 这是我的代码: public final class QuanLy extends javax.swing.JFrame { public QuanLy() { initComponents(); show(); } public ArrayList<Subject> subjectList(){
public final class QuanLy extends javax.swing.JFrame {
public QuanLy() {
initComponents();
show();
}
public ArrayList<Subject> subjectList(){
ArrayList<Subject> subjectsList = new ArrayList<>();
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://localhost;databaseName=QLLTCK;integratedSecurity=true;";
Connection connection = DriverManager.getConnection(url);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM PHANCONG");
while(resultSet.next()){
Subject subject = new Subject(resultSet.getString("maLop"), resultSet.getString("tenMH"),
resultSet.getString("ngayThi"), resultSet.getInt("caThi"), resultSet.getString("phongThi"),
resultSet.getInt("soSV"), resultSet.getInt("soCBCT"), resultSet.getString("xepLoai"));
subjectsList.add(subject);
}
}
catch(Exception sqlex){
sqlex.printStackTrace();
}
return subjectsList;
}
@Override
public void show(){
ArrayList<Subject> list = subjectList();
DefaultTableModel model = (DefaultTableModel)table.getModel();
Object[] row = new Object[8];
for(int i = 0; i < list.size(); i++){
row[0] = list.get(i).getMaLop();
row[1] = list.get(i).getTenMH();
row[2] = list.get(i).getNgayThi();
row[3] = list.get(i).getCaThi();
row[4] = list.get(i).getPhongThi();
row[5] = list.get(i).getSoSV();
row[6] = list.get(i).getSoCBCT();
row[7] = list.get(i).getXepLoai();
model.addRow(row);
}
}
//... (those lines are created by NetBeans)
}
当我对show、public ArrayList subjectList和public void show进行注释时,我的表单会正常显示
这是图像。跑步但不显示。
这是一个没有代码的项目。
有人能帮我吗?谢谢
对不起,我的英语不好。您正在重写show函数,但没有实现显示逻辑或调用super show。最简单的方法是在show函数的末尾调用super.show您正在覆盖show函数,但没有实现显示逻辑或调用super show。最简单的方法是在show函数的末尾调用super.show首先,show方法已被弃用。您应该改用setVisibletrue 其次,在构造函数中执行可重写的方法调用不是一个好做法,因为这可能会导致不希望出现的bug。构造函数不应直接或间接调用可重写方法,因为超类构造函数在子类构造函数之前运行,因此子类中的重写方法将在子类构造函数运行之前调用。如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将不会按预期的方式运行 例如,您可以将show方法重命名为initTable,并在创建表单之后调用它。例如,如果您在main方法中创建,您可以执行以下操作:
public static void main(String[] args) {
QuanLy frame = new QuanLy();
// ... other initialization stuff ...
frame.setVisible(true);
frame.initTable(); // the initTable is you show() method renamed
// ... rest of your code ...
}
首先,show方法已被弃用。您应该改用setVisibletrue
其次,在构造函数中执行可重写的方法调用不是一个好做法,因为这可能会导致不希望出现的bug。构造函数不应直接或间接调用可重写方法,因为超类构造函数在子类构造函数之前运行,因此子类中的重写方法将在子类构造函数运行之前调用。如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将不会按预期的方式运行
例如,您可以将show方法重命名为initTable,并在创建表单之后调用它。例如,如果您在main方法中创建,您可以执行以下操作:
public static void main(String[] args) {
QuanLy frame = new QuanLy();
// ... other initialization stuff ...
frame.setVisible(true);
frame.initTable(); // the initTable is you show() method renamed
// ... rest of your code ...
}
建议这样做 SwingUtilities.invokeLater->{ frame.pack; frame.setVisibletrue; }; lambda还可以替换为可运行对象,并覆盖其run方法
不要使用.show方法,因为它已被弃用 建议这样做 SwingUtilities.invokeLater->{ frame.pack; frame.setVisibletrue; }; lambda还可以替换为可运行对象,并覆盖其run方法
不要使用.show方法,因为它已被弃用 多谢各位。我刚刚将show方法重命名为show_Table方法,它工作得非常好。谢谢。我只是将show方法重命名为show_Table方法,它工作得非常好。