unklares Verhalten nach Instanzierung neuer Klasse

Diskutiere unklares Verhalten nach Instanzierung neuer Klasse im Java Basics - Anfänger-Themen Bereich.
G

ghostwhisperer

Hallo! War leider ewig nicht da, geschweige denn am Programmieren.
Nun steh ich mit einem - vermutlich simplen - Problem total auf dem Schlauch. Ich finde einfach keinen Hinweis woran es liegen könnte..

Ich habe in Android eine zusätzliche Klasse eingefügt. Instanzieren scheint zu gehen. Aber schon der erste Zugriff auf Membervariablen führt
zum Absturz. Ich weiß nicht, ob dies eine Nullreferenz-Exception ist, da ich auch versuche dies vorher abzufangen.
PS: Ich hab im MainActivity-Code viel weggelassen, nicht wundern. Es geht dort nur um die fett markierten Zeilen!

Java:
public class Environment_State {

    private class Envir_Data {
        public boolean Free;
        public boolean State;
        public String Name;
        public String onText;
        public String offText;
    }
    private Envir_Data[] Hardware_State;

    public Environment_State()
    {
        Hardware_State = new Envir_Data[100];
    };

    public void ReInit()
    {
        int index=0;
        if(Hardware_State!=null) {
            for (index = 0; index < 100; index++) {
                Hardware_State[index].Free = true;
                Hardware_State[index].State = false;
                Hardware_State[index].onText = "on";
                Hardware_State[index].offText = "off";
            }

            Hardware_State[0].Name = "WLAN";
            Hardware_State[1].Name = "Ton";
            Hardware_State[2].Name = "Bluetooth";
            Hardware_State[3].Name = "Taschenlampe";
            Hardware_State[4].Name = "Offline-Modus";
        }
    }
}
Wenn ich nur die Instanz anlege geht der Android-Emulator. Sobald ich ReInit hinzufüge stürzt die App-Emulation ab.

Java:
public class MainActivity extends AppCompatActivity {

    
    [B]Environment_State Hardware_State;[/B]
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
       [B]Hardware_State = new Environment_State();
        Hardware_State.ReInit();[/B]
        
            }
        });
    }
Die normale Anzeige im Editor zeigt keinerlei Fehler an..

Danke sehr für jeden Hinweis! Torsten!
 
H

httpdigest

Du musst in jedem der 100 Einträge im Array `Hardware_State` noch eine neue Instanz von `Envir_Data` speichern, bevor du deren Felder setzen kannst. Aktuell ist das Array `Hardware_State` zwar 100 Elemente groß, allerdings steht in jedem der 100 Elemente bisher `null` und keine Instanz von `Envir_Data`.
 
G

ghostwhisperer

Danke sehr! Jetzt gehts. Klassen in Arrays so zu nutzen war ich bisher von C++ her nicht gewohnt..
 
H

httpdigest

Naja, in C++ entspräche die Arraydeklaration ja:
C++:
Envir_Data* Hardware_State[];
Hier brauchst du also auch explizite Instanziierung und Zuweisung an die Arrayelemente, um noch Polymorphie zu gewährleisten. Du könntest ja auch Instanzen von `Envir_Data` abgeleiteten Klassen in Java verwenden. Das geht in C++ nur, wenn du die zusätzliche Indirektion eingehst und nicht `Envir_Data HardwareState[]` schreibst (was von dieser C++-Semantik her in Java gar nicht möglich ist).
 
Thema: 

unklares Verhalten nach Instanzierung neuer Klasse

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben