Hei Petter!
On Monday, 3 February 2025 at 21:41:02 +01:00, Petter Reinholdtsen <pere@hungry.com> wrote:
[Ole Aamot]
Feilen ser uansett ut til å skyldes at storagePath er null i toString()-metoden. En mulig årsak er at setStoragePath(Path storagepath)-metoden ikke faktisk setter storagePath, men i stedet prøver å sette det til this.storagePath.toString(), som fortsatt er null. Mulig løsning: Endre setStoragePath-metoden i DocumentObject slik at den bruker riktig parameter:
Det du skriver gir ikke mening, da DocumentObject.setStoragePath() allerede tar Path storagepath. storagePath eller storagepath? Ser du skriver med liten 'p' i storagepath i koden din. Er storagepath klassen eller variabelen din?
I Java er variable case-sensitive. En skriver klasser som StoragePath og variabler som storagePath.
Her er et eksempel på hvordan du skriver en StoragePath klasse som tar dir og f som argumenter. public class StoragePath { public static void StoragePath(String[] args) throws Exception { File dir = new File("/data/"); File f = new File(dir, "nikita_arkiv");
/* Bygg "/data/nikita_arkiv" for å vise at Java ikke begrenser tilgangen */ byte[] buf = new byte[1024]; try (FileInputStream s = new FileInputStream(f)) { int len = s.read(buf); System.out.println(new String(buf, 0, len)); }
/* Now try to normalise the path -- crashes here */ System.out.println(f.toPath()); } }
Den eksisterende implementasjonen bruker this.storagePath.toString(), som kan føre til en NullPointerException hvis this.storagePath er null.
Hvor? Ser ingen tegn til slikt noe sted i koden. Hvis du mener at jeg har gjort en skrivefeil, kan du bare påpeke det direkte uten antydninger om at det er en test.
Mulig jeg ser spøkelser på høylys dag, men svaret ditt ga meg følelsen av å lese tekst skrevet av en sludderbot. Er det et argument for å ikke prøve å løse et teknisk problem?
Jeg kan si at jeg fikk følelsen av at du har forsøkt å bygge Java-koden med en selvbygd pre-openjdk-21 installasjon på Debian 11, men det løser ikke saken.
Feilsøking handler om å løse konkrete problemer, ikke å spekulere i motivasjoner.
La oss holde oss til det tekniske. Har du et spesifikt eksempel der this.storagePath.toString(); faktisk fører til en feil?
Jeg ser at du peker på this.storagePath.toString() som feil løsning, men jeg finner ikke hvor det skjer i koden.
Start med å bestemme hva storagepath er. Er storagepath en klasse, så skriv StoragePath, er det er en variabel, skriv storagePath, slik vi lærte på IN-105.
setStoragePath(Path storagePath) tar en Path som parameter, og jeg sørger for at this.storagePath blir satt direkte til den verdien med uttrykket
this.storagePath = this.storagePath.toString() Kan det være at du må bygge opp hele path'en til lagringsstien storagePath ved hjelp av klassen StoragePath, slik at den ikke er null?
Hvis du har en spesifikk kodelinje eller en test som feiler, setter jeg pris på å få se den, så kan Thomas kanskje gå dypere inn i problemet.
Mvh, Ole