Próbuję stworzyć funkcje w MainActivity, która przekaże swoje widoki do innej klasy. Jeśli się nie mylę powoduje to błąd w aplikacji. Zapis z logów :
FATAL EXCEPTION: main
Process: com.example.pc.connect3, PID: 15077
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pc.connect3/com.example.pc.connect3v2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50)
at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29)
at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:29)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:197)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at com.example.pc.connect3v2.MainActivity.dajpole1(MainActivity.java:397)
at com.example.pc.connect3v2.AI.<init>(AI.java:17)
at com.example.pc.connect3v2.zmienneGlobalne.<init>(zmienneGlobalne.java:12)
at com.example.pc.connect3v2.MainActivity.onCreate(MainActivity.java:471)
at android.app.Activity.performCreate(Activity.java:6942)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
W szczegółach to stworzyłem nową klasę, która ma być odpowiedzialna za ruch koputera
package com.example.pc.connect3v2;
import android.widget.ImageView;
import java.util.Random;
/**
* Created by PC on 06.09.2018.
*/
public class AI {
String kto;
int glownaFunkcja=1;
int podfunkcja=0;
MainActivity klasaGlowna = new MainActivity();
ImageView pole1=klasaGlowna.dajpole1();
ImageView pole2=klasaGlowna.dajpole2();
ImageView pole3=klasaGlowna.dajpole3();
ImageView pole4=klasaGlowna.dajpole4();
ImageView pole5=klasaGlowna.dajpole5();
ImageView pole6=klasaGlowna.dajpole6();
ImageView pole7=klasaGlowna.dajpole7();
ImageView pole8=klasaGlowna.dajpole8();
ImageView pole9=klasaGlowna.dajpole9();
public void setKto(String kto1)
{
kto=kto1;
}
public String dajKto()
{
return kto;
}
public int dajGlownafunkcje()
{
return glownaFunkcja;
}
public int dajpodfunkcje()
{
return podfunkcja;
}
public void setGlownaFunkcja(int gfunkcja)
{
glownaFunkcja=gfunkcja;
}
public void setPodfunkcja(int funkcja)
{
podfunkcja=funkcja;
}
public void gracz1x1()
{
Random random = new Random();
int liczba = random.nextInt(4);
if(liczba==0)
{
pole1.animate().rotation(180);
pole1.setImageResource(R.drawable.krzyzyk);
}else if (liczba==1)
{
pole3.animate().rotation(180);
pole3.setImageResource(R.drawable.krzyzyk);
}else if (liczba==2)
{
pole7.animate().rotation(180);
pole7.setImageResource(R.drawable.krzyzyk);
}else if (liczba==3)
{
pole9.animate().rotation(180);
pole9.setImageResource(R.drawable.krzyzyk);
}
}
public void FunkcjeAI()
{
if(kto=="gracz")
{
if(glownaFunkcja==1)
{
if(podfunkcja==1)
gracz1x1();
}
}else if (kto=="komputer")
{
;
}else
{
System.out.println("Nie wybrany ani komputer ani gracz");
}
}
}
Chciałem wypróbować czy działa na razie z tylko jedną możliwością. Niestety aplikacja od razu się zamyka a ja nie wiem gdzie jest błąd bo przecież wysłałem zmienne poprawnie. Kod na dole:
public ImageView dajpole1()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView4);
return pole1;
}
public ImageView dajpole2()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView5);
return pole1;
}
public ImageView dajpole3()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView6);
return pole1;
}
public ImageView dajpole4()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView7);
return pole1;
}
public ImageView dajpole5()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView8);
return pole1;
}
public ImageView dajpole6()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView9);
return pole1;
}
public ImageView dajpole7()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView10);
return pole1;
}
public ImageView dajpole8()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView11);
return pole1;
}
public ImageView dajpole9()
{
ImageView pole1 = (ImageView) findViewById(R.id.imageView12);
return pole1;
}
I jeszcze trochę tego co miało się stać w mainActivity
ImageView poleNaPlan = (ImageView) pole;
if(zmienne.ilGraczy==1) {
if (komputer.dajKto() == "gracz") {
if (komputer.dajGlownafunkcje() == 1) {
if (komputer.dajpodfunkcje() == 0) {
if (poleNaPlan.getTag() == "1")
komputer.setPodfunkcja(1);
}
}
}
komputer.FunkcjeAI();
}
//zmienne to jeszcze inna klasa ale w niej nie było wcześniej problemów