Versuch, eine virtuelle Methode bei einem Nullobjekt-Referenzfehler in Java aufzurufen
Dieses Tutorial zeigt, wie Sie den Fehler Versuch, eine virtuelle Methode für eine Nullobjektreferenz aufzurufen
in Java beheben.
der Fehler Versuch, eine virtuelle Methode für eine Nullobjektreferenz aufzurufen
in Java
Beim Arbeiten an einer Android-Anwendung kann der Fehler Versuch, eine virtuelle Methode auf einer Nullobjektreferenz aufzurufen
auftreten, eine Art NullPointerException
. Immer wenn wir versuchen, eine Methode mit einem Nullobjekt aufzurufen, wird dieser Fehler ausgegeben.
Hier ist ein auf der Android-Plattform basierendes System, das die NullPointerException
mit der Beschreibung Versuch, virtuelle Methode auf eine Nullobjektreferenz aufzurufen
wirft.
Dieses Beispiel hat drei verschiedene Java-Klassen.
Main_Player.java
:
package delftstack;
import javax.naming.Context;
public class Main_Player {
private Context AppContext;
private SharedPreferences SharedPreferencesSettingsU;
private SharedPreferences.Editor PreferencesEditorU;
private static final int PREFERENCE_MODE = 0;
private static final String UNIQUE_PREFERENCES_FILE = "DemoApp";
public Player(Context AppContext, String Player_Name) {
this.AppContext = AppContext;
Save_Name(Player_Name);
}
public void Save_Name(String nValue) {
SharedPreferencesSettingsU =
AppContext.getSharedPreferences(UNIQUE_PREFERENCES_FILE, PREFERENCE_MODE);
PreferencesEditorU = SharedPreferencesSettingsU.edit();
PreferencesEditorU.putString("keyName", nValue);
PreferencesEditorU.commit();
}
public String Get_Name(Context DemoContext) {
SharedPreferencesSettingsU =
DemoContext.getSharedPreferences(UNIQUE_PREFERENCES_FILE, PREFERENCE_MODE);
String PlayerName = SharedPreferencesSettingsU.getString("keyName", "ANONYMOUS");
return PlayerName;
}
}
Spielername.java
:
package delftstack;
import javax.naming.Context;
public class Player_Name extends Activity {
private EditText Player_Name;
private Player M_Player;
public static Context AppContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player_name);
AppContext = this;
Player_Name = (EditText) findViewById(R.id.etName);
}
public void onC_Confirm(View btnclick) {
M_Player = new Player(AppContext, String.valueOf(Player_Name.getText()));
// M_Player.saveName();
Intent intent = new Intent(Player_Name.this, Game_Play.class);
startActivity(intent);
}
public void onC_testShPref(View btnclick) {
Intent intent = new Intent(Player_Name.this, Game_Play.class);
startActivity(intent);
}
Game_Play.java
:
public class Game_Play extends Activity {
private TextView Welcome_Player;
private ListView Games_Created;
private Player M_Player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_game);
Welcome_Player = (TextView) findViewById(R.id.tvPlayer_Name);
Welcome_Player.setText("Welcome Back Player, " + String.valueOf(M_Player.getName(this)) + " !");
Games_Created = (ListView) findViewById(R.id.listCreatedGames);
Games_Created.setEmptyView(findViewById(R.id.tvNoGames));
}
}
Wir führen das obige System auf einer Android-Plattform aus, die einen Fehler auslöst, der durch die java.lang.NullPointerException: Attempt to invoke virtual method
verursacht wird.
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Main_Player.getName()' on a null object reference
at plp.cs4b.thesis.drawitapp.Game_Play.onCreate(Game_Play.java:20)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
... 10 more
Der Fehler tritt in der folgenden Codezeile in der Klasse Game_Play.java
auf.
Welcome_Player.setText("Welcome Back Player, " + String.valueOf(M_Player.getName(this)) + " !");
Dieser Fehler tritt auf, weil der M_Player
als Null
kommt. Schließlich ist es nicht initialisiert. Durch die Initialisierung können wir dieses Problem lösen.
Siehe die Lösung:
Game_Play.java
:
package delftstack;
public class Game_Play extends Activity {
private TextView Welcome_Player;
private ListView Games_Created;
// initialize the M_Player
private Player M_Player = new Main_Player(AppContext, "");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_game);
Welcome_Player = (TextView) findViewById(R.id.tvPlayer_Name);
Welcome_Player.setText("Welcome Back Player, " + String.valueOf(M_Player.getName(this)) + " !");
Games_Created = (ListView) findViewById(R.id.listCreatedGames);
Games_Created.setEmptyView(findViewById(R.id.tvNoGames));
}
}
Wenn Sie also an einem System wie diesem arbeiten, müssen Sie sicherstellen, dass eine Methode keinen null
-Wert aufruft; Andernfalls wird diese Ausnahme ausgelöst.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn FacebookVerwandter Artikel - Java Exception
- Ausnahme bei ungültiger Eingabe in Java
- Ausnahme im Hauptthread Java.Util.NoSuchElementException: Keine Zeile gefunden
- Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException
- Beheben Sie die Java.Net.BindException: Adresse wird bereits verwendet: Bind
- Der Java-Gateway-Prozess wurde beendet, bevor seine Portnummer gesendet wurde
- Java Throwable vs. Ausnahmeklasse