当前位置: 首页 > 知识库问答 >
问题:

跨越2类Java的呼叫方法[已关闭]

温凯
2023-03-14

我有3个类:主要游戏,ufoMovement(实际上是一个线程)和ufo本身(是的,在图片中是德语,但他们只是名字)。UfoMovement创建了一个Ufo,它有一个叫做“爆炸”的方法,其中组件会飞离。主游戏开始线程UFOMovement。这个游戏是一个小行星躲避游戏,你的ufo正在飞行,你必须躲避小行星,这意味着我必须从main类调用方法:Explomde,因为那个类检查碰撞,但是当我调用main类中的方法时,我得到一个javalang Nullpointer exepction,但是当我从UFOMovement调用它时,这个方法有效。是我做错了什么还是我错过了什么。ps:我才15岁,也刚接触堆栈溢出,所以请不要对我评头论足:)我也不知道为什么堆栈溢出关闭了我的问题,我给了很多细节堆栈跟踪:

Exception in thread "Thread-9" Exception in thread "Thread-1" java.lang.NullPointerException
    at GLOOP.Sys.warte(Sys.java:111)
    at GLOOP.Sys.warte(Sys.java:94)
    at UfoBewegung.tastaturSteuerung(UfoBewegung.java:33)
    at UfoBewegung.run(UfoBewegung.java:14)
java.lang.NullPointerException
    at GLOOP.Sys.warte(Sys.java:111)
    at GLOOP.Sys.warte(Sys.java:94)
    at Asteroid.bewegeDich(Asteroid.java:18)
    at ThreadAsteroid.run(ThreadAsteroid.java:20)

Bluej截图

main class:

import GLOOP.*;
public class UfoSpiel
{    
    private GLKamera kamera;
private GLLicht licht; 
private GLBoden weltall;
    
ThreadAsteroid asteroid = new ThreadAsteroid();
ThreadAsteroid2 asteroid2 = new ThreadAsteroid2();
ThreadAsteroid3 asteroid3 = new ThreadAsteroid3();
ThreadAsteroid4 asteroid4 = new ThreadAsteroid4();
ThreadAsteroid5 asteroid5 = new ThreadAsteroid5();
ThreadAsteroid6 asteroid6 = new ThreadAsteroid6();
ThreadAsteroid7 asteroid7 = new ThreadAsteroid7();
ThreadAsteroid8 asteroid8 = new ThreadAsteroid8();

UfoBewegung ufoBewegung = new UfoBewegung();
public UfoSpiel()
{
    weltall = new GLBoden("Weltall.jpg");
    kamera = new GLKamera();
    kamera.setzePosition(2000,2001,20);
    kamera.setzeBlickpunkt(2000,0,0);
    licht = new GLLicht();
           
    asteroid.start();
    asteroid2.start();
    asteroid3.start();
    asteroid4.start();
    asteroid5.start();
    asteroid6.start();
    asteroid7.start();
    asteroid8.start();
    ufoBewegung.start();
    
    System.out.println("Start!");
    
    // for(int i = 1; i>0; i++)
     // { 
        // System.out.println(Math.sqrt(Math.pow(asteroid.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid.gibZasteroid-ufoBewegung.gibZufo,2)));
        // if(Math.sqrt(Math.pow(asteroid.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid.gibZasteroid-ufoBewegung.gibZufo,2)) <= 1000)
        // {
            // System.out.println("Destroyed");
            // ufoBewegung.explodieredasUfo();                
        // }
   
    // }
    
    for(int i = 1; i>0; i++)
    {
        Kollision();
    }
}
public  void Kollision()
{
        if(Math.sqrt(Math.pow(asteroid.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid.gibZasteroid-ufoBewegung.gibZufo,2)) == 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
            Sys.warte();
        }
        else if(Math.sqrt(Math.pow(asteroid2.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid2.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid3.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid3.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid4.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid4.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid5.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid5.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid6.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid6.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid7.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid7.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
        else if(Math.sqrt(Math.pow(asteroid8.gibXasteroid-ufoBewegung.gibXufo,2)+Math.pow(asteroid8.gibZasteroid-ufoBewegung.gibZufo,2))== 100)
        {
            ufoBewegung.ufo.explodiere();
            System.out.println("Destroyed");
        }
}
}

Ufomovement:

    import GLOOP.*;
public class UfoBewegung extends Thread
{
    public GLTastatur tastatur;
    public Ufo ufo;
    double gibXufo;
    double gibZufo;
    public void run()
    {
        tastatur = new GLTastatur();
        ufo  = new Ufo(2000,75,0);
        ufo.explodiere();
        tastaturSteuerung();        
    }
    public void tastaturSteuerung(){
        //Tastatursteuerung wird hiermit ermöglicht.
        while(!tastatur.istGedrueckt('^')){
           if(tastatur.rechts()){
            ufo.bewegeRechts();
           }
           if(tastatur.links()){
            ufo.bewegeLinks();
           }
           if(tastatur.unten()){
            ufo.bewegeUnten();
           }
           if(tastatur.oben()){
            ufo.bewegeOben();
           }
           gibXufo = ufo.gibX();
           gibZufo = ufo.gibZ();
           Sys.warte();
        }
    }
    public void explodieredasUfo()
    {
        ufo.explodiere();
    }
    }

Ufo类:

import GLOOP.*;
public class Ufo
{
    GLKugel cockpit;
    GLTorus rumpf;
    GLZylinder boden;
    GLKegel fluegel1;
    GLKegel fluegel2;
    public Ufo(int x,int y,int z)
    {
       rumpf = new GLTorus(x,y,z,60,15);
       boden = new GLZylinder(x,y,z,70,5);
       cockpit = new GLKugel(x,y,z,50);
       fluegel1 = new GLKegel(x-90,y,z+70,25,80);
       fluegel2 = new GLKegel(x+90,y,z+70,25,80);
       cockpit.setzeSelbstleuchten(1,0.1,0);
       rumpf.drehe(90,0,0);
       rumpf.skaliere(1,2,1);
       rumpf.setzeFarbe(0.1,0.1,0.1);
       boden.drehe(90,0,0);
       boden.skaliere(1,2,1);
       boden.setzeFarbe(1,0.3,0);
       fluegel1.drehe(0,90,15);
       fluegel1.skaliere(0.5,0.7,1);
       fluegel1.rotiere(-90,1,0,0,0,0,0);
       fluegel1.setzeFarbe(1,0,0);
       fluegel1.setzeSelbstleuchten(1,0.1,0);
       fluegel2.drehe(0,-90,-15);
       fluegel2.skaliere(0.5,0.7,1);
       fluegel2.rotiere(-90,1,0,0,0,0,0);
       fluegel2.setzeFarbe(1,0,0);
       fluegel2.setzeSelbstleuchten(1,0.1,0);
    }
    public void explodiere()
    {
        cockpit.verschiebe(1,0.1,-1);
        rumpf.verschiebe(-1,-0.2,2);
        boden.verschiebe(0.5,0,-2);
        fluegel1.verschiebe(-1,2,0.2);
        fluegel2.verschiebe(1,-1,-0.3);
        for(int i = 0; i<=5000; i++)
        {
            cockpit.verschiebe(1,0.1,-1);
            rumpf.verschiebe(-1,-0.2,2);
            rumpf.drehe(2,4,1);
            boden.verschiebe(0.5,0,-2);
            boden.drehe(0.1,1,0.5);
            fluegel1.verschiebe(-1,2,0.2);
            fluegel1.drehe(0,2,1);
            fluegel2.verschiebe(1,-1,-0.3);
            fluegel2.drehe(0,2,1);
            Sys.warte(10);
        }
    }
    public double gibX()
    {    
        return(cockpit.gibX());
    }
    public double gibZ()
    {
        return(cockpit.gibZ());        
    }
    public void bewegeRechts()
    {
        cockpit.verschiebe(2,0,0);
        rumpf.verschiebe(2,0,0);
        boden.verschiebe(2,0,0);
        fluegel1.verschiebe(2,0,0);
        fluegel2.verschiebe(2,0,0);
    }
    public void bewegeLinks()
    {
        cockpit.verschiebe(-2,0,0);
        rumpf.verschiebe(-2,0,0);
        boden.verschiebe(-2,0,0);
        fluegel1.verschiebe(-2,0,0);
        fluegel2.verschiebe(-2,0,0);
    }
    public void bewegeUnten()
    {
        cockpit.verschiebe(0,0,2);
        rumpf.verschiebe(0,0,2);
        boden.verschiebe(0,0,2);
        fluegel1.verschiebe(0,0,2);
        fluegel2.verschiebe(0,0,2);
    }
    public void bewegeOben()
    {
        cockpit.verschiebe(0,0,-2);
        rumpf.verschiebe(0,0,-2);
        boden.verschiebe(0,0,-2);
        fluegel1.verschiebe(0,0,-2);
        fluegel2.verschiebe(0,0,-2);
    }
}

共有1个答案

贡烨烁
2023-03-14

您经常会看到具有静态或公共属性和方法的Java程序。

在上面的示例中,我们创建了一个静态方法,这意味着它可以在不创建类的对象的情况下访问,而不像public,它只能由对象访问:

示例演示静态方法和公共方法之间差异的示例:

public class Main {
  // Static method
  static void myStaticMethod() {
    System.out.println("Static methods can be called without creating objects");
  }

  // Public method
  public void myPublicMethod() {
    System.out.println("Public methods must be called by creating objects");
  }

  // Main method
  public static void main(String[] args) {
    myStaticMethod(); // Call the static method
    // myPublicMethod(); This would compile an error

    Main myObj = new Main(); // Create an object of Main
    myObj.myPublicMethod(); // Call the public method on the object
  }
}
 类似资料:
  • 编辑问题,以包括预期行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答问题。 为什么以下代码不能保证多个线程之间total_home数量的唯一性,即使逻辑位于同步块中也是如此。 } } } 这是一个程序示例。试着运行5-10次,你会发现total_home的值每次都不唯一。

  • 我在调用我的onLeScan时遇到问题。我在开始扫描中放置了一个标签,每次都会被调用。出于某种原因,我的onLeScan永远不会被调用。有人看到我所做的有问题吗?onLeScan应该在开始扫描后立即调用,对吗? 编辑更改了我的onLeScan函数。仍然不起作用,但我认为我正在走向正确的道路。DeviceBeacon是一个只包含方法的类:getName()、getSignal()和getAddres

  • 1、接口声明 如果您希望在自己的CRM系统嵌入呼叫中心能力,需要对接智齿呼叫中心能力,在对接前请您阅读如下对接流程,以便您更好的完成对接。如果只对接基本呼叫能力,预计对接及调试过程1周左右即可完成。 第一步:获取第三方用户接口调用唯一凭证 请联系您的售后经理,获取您企业的如下信息: 1、companyid(企业id) 2、appid(第三方用户接口调用唯一凭证id) 3、app_key(第三方用户

  • 这里是Twilio的新手,并寻求twilio专家的建议。我正在尝试拨打IVR系统的出站电话,等待几秒钟并发送键盘号码输入以在另一端启动工作流程 到目前为止,我可以呼叫IVR系统,但我如何发送号码输入?我认为TwiML是实现这一点的方法!非常感谢您的帮助

  • 我是RXJava的新手。在一个场景中,我希望调用第一个登录webservice(),如果成功,则希望调用另一个webservice()以获取用户信息。

  • 不幸的是,这种情况在生产中偶尔发生,但我无法可靠地复制。 gRPC服务器向少数客户端发送小而频繁的更新。每个客户端使用不同的参数对同一个调用发出多个请求。永远不会有来自服务器的数据流。 调用onNext时,出现以下错误: 根据gRPC订阅数据的请求,保留观察员名单。多个客户端可能会请求完全相同的更新,因此每个进入的客户端都会被添加到相应数据的列表中。 如果他们取消,他们将通过以下方式从列表中删除: