Toon posts:

[Java] ArrayIndexOutOfBoundsException

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een JPanel (GridBagLayout) waarop ik een lijst met titels wil tonen.
De gegevens haal ik uit MySQL.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
try
{
 //Query

 int y = 0;
 
 JLabel lblTitle;

 while (resultaat.next())
 {
  c.gridx = 0;
  c.gridy = y;
  c.anchor = GridBagConstraints.WEST;
  lblTitle = new JLabel(resultaat.getString("title"));
  lblTitle.setBorder(border);
  panel.add(lblTitle, c);

  y++;
 }
}
catch (SQLException eSql)
{
 eSql.printStackTrace();
}
catch(java.lang.ArrayIndexOutOfBoundsException e)
{
  e.printStackTrace();
}


Hier gaat het fout. Ik krijg een ArrayIndexOutOfBoundsException error:
java.lang.ArrayIndexOutOfBoundsException: 512

Toen heb ik dit geprobeerd om te kijken of het aan y lag:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
try
{
 //Query

 int y = 0;
 
 JLabel lblTitle;

 while (resultaat.next())
 {
  c.gridx = 0;
  c.gridy = y;
  c.anchor = GridBagConstraints.WEST;
  lblTitle = new JLabel(resultaat.getString("title"));
  lblTitle.setBorder(border);
  panel.add(lblTitle, c);

  if (y == 511)
  {
   y = 0;
  }
  
  y++;
 }
}
catch (SQLException eSql)
{
 eSql.printStackTrace();
}
catch(java.lang.ArrayIndexOutOfBoundsException e)
{
  e.printStackTrace();
}


De fout zat m idd in y. Na deze code krijg ik geen error, maar goed... Dit is niet wat ik wil.
Ik wil de hele lijst op de JPanel te zien krijgen. De lijst met titels is iig groter dan 511.

Is er een of andere manier waardoor ik toch de hele lijst op de panel krijg?
Op een of andere manier moet ik die ArrayIndexOutOfBoundsException omzeilen, maar ik zou echt niet weten hoe.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Wat is c, het lijkt er nl op dat c.gridy niet groter kan zijn dan 511?

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
GridBagConstraints c = new GridBagConstraints();

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

De Java API doc verteld mij het volgende over gridy:
quote: Java API documentation
Specifies the cell at the top of the component's display area, where the topmost cell has gridy=0. The value RELATIVE specifies that the component be placed just below the component that was added to the container just before this component was added.

The default value is RELATIVE. gridy should be a non-negative value.
Als ik dit goed interpreteer hoef je dus helemaal niets met die gridy te doen. Hij plaatst een nieuw component nl. zelf al onder de laatst toegevoegde.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 21:55

Kees

Serveradmin / BOFH / DoC
Wil je perse gridbag layout hiervoor gebruiken?
Is een boxlayout niet veel handiger voor wat jij wil doen?

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Verwijderd

Topicstarter
NetForce1 schreef op maandag 24 januari 2005 @ 20:18:
De Java API doc verteld mij het volgende over gridy:

[...]

Als ik dit goed interpreteer hoef je dus helemaal niets met die gridy te doen. Hij plaatst een nieuw component nl. zelf al onder de laatst toegevoegde.
Helaas :'( Dit heeft ook niet geholpen.
Ik heb gridy eruit gehaald, maar ik krijg nog steeds dezelfde foutmelding.

Verwijderd

Topicstarter
Kees schreef op maandag 24 januari 2005 @ 20:24:
Wil je perse gridbag layout hiervoor gebruiken?
Is een boxlayout niet veel handiger voor wat jij wil doen?
GridBayLayout vind ik zelf erg handig.
Maar als het niet anders kan, dan zal ik idd een andere layout moeten nemen.
Maar betekent dit dan dat het gewoon niet mogelijk is met een GridBagLayout?
Want dat zou wel erg raar zijn.

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 15-05 21:49
Een GridBagLayout kan maximaal 512 objecten bevatten, kijk in de source van GridBagLayout en daar zie je het volgende:
/* Maximum number of grid positions */
protected static final int MAXGRIDSIZE = 512;

Dus als je meer dan 512 objecten aan je JPanel met GridBagLayout toevoegt, krijg je de ArrayIndexOutOfBoundsException exception.

Een oplossing zou kunnen zijn dat je de JLabels over meerdere JPanels verdeelt. Of misschien kan je de titels wel in een JTextArea zetten?

Zie deze link waar iemand hetzelfde probleem heeft.

Verwijderd

Topicstarter
The Fox NL schreef op maandag 24 januari 2005 @ 20:29:
Een GridBagLayout kan maximaal 512 objecten bevatten, kijk in de source van GridBagLayout en daar zie je het volgende:
/* Maximum number of grid positions */
protected static final int MAXGRIDSIZE = 512;

Dus als je meer dan 512 objecten aan je JPanel met GridBagLayout toevoegt, krijg je de ArrayIndexOutOfBoundsException exception.

Een oplossing zou kunnen zijn dat je de JLabels over meerdere JPanels verdeelt. Of misschien kan je de titels wel in een JTextArea zetten?

Zie deze link waar iemand hetzelfde probleem heeft.
Idd joh... toch raar dat ze daar een limiet op hebben gezet.
Goed... dan moet ik maar een andere oplossing zoeken.
Pagina: 1