IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Po kliknuti na Build Project program nefunguje

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jiří REMAR
Člen
Avatar
Jiří REMAR:23.9.2020 23:01

Zdravím
Mám dodat ohledně buildování a nefunkčností software. Jde o toto:
Mám prográmek zakladní JFrame v něm dva Buttony.
První button otevře nové okno a vypíše do něj do tabulky data z SQL Express.
Druhý button otevře okno kde je na výber z několika možností z ComboBoxu vyberu položku a kliknu na button Info a do TextArea vypíše info...

Zkusil jsem: Píšu to v NetBeans, když v NetBeans kliknu na Run Project vše funguje OK ale když Buildnu Project, vlezu do složky kde je ten sowtware.jar a pustim ho prográmek se rozjede ale když kliknu na jakýkoli button kde je dotaz z SQL tak se nic neděje jako když na tlačítku není nic nastaveno ani nezahlásí chybu. Věděl by někdo kde je nějaká chyba? Za každou radu budu moc rád...

Zde je kód na výpis do tabulky:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author mefisto
 */
public class SeznamUkolu extends javax.swing.JFrame {

    /**
     * Creates new form SeznamUkolu
     */

    public SeznamUkolu() {
        initComponents();
            setExtendedState(getExtendedState() | HlavniJFrame.MAXIMIZED_BOTH);
            setDefaultCloseOperation(HlavniJFrame.DISPOSE_ON_CLOSE);
        ukaz_ukoly();
    }

     public ArrayList<Ukoly> ukolList(){
        ArrayList<Ukoly> ukolList = new ArrayList<>();
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;databaseName=intranet;" + "create=true;user=sa;password=root";
            Connection con = DriverManager.getConnection(url);
            String query1 = "SELECT * from ukoly";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query1);
            Ukoly ukoly;
            while(rs.next()){
                ukoly = new Ukoly(rs.getInt("id"), rs.getNString("firma"), rs.getString("ukol"), rs.getString("splneno"));
                ukolList.add(ukoly);
            }
           }
        catch(ClassNotFoundException | SQLException e){
            JOptionPane.showMessageDialog(null, e);
        }
        return ukolList;
    }
    public void ukaz_ukoly(){
        ArrayList<Ukoly> list = ukolList();
        DefaultTableModel model = (DefaultTableModel) tabulkaUkolu.getModel();
        Object[] row = new Object[4];
        for(int i=0; i<list.size(); i++){
            row[0]=list.get(i).getid();
            row[1]=list.get(i).getfirma();
            row[2]=list.get(i).getukol();
            row[3]=list.get(i).getsplneno();
            model.addRow(row);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tabulkaUkolu = new javax.swing.JTable();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Seznam úkolu");

        tabulkaUkolu.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Firma", "Úkol", "Splněno"
            }
        ));
        tabulkaUkolu.setRowHeight(24);
        jScrollPane1.setViewportView(tabulkaUkolu);

        jPanel1.setBackground(new java.awt.Color(51, 153, 255));
        jPanel1.setPreferredSize(new java.awt.Dimension(590, 119));

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("Úkoly");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(41, 41, 41)
                .addComponent(jLabel1)
                .addContainerGap(49, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 1058, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1038, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 435, Short.MAX_VALUE)
                .addGap(96, 96, 96))
        );

        pack();
    }// </editor-fold>

    /**
     * @param args the command line arguments
     */
    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
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SeznamUkolu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SeznamUkolu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SeznamUkolu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SeznamUkolu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SeznamUkolu().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tabulkaUkolu;
    // End of variables declaration
}

Chci docílit: Chci zjistit proč to nejde.

 
Odpovědět
23.9.2020 23:01
Avatar
Odpovídá na Jiří REMAR
Matúš Olejník:24.9.2020 16:55

Ahoj, nechcem ti tu teraz písať nejaké riešenie keďže som dlho nerobil so swingom, ale chyba zrejme je, že tie databázové volania, voláš priamo z threadu v ktorom ti beží guičko. Skús to riešiť asynchrónne alebo to spusti vo vlastnom threade a nastav mu nejaký callback ktorý ti vypíše potrebné veci.

Myslím, že taký Peter Mlich si na tomto zmlsne a napíše ti pekný článok :D Ak nie tak môžem napísať moje :D

Nahoru Odpovědět
24.9.2020 16:55
/* I am not sure why this works but it fixes the problem */
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:24.9.2020 20:27

Ahoj, ten netbeans code-template je hrozný, člověk než se v tom vyzná, tak to trvá:)

Nicméně zkoušel jsem to u sebe. Sice jsem to zkoušel pro mysql a v idei, ale zbuildil jsem to v pořádku. Je možné, že máš špatně nastavenou Javu, která to nedokáže přečíst (i když swing by měla), ale také mi spíš přijde, že máš problém s přihlášením do DB, podle toho, co píšeš. Je dost možné, že pokud používáš nějakou knihovnu (podle kódu používáš jdbc), tak ti to neumí najít tuto knihovnu.

Zkus tohle:
Jestli máš v pořádku build a dokážeš program u sebe spustit, tak to spusť přes cli (command line). Jestli neumíš pracovat s příkazovou řádkou, tak to napiš a navedeme tě.
Každopádně teď můžeš docílit toho, že dostaneš nějaký výpis, co máš za problém. Pamatuj si, že programátor musí umět pracovat s logem, takže teď si to krásně vyzkoušíš v praxi;)

Dostaneš se do adresáře, kde máš jarko, které chceš spustit. Spusť ho přes příkaz: java -jar <nazev jarka včetně přípony>
například: java -jar testovaci_apli­kace.jar
No a pak se ti spustí program, jako kdybys ho spustil dvojklikem. Jenže do té příkazové řádky se ti bude zapisovat případná exceptiona.
Takže buď už z ní sám poznáš, co je za problém, nebo sem hoď ten text a podíváme se, co s tím dál. Takhle, jak to popisuješ, tak může být problém nastavení a buildování přes NB. Jak říkám - zkopčil jsem si tvůj kód a až na to, že jsem si musel messengera (třídu Ukoly) doprogramovat sám, tak to jede v pořádku. Teda až na jednu maličkost - když vytváříš nový objekt Ukoly a do konstruktoru píšeš přímo hodnoty z databáze, tak tam máš pro firmu příkaz: rs.getNString("fir­ma")
Je to v pořádku? Opravdu to chceš mít NString?

A potom nakonec bych měl jednu poznámku k syntaxi...-.-

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
24.9.2020 20:27
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Jiří REMAR
Člen
Avatar
Odpovídá na Lubor Pešek
Jiří REMAR:25.9.2020 14:53

Ahoj děkuji za odpověď dnes se k tomu nedostanu ale v sobotu na to kouknu zkusím co jsi radil a dám vědět.

 
Nahoru Odpovědět
25.9.2020 14:53
Avatar
Jiří REMAR
Člen
Avatar
Jiří REMAR:29.9.2020 10:57

Omlouvám se, že píšu až teď ale dřív jsem se na to nedostal. Pustil jsem to jak jsi psal přes CLI a vše funguje OK ale double klikem na appku pořád stejný problém zkusím se podívat na nějaké nastavení Javy co by to mohlo dělat.
Když něco pozjistím dám sem odpověď pro jiné.

 
Nahoru Odpovědět
29.9.2020 10:57
Avatar
Jiří REMAR
Člen
Avatar
Jiří REMAR:29.9.2020 11:17

Tak problém byl u mě v Javě, přeinstalovával jsem verze a pak nastalo toto. Musí se změnit klíč v registrech na správnou složku Javy a vše funguje. Zde je návod:

Open the Registry Editor, and navigate to HKEY_CLASSES_RO­OT\jarfile\she­ll\open\comman­d. Modify the value of the Default key as follows: "[Location of your JRE]\bin\javaw.exe" -jar "%1" %*
Replace [Location of your JRE] with the root directory of your JRE installation.
For example:
"C:\Program Files\Java\jre7\bin\­javaw.exe" -jar "%1" %*
Repeat the above steps for HKEY_LOCAL_MAC­HINE\SOFTWARE\Clas­ses\jarfile\she­ll\open\comman­d.

 
Nahoru Odpovědět
29.9.2020 11:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.