Est-il possible d'ouvrir un fichier en utilisant un nom similaire à partir d'une base de données?

itskenleton:

Donc, lorsque je clique sur un bouton ( « Ouvrir la leçon ») un JFrame d'une classe différente apparaît (en utilisant .setVisible (true)). Dans ce JFrame il y a un JTable (tblOpenLesson), et deux boutons (btnOpenLesson et btnCancel).

maintenant ce que je veux arriver est que lorsque je clique sur le bouton Ouvrir de la leçon, il fera ce qui suit: 1. Mettez à jour la table pour tenir compte de la base de données SQLite (leçon) dans le JTable 2. Ouvrez le fichier sélectionné dans la table en obtenant le fichier nom (qui est le même que dans la base de données) et l'utiliser pour la fonction FileReader.

Cependant, il me donne l'erreur:

Exception in thread "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) à javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:2022) à javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton.java:2348) à javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java : 402) à javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:259) à javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java: 252) à java.awt.Component.processMouseEvent (Component.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.awt.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 (native Method) à java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:74) à java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java: 84) à java.awt.EventQueue 4.run $ (EventQueue.java:733) à java.awt.EventQueue 4.run $ (EventQueue.java:731) à java.security.AccessController.doPrivileged (native Method) à java.security .ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:74) à java.awt.EventQueue.dispatchEvent (EventQueue.java:730) à java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:205) à java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:116) à java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) à java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java : 101) à java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) à java.awt.EventDispatchThread.run (EventDispatchThread.java:82)

J'ai essayé la recherche de ce que dois-je faire pour le réparer mais je suis coincé ici pendant 3 jours sans résultat.

c'est le code du JFrame popup:

@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                   

}

Je commence à penser qu'il est impossible. Si oui, s'il vous plaît me dire ce que je peux faire. Merci beaucoup

Edgar:

Appel updateDBlessons () avant getSelectedColumn () / getSelectedRow () est remise à zéro de la ligne sélectionnée / colonne à -1.

Ne pas appeler updateDBlessons () à btnOpenLessonPopUpActionPerformed et appeler au lieu de cela avant de montrer le JFrame.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=280117&siteId=1
conseillé
Classement