Поэтому, когда я нажимаю кнопку («Открыть урок»), появляется JFrame из другого класса (с использованием .setVisible (true)). В этом JFrame есть JTable (tblOpenLesson) и две кнопки (btnOpenLesson и btnCancel).
Теперь я хочу, чтобы при нажатии кнопки «Открыть урок» выполнялись следующие действия: 1. Обновить таблица для отражения базы данных sqlite (урок) в JTable 2. Откройте выбранный файл из таблицы, получив имя файла (такое же, как в базе данных) и используя его для функции FileReader.
Однако, это дает мне ошибку:
Исключение в потоке "AWT-EventQueue-0" java .lang.ArrayIndexOutOfBoundsException: -1 в java .util.Vector.elementData ( Vector. java: 737) в java .util.Vector.elementAt (Vector. java: 480) в javax.swing.table.DefaultTableModel.getValueAt (DefaultTableModel. java: 648) в mainWindow.openLesson. .btnOpenLessonPopUpActionPerformed (openLesson. java: 135) в mainWindow.openLesson.access $ 000 (openLesson. java: 19) в mainWindow.openLesson $ 1.actionPerformed (openLesson. java: 60) в javaxsw.ing. .fireActionPerformed (AbstractButton. java: 2022) в javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton. java: 2348) в javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel. * 10) в 10:30 на * j30 swing.DefaultButtonModel.setPressed (DefaultButtonModel. java: 259) в javax.swing.plaf.basi c .BasicButtonListener.mouseReleased (BasicButtonListener. java: 252) в java .awt.Componentvent . java: 6539) на javax.swing.JComponent.processMouseEvent (JComponent. java: 3324) на java .awt.Component.processEvent (Component. java: 6304) на java .awt. Container.processEvent (Container. java: 2239) в java .awt.Component.dispatchEventImpl (Component. java: 4889) в java .awt.Container.dispatchEventImpl (Container. java: 2297) в java .awt.Component.dispatchEvent (Component. java: 4711) в java .awt.LightweightDispatcher.retargetMouseEvent (Container. java: 4904) в java .awt.LightweightDispatcher.processMouseEvent (Container java: 4535) на java .aw t.LightweightDispatcher.dispatchEvent (Container. java: 4476) в java .awt.Container.dispatchEventImpl (Container. java: 2283) в java .awt.Window.dispatchEventImpl (Window. java: 2746) в java .awt.Component.dispatchEvent (Component. java: 4711) в java .awt.EventQueue.dispatchEventImpl (EventQueue. java: 760) в java .awt.EventQueue.access $ 500 (EventQueue. java: 97) в java .awt.EventQueue $ 3.run (EventQueue. java: 709) в java .awt.EventQueue $ 3.run (EventQueue. java: 703) в java .security.AccessController.doPrivileged (собственный метод) в java .security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain. java: 74) в java .security.ProtectionDomain $ JavaSecuritydoge () java: 84) в java .awt.EventQueue $ 4.run (EventQueue. java: 733) в java .awt.EventQueue $ 4.run (EventQueue. java: 731) в java .security.AccessController.doPrivileged (собственный метод) в java .security.ProtectionDomain $ JavaSecurityAccessImpl.doInt ersectionPrivilege (ProtectionDomain. java: 74) в java .awt.EventQueue.dispatchEvent (EventQueue. java: 730) в java .awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread. *) 10: 20 at 1083 * .awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread. java: 116) в java .awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread. java: 105) в java .awtEpd. 1088 *: 101) в java .awt.EventDispatchThread.pumpEvents (EventDispatchThread. java: 93) в java .awt.EventDispatchThread.run (EventDispatchThread. java: 82)
Я пытался найти то, что я должен сделать, чтобы исправить это, но я застрял здесь на 3 дня безрезультатно.
это код всплывающего окна JFrame:
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
// </editor-fold>
private void btnCancelOpenLessonActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
}
private void btnOpenLessonPopUpActionPerformed(java.awt.event.ActionEvent evt) {
updateDBlessons(); // update list
String[] fileName = null;
int selectedColumn = tblOpenLesson.getSelectedColumn();
int selectedRow = tblOpenLesson.getSelectedRow();
try {
Class.forName("org.sqlite.JDBC");
Connection con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite");
Statement stmtGetLesson = con.createStatement();
ResultSet rs = stmtGetLesson.executeQuery("SELECT * FROM lessons WHERE lesson_id = '" + tblOpenLesson.getModel().getValueAt(selectedRow, selectedColumn) + "';");
if (rs.next()) {
fileName[0] = rs.getString("lesson");
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
} catch (ClassNotFoundException ex) {
Logger.getLogger(openLesson.class.getName()).log(Level.SEVERE, null, ex);
}
try {
FileReader fr = new FileReader("Lessons\\" + fileName[0] + ".txt");
try (BufferedReader br = new BufferedReader(fr)) {
mainScreen.lessonPane.read(br, null); // lessonPane is from another class
br.close();
}
} catch (IOException e) {
System.out.println(e);
this.setVisible(false);
}
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
//</editor-fold>
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(() -> {
new openLesson().setVisible(false);
});
}
public void updateDBlessons() {
try {
Class.forName("org.sqlite.JDBC");
Connection con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM lessons");
DefaultTableModel dtm = (DefaultTableModel) tblOpenLesson.getModel();
dtm.setRowCount(0);
while(rs.next()){
Object o[] = {rs.getString("lesson")};
dtm.addRow(o);
}
} catch (ClassNotFoundException | SQLException e) {
}
}
// Variables declaration - do not modify
private javax.swing.JButton btnCancelOpenLesson;
private javax.swing.JButton btnOpenLessonPopUp;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel pnlOpenLesson;
private javax.swing.JTable tblOpenLesson;
// End of variables declaration
}
Я начинаю думать, что это невозможно. Если так, пожалуйста, скажите мне, что я могу сделать. Большое вам спасибо