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.