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).
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
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).
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.
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:
-deprecation
; dit vertelt je over welke
methode of welk attribuut het gaat;
javac XXX.java -deprecation
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).
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.