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: Build swing aplikace

Aktivity
Avatar
Ondřej Linart:14.4.2019 13:08

Dobrý den,
dnes jsem udělal java swing kalkulačku... když ji buildnu, vytvoří se aplikace, ale aplikace se nechce otevřít...

Zkusil jsem: -

Chci docílit: Otevření buildnuté aplikace.

 
Odpovědět
14.4.2019 13:08
Avatar
Odpovídá na Ondřej Linart
Matúš Olejník:14.4.2019 13:27

Chcem ti pomôcť, ale akosi neodpisuješ :D ... https://www.itnetwork.cz/…cb0a6bcaaa6c#…

Nahoru Odpovědět
14.4.2019 13:27
/* I am not sure why this works but it fixes the problem */
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:15.4.2019 14:12
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:) )

Editováno 15.4.2019 14:13
Nahoru Odpovědět
15.4.2019 14:12
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
Odpovídá na Lubor Pešek
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.

 
Nahoru Odpovědět
15.4.2019 18:17
Avatar
Odpovídá na Ondřej Linart
Matúš Olejník:15.4.2019 20:10

Si napísal to isté :D pošli kód a pred tým než ho sem skopíruješ klikni na </>

Nahoru Odpovědět
15.4.2019 20:10
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Matúš Olejník
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
}
 
Nahoru Odpovědět
15.4.2019 20:24
Avatar
Matúš Olejník:15.4.2019 20:34

To že ti kompilácia prejde bez problémov neznamená že je kód v poriadku :D 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);
    }
Nahoru Odpovědět
15.4.2019 20:34
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Matúš Olejník
Ondřej Linart:16.4.2019 9:08

Ne nevolám...

 
Nahoru Odpovědět
16.4.2019 9:08
Avatar
Odpovídá na Ondřej Linart
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.

Editováno 16.4.2019 9:16
Nahoru Odpovědět
16.4.2019 9:14
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Ondřej Linart
Petr Štechmüller:16.4.2019 9:15

uups, double post

Editováno 16.4.2019 9:15
Nahoru Odpovědět
16.4.2019 9:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:16.4.2019 9:46

... 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:

  1. 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.
  2. 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)

  1. zkontroluj si, že máš nainstalované jak JDK, tak JRE (obě složky budeš mít ve složce program files/java)
  2. Zkontroluj si, že máš verzi javy 8 (nebo 1.8), jestli nevíš jak, napiš
  3. Zkontroluj si, že máš JAVA_HOME v PATH nastavenou správně, jestli nevíš jak, napiš
  4. 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.

Editováno 16.4.2019 9:47
Nahoru Odpovědět
16.4.2019 9:46
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
Odpovídá na Lubor Pešek
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.

 
Nahoru Odpovědět
16.4.2019 16:02
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:16.4.2019 16:18

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;)

Nahoru Odpovědět
16.4.2019 16:18
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.
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 13 zpráv z 13.