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 | 2107 (1943) | KernelPanic |
| » | Java pomočOddelek: Programiranje | 1986 (1765) | Serial |
| » | [Java] Zagon appleta v HTMLOddelek: Programiranje | 1704 (1526) | Bela01 |
| » | [JAVA] branje iz datotekeOddelek: Programiranje | 2543 (2178) | Bela01 |
| » | [Java] Shranjevanje podatkov in datotekOddelek: Programiranje | 1360 (1313) | Vesoljc |