WebHU - Programozási kérdések és válaszok

NullPointerException, amikor értékeket adunk át / rendelünk hozzá az osztályaimhoz

A program futtatásakor ezt a hibát kapom:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Course.enroll(Course.java:50)
at AppCoreProcessor.enroll(AppCoreProcessor.java:62)
at CourseWindow.actionPerformed(CourseWindow.java:91)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

Ez a kód generálja a kivételt, amelyet a kurzusosztályomban implementáltam:

    public static void enroll(Student student){
        student.setStatus(true);
        enrollees.add(student);
    }

Ez az AppCoreProcessor osztályom kódja, amely meghívja a metódust:

    public static void enroll(int modelRow, int index) {
    oldCourse.get(modelRow).enroll(oldStudent.get(index));

    }

És végül ez a kód, amely meghívja a bejelentkezési metódust az AppCoreProcessor osztályomból:

   public void actionPerformed(ActionEvent event) {

        if(event.getSource()== enrollTo){
        AppCoreProcessor.enroll(modelRow,index);
        }

Itt arra törekszem, hogy a kiválasztott indexet megkapom a táblámban, amely pontosan ugyanaz az index, mint az ArrayList hallgatóimban, és ugyanígy a kiválasztott indexet természetesen egy másik táblából. Most ezeket az értékeket fogom használni az enroll(int,int) statikus metódus meghívására az alkalmazásprocesszor osztályból. és egyszerűen nem értem, miért kapom a NullPointerException-t? kérlek segítsetek, még csak új vagyok a java-ban.

Szerkesztés* Ez az én ArrayList hallgatóim és kurzusom megvalósítása,

    public class AppCoreProcessor {
private static ArrayList<Student> Student = ReadAndWrite.getDefaultStudentArrays();
private static ArrayList<Course> Course = ReadAndWrite.getDefaultCourseArrays();

és ezeket a tömböket adatként használom a JTable-jaimban. És mielőtt a beiratkozási módszert használtam volna, készítettem egy System.out.println utasítást, hogy megjelenítsem a hallgatót egy adott indexen, és valóban megjeleníti az értéket, ellenőriztem, hogy a kurzus nem null és a hallgató nem null, de amikor meghívom a kurzusosztályom enroll(Student s) metódusát, hogy beírjam a hallgatót abba a kurzusba, akkor csak az Exception ? ami nem tudom miért?

16.07.2013


Válaszok:


1

Kérdések, amiket felteszek magamnak ilyen helyzetekben:

Az Ön által közzétett veremkövetés szerint az NPE az 50. sorban van elindítva. Ez a student.setStatus(true); sor vagy a enrollees.add(student); sor?

Ha az 50. sor a student.setStatus(true); sor, akkor a student paraméter null. Ez akkor fordulhat elő, ha a oldStudent.get(index) nulla, azaz: a oldStudent lista a index pozícióban egy null értéket tartalmaz. Mennie kell ahhoz a kódhoz, amely értéket küld a listába, és ellenőrizze, hogy nem nyomja meg a nullákat. Vegye figyelembe, hogy maga a oldStudent lista nem nulla. Ha így lenne, a kivételt ez a oldCourse.get(modelRow).enroll(oldStudent.get(index)); sor dobta volna ki.

Ha az 50. sor a enrollees.add(student); sor, akkor ellenőrizze a helyet, ahol a enrollees mező hozzá van rendelve, és győződjön meg arról, hogy nincs-e hozzárendelve a null-hez. Itt az első eset ellentéte: ez nem a listán belüli érték, hanem maga a lista.

16.07.2013
  • Hurrá! , Igen, igazad van! , Nem deklaráltam az Arraylist beiratkozottakat a Course osztályomban, ezért NULL! , nagyon köszönöm, hogy ezt tudatosítottad bennem. btw. az 50. sor a beiratkozottak.add(student) . 16.07.2013

  • 2

    Vagy student értéke null VAGY enrollees értéke null. Győződjön meg arról, hogy mindkettő megfelelően inicializálva van, vagy végezzen null ellenőrzést

    public static void enroll(Student student){
        if(student != null && enrollees != null) {
           student.setStatus(true);
           enrollees.add(student);
        }
    }
    
    16.07.2013
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..