Forum » Programiranje » [Java]Problem z vektorjem
[Java]Problem z vektorjem
KernelPanic ::
Spostovani!
Obupujem nad delom kode, ki vztrajno (od noci iz cetrtka na petek :D) mece ven exception. Tukaj je code chunck:
S spostovanjem,
Marko
Obupujem nad delom kode, ki vztrajno (od noci iz cetrtka na petek :D) mece ven exception. Tukaj je code chunck:
try { CModelListOpenedFiles model=(CModelListOpenedFiles)this.toolBarFileSwitcher(). listOpenedFiles().getModel(); System.out.println("Vector size: "+model.getSize()); System.out.println("Selected vector index to be deleted: "+iIndexSelectedDocument); strRemovedFilename=model.remove(iIndexSelectedDocument); } catch(Exception ex) { System.out.println(ex); }Torej, rad bi pobrisal element iz modela za JList (kot sem to delal ze ziljon times, vedno je delovalo). zgornja dva System.out-a izpiseta trenutno vrednost modela 1 ter index, ki se brise, ima vrednost 0. To je ok! Vendar, zakaj mi skoci na exception? Aja, se izpisek iz konzole:
Vector size: 1
Selected vector index to be deleted: 0
java.lang.ArrayIndexOutOfBoundsException: -1
S spostovanjem,
Marko
- spremenil: KernelPanic ()
kr?en ::
Ti exception lepo razlozi kje je napaka. Hoces brisat indeks, ki ne obstaja oz. je seznam prazen. Debugaj korak za korakom in preveri zadevo. Pa Vector je deprecated v Javi.
Zgodovina sprememb…
- spremenil: kr?en ()
KernelPanic ::
Cakaj malo, zgornja system.out.println ravno ovrecita tvojo trditev, namrec, velikost vektorja pred removanjem je 1, torej je edini dostopni indeks elementa 0. V prvotnem postu poglej pod izpisom kode, kaj izpiseta System.out.println ...
Arto ::
KernelPanic je izjavil:
Cakaj malo, zgornja system.out.println ravno ovrecita tvojo trditev, namrec, velikost vektorja pred removanjem je 1, torej je edini dostopni indeks elementa 0.
Ampak ti pa brišeš stvar na indeksu -1.
KernelPanic ::
Vector size: 1Brisem v indexu 0. Ali ga mogoce vector object zmanjsa samodejno za 1, znotraj svoje kode?
Selected vector index to be deleted: 0
java.lang.ArrayIndexOutOfBoundsException: -1
Lp,
Marko
KernelPanic ::
Saj sem ga, poglej kodo, v prejsnjem postu je to:
Selected vector index to be deleted: 0
Arto ::
Aja pa res. A to maš znotraj kake for zanke al pa kej?
EDIT: Kaj se pa zgodi, če indeks povečaš za 1? A pravilno deluje?
EDIT: Kaj se pa zgodi, če indeks povečaš za 1? A pravilno deluje?
Zgodovina sprememb…
- spremenil: Arto ()
KernelPanic ::
Ok, gremo malo ozadja: Delam na enostavnem file editorju, ki hrani v JList (v njegovem modelu) imena odprtih datotek. Ko pritisnem File->New, naredim novo prazno datoteko in ime bi rad dodal v ta vektor, ki ga omenjamo. Koda je sledeca:
Lp,
Marko
public void actionPerformed(ActionEvent e) { if(e.getSource()==this.menuItemFileNew()) { CDocument currentDocument=new CDocument(CDefaults.NEW_FILENAME_EN); this.panelMain().openedDocuments().add(currentDocument); this.menuItemFileSave().setEnabled(true); this.menuItemFileSaveAs().setEnabled(true); CModelListOpenedFiles model=(CModelListOpenedFiles)this.toolBarFileSwitcher(). listOpenedFiles().getModel(); model.addElement(currentDocument. paneDocument().filename()); this.toolBarFileSwitcher().setVisible(true); this.menuItemFileClose().setEnabled(true); if(this.panelMain().openedDocuments().size()>1) { this.menuItemFileCloseAll().setEnabled(true); } this.toolBarFileSwitcher().listOpenedFiles().setSelectedIndex(model.size()-1); }Ker imam opravka z JList, se po tej kodi se izvede changeSelection of JList:
@Override public void valueChanged(ListSelectionEvent e) { if(e.getSource().equals(this.toolBarFileSwitcher().listOpenedFiles())) { CModelListOpenedFiles model=(CModelListOpenedFiles)this.toolBarFileSwitcher(). listOpenedFiles().getModel(); if(!e.getValueIsAdjusting()) { if(model.getSize()>0) { int iIndexSelectedDocument=this.toolBarFileSwitcher(). listOpenedFiles().getSelectedIndex(); CDocument selectedDocument=this.panelMain().openedDocuments(). get(iIndexSelectedDocument); if(this.panelMain().documentActive()!=null) { this.panelMain().documentActive().setVisible(false); } this.panelMain().setDocumentActive(selectedDocument); this.panelMain().add(this.panelMain().documentActive(), BorderLayout.CENTER); if(this.panelMain().documentActive().paneDocument(). getText().length()>0) { this.toolBarFileSwitcher().panelActiveDocumentInfo(). panelFileSizeInfo().updatePanel(this.panelMain(). documentActive().paneDocument(). getText().length(), true); } else { this.toolBarFileSwitcher().panelActiveDocumentInfo(). panelFileSizeInfo().updatePanel(this.panelMain(). documentActive().paneDocument(). getText().length(), false); } this.panelMain().documentActive().setVisible(true); this.panelMain().documentActive(). paneDocument().addKeyListener(this); this.panelMain().documentActive(). paneDocument().requestFocus(); } else { this.toolBarFileSwitcher().setVisible(false); this.panelMain().setDocumentActive(null); this.panelMain().openedDocuments().removeAllElements(); model.clear(); this.menuItemFileClose().setEnabled(false); this.menuItemFileCloseAll().setEnabled(false); this.panelMain().updateUI(); } } } }Torej, kje je tocno problem: Tale .remove sem izgleda resil (se sam nevem kako), vendar se mi je pojavil nov problem: Ce pritisnem File->New (iz menija) po zagonu programa, se ustvari nov file (s tem mislim nov element v JList ter nov, prazen dokument), tako kot mora. File->New nato lahko tudi ponavljam, stvar lepo dela! Ce pa izberem funkcijo File-Close All ali pritiskam File->Close do zadnjega odpretga fajla, se fajli lepo zapirajo in brisejo iz JList (iz njegovega modela) ter iz internega vetkorja odprtih dokumentov. In ko so vsi fajli zaprti in v JList ni nobenega elementa, pritisnem File->New, se mi stvar usuje v:
model.addElement(currentDocument. paneDocument().filename());znotraj actionPerformed metode. In mi ni jasno zakaj?! Seznam je prazen, vendar ni null. Ima nic elementov in ne vem, zakaj ne morem dodati z omenjeno vrstico novega elementa v vektor.
Lp,
Marko
Zgodovina sprememb…
- spremenil: KernelPanic ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java]Client/Server preko socketaOddelek: Programiranje | 1770 (1606) | KernelPanic |
» | Java pomočOddelek: Programiranje | 1794 (1573) | Serial |
» | [Java] Zagon appleta v HTMLOddelek: Programiranje | 1539 (1361) | Bela01 |
» | [JAVA] branje iz datotekeOddelek: Programiranje | 2406 (2041) | Bela01 |
» | [Java] Shranjevanje podatkov in datotekOddelek: Programiranje | 1228 (1181) | Vesoljc |