[JAVA] Conversie Integer naar String in een label

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Goeieavond

Ik ben als oefening een programma aan het maken waarin ik mijn wachtwoorden in opsla. Ik wil ook steeds laten zien hoeveel wachtwoorden er in de database zitten, dus heb ik een label erop geplaatst en de tekst ervan ingesteld op een query naar de database. De methode domeinController.AmountOfAccounts() geeft een getal van het type int terug en wordt in het label gezet met behulp van een Integer.toString(), echter krijg ik bij het uitvoeren een NullPointerException op deze regel. Wanneer ik het getal weergeef met behulp van een JOptionPane dan werkt het naar behoren.

Mijn vermoeden is dat er een fout veroorzaakt wordt met betrekking tot het verschil tussen een Int en een Integer, maar ik zou er mijn vinger niet op kunnen leggen wat het is, noch er een oplossing voor vinden.

Ik heb geprobeerd om enkele andere manieren van casten erop los te laten (.toString(), String.ValueOf(),..) maar het bood geen oplossing.

Kan iemand me verder helpen hier?

Java:
1
2
3
4
5
private void getTableModel(){
        // Irrelevante code
        JOptionPane.showMessageDialog(null, "There are currently " + domeinController.AmountOfAccounts() + " accounts in the database");
        lblAmountOfAccounts.setText(Integer.toString(domeinController.AmountOfAccounts()));
    }


Java:
1
2
3
4
5
6
7
public int AmountOfAccounts(){
        return PersistentieController.getInstance().ReturnAmountOfAccounts();
    }

public int ReturnAmountOfAccounts(){
        return accountMapper.ReturnAmountOfAccounts();
    }


Java:
1
2
3
4
5
6
7
8
9
10
11
private static final String QUERY_ALL_ACCOUNTS = "SELECT * FROM Accounts";
private static final String QUERY_COUNT_ALL_ACCOUNTS = "SELECT COUNT(*) FROM Accounts";
int amountOfAccounts = 0;

public int ReturnAmountOfAccounts(){
    ResultSet resultSet = statement.executeQuery(QUERY_ALL_ACCOUNTS);
    resultSet = statement.executeQuery(QUERY_COUNT_ALL_ACCOUNTS);
    resultSet.next();
    amountOfAccounts = resultSet.getInt(1); 
    return amountOfAccounts;
}


Voorbeeld error:
Afbeeldingslocatie: http://i.imgur.com/JRshF.png
Afbeeldingslocatie: http://i.imgur.com/7jWfJ.png

Groeten

Streaming History


Acties:
  • 0 Henk 'm!

  • drice
  • Registratie: December 2000
  • Laatst online: 11-07 19:30

drice

Loading...

Een primair type zoals int hoef je niet via Integer.toString om te zetten maar gewoon int+"" voor het gemak.
Daarnaast is het makkelijk als je de resultset even opslaat dan hoef je niet twee keer een query uit te voeren voor hetzelfde resultaat
int number = domeinController.AmountOfAccounts()

Did you know that IF is a middle word in life. "Ja maar wie ben ik om aan mezelf te twijfelen"


Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
Integer.toString(int) hoort geen NPE te geven...is die stacktrace volledig? En welke regel is 327 precies?
Is 'lblAmountOfAccounts' al geinitialiseerd? Of bestaat dat object nog niet?

Verder nog een wazig iets, twee queries uitvoeren en de eerste resultaten wegmikken is niet heel efficient:
Java:
1
2
ResultSet resultSet = statement.executeQuery(QUERY_ALL_ACCOUNTS);//Deze regel mag wel weg...
resultSet = statement.executeQuery(QUERY_COUNT_ALL_ACCOUNTS); 

[ Voor 19% gewijzigd door Vaudtje op 25-10-2012 17:34 ]

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • wjvds
  • Registratie: Mei 2012
  • Laatst online: 12:35
Volgens mij gaat er iets mis met lblAmountOfAccounts. Dit omdat Integer.toString() geen NPE kan geven en de variabele domeinController al eerder (zonder problemen lijkt me) is gebruikt.

Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
drice schreef op donderdag 25 oktober 2012 @ 17:27:
Een primair type zoals int hoef je niet via Integer.toString om te zetten maar gewoon int+"" voor het gemak.
Daarnaast is het makkelijk als je de resultset even opslaat dan hoef je niet twee keer een query uit te voeren voor hetzelfde resultaat
int number = domeinController.AmountOfAccounts()
Dan veronderstel ik dat je dit bedoeld:

Java:
1
2
3
JOptionPane.showMessageDialog(null, "There are currently " + domeinController.AmountOfAccounts() + " accounts in the database");
int AmountOfAccounts = domeinController.AmountOfAccounts();
lblAmountOfAccounts.setText("There are currently " + AmountOfAccounts + " accounts in the database");


Zoiets had ik eerder al geprobeerd, maar dit geeft nog steeds een NullPointerException.
Vaudtje schreef op donderdag 25 oktober 2012 @ 17:30:
Een int hoort geen NPE te geven...is die stacktrace volledig? En welke regel is 327 precies?

Verder nog een wazig iets, twee queries uitvoeren en de eerste resultaten wegmikken is niet heel efficient:
Java:
1
2
ResultSet resultSet = statement.executeQuery(QUERY_ALL_ACCOUNTS);//Deze regel mag wel weg...
resultSet = statement.executeQuery(QUERY_COUNT_ALL_ACCOUNTS); 
De regel waarop de NullPointer steeds optreed is die waarin het label een waarde krijgt toegewezen.
Dit is de stacktrace zonder dat ik er iets aan gewijzigd heb dus ik ga er vanuit dat deze volledig is.

Er is inderdaad een overbodige query, het viel me pas op toen ik m'n post zonder overlas. Het is verwijderd bij deze ;)

Edit:

Java:
1
2
3
4
5
6
7
{
    lblAmountOfAccounts = new JLabel();
    getContentPane().add(lblAmountOfAccounts);
    lblAmountOfAccounts.setBounds(55, 118, 417, 21);
    lblAmountOfAccounts.setFont(new java.awt.Font("Sylfaen",3,14));
    lblAmountOfAccounts.setPreferredSize(new java.awt.Dimension(400, 20));
}


Aangezien het label met behulp van de WYSIWYG editor erop is geplaatst, zou het normaal gezien toegevoegd moeten zijn.

[ Voor 11% gewijzigd door speedzor op 25-10-2012 17:41 ]

Streaming History


Acties:
  • 0 Henk 'm!

  • aegis
  • Registratie: Augustus 2002
  • Laatst online: 11-07 00:59
is lblAmountOfAccounts niet gewoon nog null?

https://bettyskitchen.nl


Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
Debuggen. Zet een breakpoint op de gewraakte regel en kijk wat er allemaal null is mbv watches of quick inspection.
En waar staat dat code blok waarin de label wordt geinitialiseerd? Is dat al aangeroepen?

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • wjvds
  • Registratie: Mei 2012
  • Laatst online: 12:35
En waar staat die code over lblAmountOfAccounts? Weet je zeker dat die is uitgevoerd voordat je de tekst erop wil zetten?

Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
wjvds schreef op donderdag 25 oktober 2012 @ 17:47:
En waar staat die code over lblAmountOfAccounts? Weet je zeker dat die is uitgevoerd voordat je de tekst erop wil zetten?
Bedankt iedereen! De fout lag hem er inderdaad in dat het label pas geïnitialiseerd werd nadat het tekstveld al werd opgevuld. Door de code wat hoger te plaatsen wordt het correct uitgevoerd.

Bij het debuggen zag je inderdaad ook dat lblAmountOfAccounts de waarde null had op dat moment in het programma.
Ik had inderdaad al zelf opgemerkt dat mijn consistentie te wensen overliet en ik de naamgevingen opnieuw zou moeten bekijken. Bedankt voor deze link, dan doe ik het direct zoals het moet!

Streaming History


Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
Debuggen is erg belangrijk, wen jezelf eraan om het vaak te doen.
Dan is die msgbox ook niet meer nodig (kijk sowieso ook eens naar loggers, of in noodgevallen System.out.println() ).

[ Voor 29% gewijzigd door Vaudtje op 25-10-2012 17:57 ]

In deeze zin staan drie fauten

Pagina: 1