Diskuze: Swing-zprovoznění prvního programu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
					Člen				
			Zobrazeno 41 zpráv z 41.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Chybí ti v projektu metoda main, smázni ten JPanel formulář Ja.java a místo něj vytvoř JFrame formulář, ten ti vytvoří metodu main a pak to půjde spustit.
Chtěl jsem tě odkázat na článek https://www.itnetwork.cz/…plikace-uvod, ale všiml jsem si že už ses tam ptal se stejným problémem. Aspoň jsem si ale ověřil, kde děláš chybu - je to v tom druhém kroku, hned po vytvoření nového projektu, když ten článek říká 'Na vytvořený projekt klikneme v oknu Projects pravým tlačítkem a přidáme nový JFrame form.' tak tys tam vybral JPanel místo JFrame. JPanel nevytváří tu main metodu, zatímco JFrame ji vytváří. Takže jak jsem říkal, smaž to co máš a zkus to znova a dej si na to pozor a bude to fungovat.
Zkusil jsem to, vytvořil jsem nový projekt a přidal jsem JFrame form ale vyskočila ta samá chyba
No celého toho souboru co to vytvořilo, vytvořilo to jenom jeden ne?
Jo
public class NewJFrame extends javax.swing.JFrame {
    /** Creates new form NewJFrame */
    public NewJFrame() {
        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() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
        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(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.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 NewJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    // End of variables declaration
}
					Ještě tam je licenční hlavička, ale tu asi nepotřebuješ co?
Ježiši tohle mi to nedalo má to být:
public class NewJFrame12 extends javax.swing.JFrame {
    /** Creates new form NewJFrame12 */
    public NewJFrame12() {
        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() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
        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(NewJFrame12.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame12.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame12.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame12.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 NewJFrame12().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    // End of variables declaration
}
					Napíše to: Class "NewJFrame12" does not have a main method
Tak z toho jsem jelen, podle toho cos postoval výše ji tam ale máš! Hele asi bych zkusil ten Netbeans komplet odinstalovat a nainstalovat znova, rovnou bych stáhnul novější verzi, minulý týden vyšla verze 12.2 a zkusil bych to znova. Tam bude něco shnilého v tom Netbeans...
Ok tak udělejme takový úkrok stranou, podívej se na tenhle článek https://www.itnetwork.cz/…ova-aplikace a zkus nainstalovat Javu a Netbeans krok za krokem tak jak je to v něm popsané a zprovoznit ten Hello world projekt, co to udělá...
Odinstaloval jsi napřed všechny verze Javy a Netbeans které jsi předtím
nainstaloval? Zkus to ještě jednou, napřed se ujisti že jsi odinstaloval
všechnu Javu a všechny Netbeans, pak pro jistotu zajdi ve svém domovském
adresáři do adresářů AppData\Local a AppData\Roaming a v nich smaž
adresář netbeans, pokud tam nějaký bude. Taky se ujisti že máš
nainstalované všechny Windows updaty a pro jistotu ještě jednou restartuj
celý počítač (nemyslím si opravdu že by to mohlo něco ovlivnit, ale nic
za to nedáš 
 )
Pak teprve zkus znova nainstalovat Javu a Netbeans, přesně podle článku
který jsem odkazoval výše. Pokud to ani pak nebude fungovat tak pak nevím
 Leda zkusit jiné IDE, třeba
Intellij Idea Comunnity Edition https://www.jetbrains.com/idea/download/#…
						Super, a jde ti teda tedka vytvořit i to JFrame okno a spustit?
Aha ok já myslel že mluvíš o tom konsolovém Hello world, tak super, že se to povedlo vyřešit...
O tom se píše ve čtvrté lekci https://www.itnetwork.cz/…rh-formularu
Myslím ikonu celé aplikace, kód ve druhé lekci nefunguje.
Ukaž kód, který ti nefunguje a co to vypíše, když se ho pokusíš pustit.
ImageIcon icon = new ImageIcon(getClass().getResource("/ikona.png"));
    hlavniJFrame.setIconImage(icon.getImage());
a vypíše to:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.net.URL.toExternalForm()" because "location" is null
        at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
        at HlavniJFrame$1.run(HlavniJFrame.java:94)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 11 seconds)
Okno se zobrazí, ale bez ikony
Ukaž celou tu metodu main. A máš ten soubor 'ikona.png' ve správném adresáři?
soubor "ikona.png" mám ve složce src a kód je zde:
import javax.swing.ImageIcon;
/*
 * 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 janpi
 */
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();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setText("Pozdrav z formuláře");
        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(70, 70, 70)
                .addComponent(jLabel1)
                .addContainerGap(76, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(72, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(68, 68, 68))
        );
        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(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() {
                HlavniJFrame hlavniJFrame = new HlavniJFrame();
                hlavniJFrame.setLocationRelativeTo(null);
                hlavniJFrame.setVisible(true);
                hlavniJFrame.setResizable(true);
                hlavniJFrame.setMinimumSize(hlavniJFrame.getSize());
                ImageIcon icon = new ImageIcon(getClass().getResource("/ikona.png"));
                hlavniJFrame.setIconImage(icon.getImage());
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    // End of variables declaration
}
					Ještě u řádku
ImageIcon icon = new ImageIcon(getClass().getResource("/ikona.png"));
mám žárovku s červeným kroužkem a tam je: cannot find symbol
symbol: class ImageIcon
Divný, podle mně by to mělo fungovat, zkouším to tedka u sebe a v pohodě to jede, zkus jestli nepomůže Clean and Build...
Zobrazeno 41 zpráv z 41.
				