hoofdpagina

Vaak gestelde vragen over Java

Inhoud

1. Hello, world (Hier ben ik)

1.1 Wat betekent de foutmelding De opdracht of bestandsnaam is onjuist ?

Probleem: om het programma "Hier ben ik" te compileren, typ je javac Hier.java, maar je krijgt bovenstaande foutmelding van MS-DOS.

Dit betekent dat MS-DOS niet weet waar hij de java-compiler kan vinden. Waarschijnlijk moet je de omgevingsveranderlijke PATH uitbreiden met een verwijzing naar c:\jdk1.3\bin (of een andere map, naargelang waar je de JDK geïnstalleerd hebt).

1.2 Wat betekent de foutmelding Exception in thread "main" java.long.NoclassDefFound Error ?

Probleem: het programma "Hier ben ik" compileert zonder fouten, maar als je het probeert uit te voeren, krijg je de bovenstaande melding. Dit betekent letterlijk dat de runtime-omgeving moeite heeft met het vinden van je klasse.

Vaak wordt deze foutmelding veroorzaakt door een typefout in de naam van de klasse (hoofdletters/kleine letters), de naam van de methode main (geen hoofdletters !) of de parameter-declaratie van main (niets anders dan (String[] argv)). Vergelijk je broncode nauwkeurig met het voorbeeld op blz. 16.

Let ook op het onderscheid hoofdletters/kleine letters bij het commando waarmee je het programma oproept, bijvoorbeeld java Hier

Controleer of de compiler wel degelijk een bestand heeft gemaakt met de naam Hier.class (in MS-DOS kan je dit doen met de opdracht dir) Als zo'n bestand niet aanwezig is, kan het programma ook niet worden uitgevoerd. Er is dan wellicht reeds iets foutgegaan bij het compileren.

Het kan zijn dat een ander programma de omgevingsveranderlijke CLASSPATH een waarde heeft gegeven. In MS-DOS kan je dit controleren met de opdracht SET. Maak dit ongedaan of, als je dat programma vaak nodig hebt, voeg vooraan in de veranderlijke de tekst .; (een puntje gevolgd door een kommapunt) toe. In MS-DOS kan je dit doen door veranderingen aan te brengen in het bestand AUTOEXEC.BAT

2. Omzetting van tekst naar getallen

2.1 Hoe zet ik een String die uit een reeks cijfers bestaat, om naar het bijhorende gehele getal ?

De klasse Integer heeft een statische methode parseInt die precies dat doet.

Een voorbeeld van het gebruik van deze methode vind je op blz. 49.

Er bestaat ook een variant van deze methode met twee parameters, die andere talstelsels dan het decimale kan verwerken (bijvoorbeeld binair, octaal, hexadecimaal).

2.2 Hoe zet ik een String die uit een reeks cijfers en een decimale punt bestaat, om naar het bijhorende getal met vlottende komma ?

De klasse Double heeft een statische methode parseDouble die precies dat doet.

Een voorbeeld van het gebruik van deze methode vind je op blz. 22.

Deze methode was nog niet beschikbaar in versie 1.1 van de Java Runtime Environment, dus ze is niet zo geschikt voor gebruik in Internet-applets. Je kan in plaats daarvan een object van het type Double construeren aan de hand van de constructor Double(String), en op dat object de niet-statische methode doubleValue() toepassen. Zie bijvoorbeeld blz. 44.

3. Compilerboodschappen

3.1 Note: XXX.java uses or overrides a deprecated API.

Je gebruikt een methode of een attribuut van een of andere klasse die door de makers ervan bestempeld is als "verouderd". Je programma zal nog steeds werken, dit is slechts een raadgeving. Wil je graag de meest recente versie van de methoden en attributen gebruiken, ga dan als volgt tewerk:

  1. Hercompileer je programma met de compileroptie -deprecation; dit vertelt je over welke methode of welk attribuut het gaat;
      javac XXX.java -deprecation
    
  2. Raadpleeg de online-documentatie van de desbetreffende klasse om te kijken wat de "moderne" versie is om datgene te doen wat je wou doen.

Om zelf methoden of attributen als "verouderd" te markeren voor de programmeurs die jouw klassen gebruiken, kun je gebruik maken van de javadoc-tag @deprecated (zie blz. 166).

4. Grafische gebruikersinterfaces (AWT en Swing)

4.1 Kan ik een tekstveld rechts uitlijnen (aligneren) ?

De meeste toepassingen lijnen getallen standaard rechts uit, teksten links. Hoe kan je getallen rechts uitlijnen in een tekstveld ?

In de Abstract Window Toolkit is de tekst in een TextField altijd links uitgelijnd: pech. (Bij een Label kun je de setAlignment(Label.RIGHT) gebruiken.)

In Swing is de tekst in een JTextField standaard links uitgelijnd, maar je kan dit veranderen met de methode-aanroep

  mijnTekstveld.setHorizontalAlignment(JTextField.RIGHT);

Als je om een of andere redenen geen Swing wil gebruiken (bijvoorbeeld achterwaartse compatibiliteit van een applet), dan is het een beetje behelpen. Met de methoden van de klasse FontMetrics kan je de breedte van de tekst berekenen, en het benodigde aantal spaties zelf vooraan toevoegen. Dat wordt iets makkelijker als je kiest voor een lettertype met vaste breedte zoals Courier.

hoofdpagina