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


Matúš Olejník:14.4.2019 13:27
Chcem ti pomôcť, ale akosi neodpisuješ 
 ... https://www.itnetwork.cz/…cb0a6bcaaa6c#…
public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500 ,500);
        frame.setVisible(true);
    }
Toto je naprostý základ toho, co potřebuješ, aby se ti vůbec SWING zobrazil.
- instanci JFrame
 - musíš oknu nastavit nějakou velikost
 - musíš okno nastavit na viditelnost
 
potom se to dá různě vyšperkovat, jako například:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
atd.
Nicméně jak říkal Matúš... I když založíš 10 takových vláken, tak věř nebo ne, nikdo z nás není takový hacker, aby se napojil na tvůj počítač doma, spustil si tvůj java kód a přečetl si ho...-.-
Pokud to nerozvedeš, tak doufám, že David tyto dva zbytečné spam tickety smaže.
PS: s tou JavouFX souhlasím (i když vlákna se nejlíp vysvětlují na swingu:) )
Ondřej Linart:15.4.2019 18:17
Dobrý den,
omlouvám se tomu, že jste to nepochopili.
Můj problém:
Jakmile buildnu Java Swing Projekt a chci otevřít jar aplikace, která se
vytvoří tak se nic nestane, vůbec nic.
Matúš Olejník:15.4.2019 20:10
Si napísal to isté 
pošli kód a pred tým než ho sem skopíruješ klikni na </>
Ondřej Linart:15.4.2019 20:24
Kód je v pořádku... v NetBeans jde projekt spustit, ale jakmile ho buildnu tak aplikace jar, která se vytvoří ne... ale jestli to pomůže, vložím ho tu
import javax.swing.JOptionPane;
/*
 * 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 Uzivatel
 */
public class HlavniJFrame extends javax.swing.JFrame {
    /**
     * Creates new form HlavniJFrame
     */
    public HlavniJFrame() {
        initComponents();
    }
    /**
     * 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() {
        jLabel1 = new javax.swing.JLabel();
        vysledekJLabel = new javax.swing.JLabel();
        vypocitejJButton = new javax.swing.JButton();
        cislo1JSpinner = new javax.swing.JSpinner();
        cislo2JSpinner = new javax.swing.JSpinner();
        operaceJComboBox = new javax.swing.JComboBox<>();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setText("=");
        vysledekJLabel.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        vysledekJLabel.setText("0");
        vypocitejJButton.setText("Vypočítej");
        vypocitejJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                vypocitejJButtonActionPerformed(evt);
            }
        });
        operaceJComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "+", "-", "*", "/" }));
        operaceJComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                operaceJComboBoxActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addComponent(cislo1JSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(26, 26, 26)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(vypocitejJButton)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(operaceJComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                        .addComponent(cislo2JSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10)
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(vysledekJLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(51, 51, 51))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(133, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(vysledekJLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cislo1JSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cislo2JSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(operaceJComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(68, 68, 68)
                .addComponent(vypocitejJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(35, 35, 35))
        );
        pack();
    }// </editor-fold>
    private void vypocitejJButtonActionPerformed(java.awt.event.ActionEvent evt) {
    String operace = String.valueOf(operaceJComboBox.getSelectedItem());
    int cislo1 = (int)cislo1JSpinner.getValue();
    int cislo2 = (int)cislo2JSpinner.getValue();
    double vysledek = 0;
    if (operace.equals("+"))
        vysledek = cislo1 + cislo2;
    else if (operace.equals("-"))
        vysledek = cislo1 - cislo2;
    else if (operace.equals("*"))
        vysledek = cislo1 * cislo2;
    else if (operace.equals("/"))
    {
        if (cislo2 != 0)
            vysledek = cislo1 / cislo2;
        else
        {
            vysledek = 0;
            JOptionPane.showMessageDialog(null, "Nulou nelze dělit");
        }
    }
    vysledekJLabel.setText(String.valueOf(vysledek));
    }
    private void operaceJComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }
    /**
     * @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(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.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 HlavniJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JSpinner cislo1JSpinner;
    private javax.swing.JSpinner cislo2JSpinner;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JComboBox<String> operaceJComboBox;
    private javax.swing.JButton vypocitejJButton;
    private javax.swing.JLabel vysledekJLabel;
    // End of variables declaration
}
					To že ti kompilácia prejde bez problémov neznamená že je kód v poriadku
 napr. na základe toho čo
si poslal sa ťa spýtam či niekde v inej triede tak ako Lubor Pešek už
písal voláš niečo takéto
public static void main(String[] args) {
        HlavniJFrame frame = new HlavniJFrame();
        frame.setSize(500 ,500);
        frame.setVisible(true);
    }
					Petr Štechmüller:16.4.2019 9:14
Ahoj,
Přeci jen to voláš 
/* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HlavniJFrame().setVisible(true);
            }
        });
Až vytvoříš jar, spusť ho z konzole příkazem:
java -jar soubor.jar
Při chybě se do konzole vypíše StackTrace, který sem zkopíruj. Pak zjistíme, co je za problém.
Petr Štechmüller:16.4.2019 9:15
uups, double post
... předpokládám, podle toho, cos sem vložil, že celé "programování" spočívá v tom, že si nataháš komponenty přes ten defaultní swing builder v netbeansech, do vyznačených polí napíšeš jednoduchou syntaxi (něco + něco = něco), ale vůbec netušíš, co se provádí...
takže:
Jak jsem psal ten example, tak ten ty provoláváš, ovšem ne takhle jednoduše
na 3 řádcích:
JFrame frame = new JFrame();
provoláváš v podstatě v main metodě (automaticky vygenerováno)
new HlavniJFrame()
frame.setSize(500 ,500);
provoláváš opět ve vygenerovaném těle a to konkrétně v metodě initComponents(). Tam se provolává přímo layout (jejich defaultní) a v něm se nastavují potřebné parametry (rozložení, velikost atd.)
No a v main metodě provoláváš i ten poslední řádek, čili
frame.setVisible(true);
ty voláš přímo na instanci, kterou si nikam neuložíš
new HlavniJFrame().setVisible(true);
Toliko k tomu, že to údajně nikde nevoláš (jen jsi potvrdil, že nevíš co děláš, ale pouze si umisťuješ komponenty na panelek a dvojklikem na ně vygeneruješ nějaký actionPerform a do něj si naťukáš velmi jednoduchou syntaxi)
A teď ke generování. Zkoušel jsem to v IDEII i v NetBeansech (eclipse neuznávám:) ) a dokonce i v BlueJ, který používám pro cvičné ukázky či pro rychlý modul. Ve všech případech mi to generování šlo a mám všude jarko.
Zkoušel jsem si i hrát s verzí Javy (mám 8 a teď přecházím na 11) a trošku mi to haprovalo. Tady máš několik typů, co bys mohl udělat:
- Zkus zbuildit nové jarko tím, že ho uděláš nové (je možné, že tam máš kolizi ve verzích jarka a ono se ti to snaží buildit nějak špatně). Takže zmáčkni tlačítko vedle zelené šipky (kladívko s metličkou... bože to je popis:D) s nápisem Clean and Build project.
 - Zkus si spustit jarko v příkazové řádce. Počítám, že v ní asi nebudeš úplně zběhlý, takže když si otevřeš cli (Command LIne, neboli příkazovou řádku) (otevřeš ji, když zmáčkneš tlačítko windows nebo klikneš na start a napíšeš cmd), tak přejdi do adresáře, kde máš dotyčné jarko (přecházíš pomocí příkazu cd (change directory). Například cd Desktop, pokud to máš na ploše.
 
No a potom napiš java -jar a název jarka, včetně přípomny .jar (takže
např.: java -jar blbost.jar)
No a uvidíš, co ti to vypíše (pokud nic nepomůže z níže uvedeného, tak
toto zkus a napiš nám tu zprávu)
- zkontroluj si, že máš nainstalované jak JDK, tak JRE (obě složky budeš mít ve složce program files/java)
 - Zkontroluj si, že máš verzi javy 8 (nebo 1.8), jestli nevíš jak, napiš
 - Zkontroluj si, že máš JAVA_HOME v PATH nastavenou správně, jestli nevíš jak, napiš
 - Poslední, co mě napadá, tak ještě se mrkni do projektu v netbeansech. Klikni na svůj projekt pravým a dej properties. V levém menu si vyber Run a zkontroluj, že máš u Main Class nastavenou spouštěcí třídu. Pokud ne, tak ji tam vyhledej.
 
No a potom bych radil, abys používal Javu 8. Ta je stabilní, zaběhlá a všechno, co najdeš na netu, tak na ní poběží. U vyšších verzí jsou často nějaké problémy. Hlavně pokud použiješ vyšší verzi, tak si dej bacha, ať nedochází ke konfliktům. Pokud třeba použiješ verzi JDK 11 a v počítači budeš mít verzi Javy 8, tak to nespustíš, ani když budeš hezky prosit.
PS: Kdyby se ti to náhodou podařilo rozjet, nepovažuj to za úspěch. Pokud programuješ tímhle stylem, tak děláš spoustu věcí špatně. Obětuj jeden den, nehraj minecraft nebo csko a projdi si zdejší tutoriály. Je to finančně nulová investice (máš tady vzdělání zdarma, tak si toho važ) a časově to není nikterak náročné. A tady prochází i Swing a dokonce i FX. Každopádně budeš vědět, co k čemu je. Takhle, jak to děláš, tak to děláš špatně. (troufám si toto tvrdit z toho, že jsi Matúšovi odpověděl na předešlou otázku "Ne nevolám...", co dokazuje, že nevíš, kde co znamená).
Na to máš pochopitelně právo - každý někdy začínal, ale ber to jako dobrou radu a udělej si zdejší tutoriály.
Ondřej Linart:16.4.2019 16:02
Chyba byla v tom, že jsem měl špatně nastavenou main class v properties
projektu...
Děkuji za všechny odpovědi.
ok, ale fakt si ve svém zájmu projdi zdejší tutorial. Bude to dobře pro
tebe.
A příště ten kód pichni hned, ať nemusíš číst naše předchozí
komentáře;)
Zobrazeno 13 zpráv z 13.
				
