Pomoc oko exceptiona

1

Pomoc oko exceptiona

offline
  • Jelena
  • Pridružio: 15 Avg 2014
  • Poruke: 22
  • Gde živiš: Beograd

Pozdav,imam zadatak da napravim panel za unos i prikaz imena ,prezime,indeksa studenata,sve sam to uradila,jedino imam problem oko hvatanja izuzetaka ako neko ne unese nesto od podataka evo moj kod: public class Projektni extends JFrame {     public final JTextField ime = new JTextField(10);     public final JTextField prezime = new JTextField(10);     public final JTextField index = new JTextField(10);     public DefaultListModel podaci = new DefaultListModel();     public JList lista = new JList(podaci); //prazan konstruktor gde implementiramo i definisemo dugmice,polja za upisivanje podataka i osluskivace     public Projektni()     {         ime.setPreferredSize(new Dimension(200,80));         prezime.setPreferredSize(new Dimension(200,80));         index.setPreferredSize(new Dimension(150,40));  JPanel panel=new JPanel (new GridLayout(6, 7)); panel.add(new JLabel("Ime studenta:")); panel.add(ime); panel.add(new JLabel("Prezime studenta:")); panel.add(prezime); panel.add(new JLabel("Broj indeksa studenta:")); panel.add(index); panel.setBackground(Color.cyan); String[] seminari = {"Microsoft","MAC","Java"}; final JComboBox cek = new JComboBox(seminari); panel.add(cek);   JButton upisibtn=new JButton("Upisi"); upisibtn.setPreferredSize(new Dimension(30,30)); upisibtn.addActionListener(new ActionListener() {         @Override         public void actionPerformed(ActionEvent e)     {         try{         String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";         Upisi.upisi(s);     }         catch (NemaIndeks ex  ) {                 JOptionPane.showMessageDialog(null, ex);             }   }});     //Dugme prikazi ,koji prikazuje upisane podatke preko klase citaj. JButton citajbtn=new JButton("Prikazi"); citajbtn.setPreferredSize(new Dimension(30,30)); citajbtn.addActionListener(new ActionListener() {   @Override   public void actionPerformed(ActionEvent e)   {    for(String s:Citaj.citaj())    podaci.addElement(s);     } }); //Dodavanje komponenata na panel. panel.add(upisibtn); panel.add(citajbtn); add(panel,BorderLayout.CENTER); panel.add(lista);             }         public String nazivZaUnos() throws NemaNaziv {         String naziv = ime.getText();         if (naziv.equals("")) {             throw new NemaNaziv("Niste uneli naziv studenta. ");         }         return naziv;     }     public String nazivZaUnosPrezimena() throws NemaPrezime {         String prez = prezime.getText();         if (prez.equals("")) {             throw new NemaPrezime("Niste uneli prezime studenta. ");         }         return prez;     }      public String NemaIndeks() throws NemaIndeks {         String indeks = index.getText();         if (indeks.equals("")) {             throw new NemaIndeks("Niste unelii ndeks studenta. ");         }         return indeks;     }                                         //pokretacki metod     public static void main(String[] args) {         JFrame frame = new Projektni();             frame.setSize(400, 300);     frame.setLocationRelativeTo(null);     frame.setTitle("Seminari");     frame.setDefaultCloseOperation(EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true);         }     }
Imam napisane metode citaj,upisi koje rade i klase exceptiona,problem mi se javlja u ovom delu koda:
public void actionPerformed(ActionEvent e)     {         try{         String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";         Upisi.upisi(s);     }         catch (NemaIndeks ex  ) {                 JOptionPane.showMessageDialog(null, ex);             }   }});
Ako neko zna sta treba da popravim i kako,neka napise.Hvala Smile



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Pa ovo izgleda ok nisam testirao ali probaj ovako

public void actionPerformed(ActionEvent e) {          String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";         try {            Upisi.upisi(s);      }         catch (NemaIndeks ex  ) {                 JOptionPane.showMessageDialog(null, ex);                 return;             }   }});



offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 11 Sep 2014 12:32

Problem je u tom što sve radi i kada se neko polje ostavi prazno, jel da? Moraš prvo svaki pročitani string da porediš sa praznim stringom. Da li to radiš u upisi() metodi ili ne? Ako da, ta metoda mora da bude deklarisana tako da baca izuzetke kako bi se izuzetak propagirao do hendlera u actionPerformed(ActionEvent e) metodi. Ako ne, tu proveru moraš da izvršiš pre poziva metode upis() i da u određenoj situaciji baciš odgovarajući izuzetak.

Dopuna: 11 Sep 2014 12:35

_iKaC ::Pa ovo izgleda ok nisam testirao ali probaj ovakoSintaksno to jeste ispravno, ali ne radi onako kako treba da radi: JelenaPA ::imam problem oko hvatanja izuzetaka ako neko ne unese nesto od podataka...Zbog toga mora da se proveri da li je nešto uneseno, pa ako nije da se baci izuzetak.

offline
  • Jelena
  • Pridružio: 15 Avg 2014
  • Poruke: 22
  • Gde živiš: Beograd

Napisano: 11 Sep 2014 12:37

Nece i dalje,saljem ti zadatak,ako budes imao vremena da vidis sta mzd nije u redu.Hvala ti.
mycity.rs/must-login.png

Dopuna: 11 Sep 2014 12:39

Probacu to da uradim Vaso. Smile

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

E ovako:
Brdo gresaka u kodu iskreno i namucio sam se extra. Na dosa mesta nepostavljene zagrade za zatvaranje bloka, catch na pogresnom mestu ali elem fiksirano.

Greska koja je sve ovo izazvala je :
Exception is never thrown in body of corresponding try statement

Citat:
This will lead to an compiler error, because your java knows that you are trying to catch an exception that will NEVER EVER EVER occur. Thus you would get: exception ExceptionA is never thrown in body of corresponding try statement


Ja sam ti uradio samo za exception NemaIme i super kompajlira i hvata gresku. Ti menjaj dalje

package javaapplication4; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javaapplication4.NemaNaziv; /* *Klasa Projektni se sastoji od polja za upisivanje podataka,lista koja prima podatke kao i panel *na koji se stavljaju polja za upisivanje podataka,dugmici,combo box *@Jelena */ public class Projektni extends JFrame {     public final JTextField ime = new JTextField(10);     public final JTextField prezime = new JTextField(10);     public final JTextField index = new JTextField(10);     public DefaultListModel podaci = new DefaultListModel();     public JList lista = new JList(podaci); //prazan konstruktor gde implementiramo i definisemo dugmice,polja za upisivanje podataka i osluskivace     public Projektni()     {         ime.setPreferredSize(new Dimension(200,80));         prezime.setPreferredSize(new Dimension(200,80));         index.setPreferredSize(new Dimension(150,40));  JPanel panel=new JPanel (new GridLayout(6, 7)); panel.add(new JLabel("Ime studenta:")); panel.add(ime); panel.add(new JLabel("Prezime studenta:")); panel.add(prezime); panel.add(new JLabel("Broj indeksa studenta:")); panel.add(index); panel.setBackground(Color.cyan); String[] seminari = {"Microsoft","MAC","Java"}; final JComboBox cek = new JComboBox(seminari); panel.add(cek);   JButton upisibtn=new JButton("Upisi"); upisibtn.setPreferredSize(new Dimension(30,30)); upisibtn.addActionListener(new ActionListener() {         @Override         public void actionPerformed(ActionEvent e)     {         try {             String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";             Upisi.upisi(s);             throw new NemaNaziv();         }catch (NemaNaziv ex) {             JOptionPane.showMessageDialog(null, ex);         }             } });     //Dugme prikazi ,koji prikazuje upisane podatke preko klase citaj. JButton citajbtn=new JButton("Prikazi"); citajbtn.setPreferredSize(new Dimension(30,30)); citajbtn.addActionListener(new ActionListener() {   @Override   public void actionPerformed(ActionEvent e)   {    for(String s:Citaj.citaj())    podaci.addElement(s);     } }); //Dodavanje komponenata na panel. panel.add(upisibtn); panel.add(citajbtn); add(panel,BorderLayout.CENTER); panel.add(lista); }     public String nazivZaUnosNaziva() throws NemaNaziv {         String naziv = ime.getText();         if (naziv.equals("")) {             throw new NemaNaziv("Niste uneli naziv studenta. ");         }         return naziv;     }     public String nazivZaUnosPrezimena() throws NemaPrezime {         String prez = prezime.getText();         if (prez.equals("")) {             throw new NemaPrezime("Niste uneli prezime studenta. ");         }         return prez;     }      public String nemaIndeX() throws NemaIndeks {         String indeks = index.getText();         if (indeks.equals("")) {             throw new NemaIndeks("Niste unelii ndeks studenta. ");         }         return indeks;     }                                         //pokretacki metod     public static void main(String[] args) {         JFrame frame = new Projektni();             frame.setSize(400, 300);     frame.setLocationRelativeTo(null);     frame.setTitle("Seminari");     frame.setDefaultCloseOperation(EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true);         }     }

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 11 Sep 2014 14:28

E bre, pa što ovako? Mr. Green
public void actionPerformed(ActionEvent e)     {         try {             String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";             Upisi.upisi(s);             throw new NemaNaziv(); //ovo hvata :D         }catch (NemaNaziv ex) {             JOptionPane.showMessageDialog(null, ex);         }I ok je što ovo hvata izuzetak. Ali taj izuzetak će uvek biti bačen (osim ukoliko funkcija upisi() ne baci neki izuzetak pre toga). Very Happy Gde si koristio funkcije koje si definisao? One su ok skroz, i sa njima bi trebalo da radi, ali one treba da se pozovu pre upisa u try bloku, odnosno baš u liniji gde se konkateniraju stringovi.

Dopuna: 11 Sep 2014 14:33

String s=ime.getText()+" "+prezime.getText()+" "+index.getText()+" "+cek.getSelectedItem()+"\n";Elem, kod ove linije bi najoptimalnija bila provera da li postoje dva uzastopna razmaka. Ukoliko postoje, znači da je neko od polja ostalo prazno i da je su u string konkatenirana dva blanko karaktera (pre određenog polja i posle polja). Naravno, ukoliko je blanko prvi i tu treba da se baci izuzetak.

No, to bi bilo optimalno rešenje, ali i hardcoded... Mr. Green

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Pre par min sam skontao sa sam uradio Mr. Green ali nema veze fail try

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Ovo će sa onim funkcijama da završi posao: String s=nazivZaUnosNaziva()+" "+nazivZaUnosPrezimena()+" "+nemaIndeX()+" "+cek.getSelectedItem()+"\n";

offline
  • Jelena
  • Pridružio: 15 Avg 2014
  • Poruke: 22
  • Gde živiš: Beograd

Hvala vam puno na trudi ail mi nije jasno de da ubacim ove funkcije koje si napisao Vaso? Razz

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

U try bloku actionPerformed() metode, umesto tvoje naredbe sa konkatenacijom stringova.

Ko je trenutno na forumu
 

Ukupno su 588 korisnika na forumu :: 13 registrovanih, 2 sakrivenih i 573 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, Ageofloneliness, esx66, hyla, laurusri, MikeHammer, miodrag, Nobunaga, panzerwaffe, Penzula, shaja1, Snorks, zlatkoa987