![](/img/trans.png)
[英]App crashes because of attempt to invoke virtual method ' ' on a null object reference
[英]Android app crashes with “Attempt to invoke virtual method on a null object reference”
我有一個帶有 3 個選項卡或片段的“底部導航欄應用程序”。 在第一個片段上,我有一個可以繪制的 PaintView。 繪圖效果很好。 但我正在嘗試連接一個通過選項菜單下拉調用的清晰屏幕 function。 當我 select 從選項菜單中選擇擦除屏幕時,應用程序崩潰並出現以下錯誤:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.mobile_testapp_android_2.ui.home.PaintView.clearView()' on a null object reference
這是選項菜單的 HomeFragment.java 文件中的代碼:
public class HomeFragment extends Fragment {
private PaintView paintView;
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
PaintView homeFragmentView = new PaintView(requireContext());
return homeFragmentView;
}
//Enable Clear Menu in this fragment
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//inflate menu
inflater.inflate(R.menu.menu_swipes, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Handle menu item clicks here
int id = item.getItemId();
if (id == R.id.action_clearScreen) {
//do clear function here:
paintView.clearView();
Toast.makeText(getActivity(), "Clear Screen", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
}
這是 PaintView 文件中的代碼,其中包含我試圖調用的 clearView() 方法:
public class PaintView extends View {
public ViewGroup.LayoutParams params;
private Path myPath = new Path();
private Paint brush = new Paint();
private boolean forceClear;
public PaintView(Context context) {
super(context);
brush.setAntiAlias(true);
brush.setColor(Color.MAGENTA);
brush.setStyle(Paint.Style.STROKE);
brush.setStrokeJoin(Paint.Join.ROUND);
brush.setStrokeWidth(8f);
params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
//Clear function
public void clearView() {
try {
forceClear = true;
invalidate();
} catch (Exception ee) {
Log.d("Clear Button: ", "We blew up!! " + ee);
}
}
我認為問題是由於我在 HomeFragment.java 文件中實例化 PaintView class 的方式,但我沒有得到任何編譯錯誤,我可以使用點表示法paintView.clearView()
來訪問其中的方法PaintView class 就好了。
任何關於我做錯了什么的提示將不勝感激!
以下是一些屏幕截圖:
嘗試使用您定義的變量:
// PaintView homeFragmentView = new PaintView(requireContext());
this.paintView = new PaintView(requireContext());
看起來您聲明了,但從未實際實例化paintView
成員變量。
嘗試這個:
private PaintView paintView;
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
this.paintView = new PaintView(requireContext());
return this.paintView;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.