龟兔赛跑赛小程序,我怎样才能让我的code正常工作? [英] Hare and tortoise Race Applet , how can I make my code work properly?

查看:175
本文介绍了龟兔赛跑赛小程序,我怎样才能让我的code正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直对我的项目,这是一个有点难以知道我可以在此解决,所以我可以使它工作,我是一个初学者,只想让您知道..

这里是个错误消息:

 异常螺纹AWT-EventQueue的-1显示java.lang.NullPointerException:字符串为空
    在sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2817)
    在project2.project2.paint(project2.java:101)
    在sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)
    在sun.awt.RepaintArea.paint(RepaintArea.java:240)
    在sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:347)
    在java.awt.Component.dispatchEventImpl(Component.java:4937)
    在java.awt.Container.dispatchEventImpl(Container.java:2287)
    在java.awt.Component.dispatchEvent(Component.java:4687)
    在java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
    在java.awt.EventQueue.access $ 200(EventQueue.java:103)
    在java.awt.EventQueue中的$ 3.run(EventQueue.java:688)
    在java.awt.EventQueue中的$ 3.run(EventQueue.java:686)
    在java.security.AccessController.doPrivileged(本机方法)
    在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(​​ProtectionDomain.java:76)
    在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(​​ProtectionDomain.java:87)
    在java.awt.EventQueue中的$ 4.run(EventQueue.java:702)
    在java.awt.EventQueue中的$ 4.run(EventQueue.java:700)
    在java.security.AccessController.doPrivileged(本机方法)
    在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(​​ProtectionDomain.java:76)
    在java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
    在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

这里是我的code:

 包项目2;进口java.awt中的*。
导入的java.applet。*;公共类项目2扩展的Applet
{
    图片龟,兔;
    INT tortX = 250,hareX = 250;
    最终诠释tortY = 100,hareY = 300,WIDTH = 15 HEIGHT = 50;
    INT转;串turnNum;
    INT举措;串tMove,hMove;
    公共无效的init()
    {
        龟=的getImage(getDocumentBase(),图像/ tortoise.gif);
        野兔=的getImage(getDocumentBase(),图像/ hare.gif);
        此举= 0;转= 0;
    }
    公共无效控制()
    {
        而((tortX< 985)||(hareX< 985))
        {
            此举=(INT)(10 *的Math.random());
            开关(移动)
            {
            情况1:
            案例2:
                tortX + =(3×宽);
                hareX + =(9 *宽);
                tMove =快埋头苦干; hMove =大合;
                打破;
            案例3:
            情况4:
            情况5:
                tortX + =(3×宽);
                hareX + =宽度;
                tMove =快埋头苦干; hMove =小跳;
                打破;
            情况6:
                tortX + =宽度;
                如果(hareX == 250){} //地理信息技术虚无
                否则,如果(hareX< =(250 +(11 *宽)))
                    hareX = 250;
                其他
                    hareX - =(12 *宽);
                tMove =慢埋头苦干; hMove =大滑;
                打破;
            案例7:
            案例8:
                tortX + =(1 *宽);
                如果(hareX == 250){} //地理信息技术虚无
                否则,如果(hareX< =(250 +(宽)))
                    hareX = 250;
                其他
                    hareX - =(2 *宽);
                tMove =慢埋头苦干; hMove =小纸条
                打破;
            案例9:
            案例10:
                如果(tortX == 250){} //地理信息技术虚无
                否则,如果(tortX< =(250 +(5×宽)))
                    tortX = 250;
                其他
                    tortX - =(6 *宽);
                tMove =滑; hMove =睡着了。
                打破;
                // Cuniculus dormit,地理信息技术虚无。
            }
            转++; turnNum =(转+);
            重绘();
            的for(int i = 1; I< = 10;我++)
            {
                延迟();
            }
        }
        tortX = 985; hareX = 985;
        重绘();
    }
    公共无效漆(图形画面)
    {
        drawRace(屏);
        如果(tortX> = 985)
        {
            screen.setFont(新字体(宋体,Font.ITALIC,48));
            screen.drawString(乌龟跑赢,650,240);
            clearCurrent(屏);
            fillNext(屏);
        }
        否则,如果(hareX> = 985)
        {
            screen.setFont(新字体(宋体,Font.ITALIC,48));
            screen.drawString(乌龟跑赢,650,240);
            clearCurrent(屏);
            fillNext(屏);
        }
        其他
        {
            screen.drawString((转向+ turnNum),621,55);
            screen.setFont(新字体(宋体,Font.ITALIC,12));
            screen.drawString(tMove,59,65); screen.drawString(hMove,66,255);
            clearCurrent(屏);
            fillNext(屏);
        }
        停止();
    }
    公共无效clearCurrent(图形S)
    {
        s.clearRect(tortX + 1,tortY + 1,WIDTH-1,高度-1);
        s.clearRect(hareX + 1,hareY + 1,WIDTH-1,高度-1);
    }
    公共无效fillNext(图形S)
    {
        s.fillRect(tortX + 1,tortY + 1,WIDTH-1,高度-1);
        s.fillRect(hareX + 1,hareY + 1,WIDTH-1,高度-1);
    }
    公共无效drawRace(图形S)
    {
        // Initium
        s.drawRect(250,100,750,50);
        s.drawRect(250,300,750,50);
        INT LINEX = 265,lineYi = 100,lineYf = 150;
        的for(int i = 1; I< = 98;我++)
        {
            如果(LINEX == 1000)
            {
                LINEX = 265; lineYi = 300; lineYf = 350;
            }
            s.drawLine(LINEX,lineYi,LINEX,lineYf);
            LINEX + = 15;
        }
        s.fillRect(tortX + 1,tortY + 1,WIDTH-1,高度-1);
        s.fillRect(hareX + 1,hareY + 1,WIDTH-1,高度-1);
        s.drawImage(乌龟,59,80,本);
        s.drawImage(野兔,66,271,这一点);
        s.setFont(新字体(宋体,Font.BOLD,24));
        s.drawString(竞赛,250,55);
    }
    公共无效延迟()
    {
        的for(int i = 0; I< 90000000;我++)
        {
        }
    }
    公共无效停止()
    {
    }
}


解决方案

看起来 tMove hMove (或者两者两者)。它sesems像开关语句控制()在某些情况下将这些未分配。无论是确保 tMove hMove 屏幕绘制或(也许更好,因为谁也不能保证之前肯定分配了控制()你的applet是画前会被调用)更换此code:

  screen.drawString(tMove,59,65);
screen.drawString(hMove,66,255);

本:

 如果(tMove!= NULL){
    screen.drawString(tMove,59,65);
}
如果(hMove!= NULL){
    screen.drawString(hMove,66,255);
}

I've been working on my project and it's a little hard to know what I can fix in this so I could make it work , I'm a beginner just to let you know..

Here's the error(s) message:

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException: String is null
    at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2817)
    at project2.project2.paint(project2.java:101)
    at sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)
    at sun.awt.RepaintArea.paint(RepaintArea.java:240)
    at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:347)
    at java.awt.Component.dispatchEventImpl(Component.java:4937)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:688)
    at java.awt.EventQueue$3.run(EventQueue.java:686)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:702)
    at java.awt.EventQueue$4.run(EventQueue.java:700)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Here's my code:

package project2;

import java.awt.*;
import java.applet.*;

public class project2 extends Applet
{
    Image tortoise, hare;
    int tortX = 250, hareX = 250;
    final int tortY = 100, hareY = 300, WIDTH = 15, HEIGHT = 50;
    int turn; String turnNum;
    int move; String tMove, hMove;
    public void init()
    {
        tortoise = getImage( getDocumentBase(), "images/tortoise.gif" );
        hare = getImage( getDocumentBase(), "images/hare.gif" );
        move = 0; turn = 0;
    }
    public void control()
    {
        while (( tortX < 985 ) || ( hareX < 985 ))
        {
            move = (int)(10 * Math.random());
            switch (move)
            {
            case 1:
            case 2:
                tortX += (3 * WIDTH);
                hareX += (9 * WIDTH);
                tMove = "Fast Plod"; hMove = "Big Hop";
                break;
            case 3:
            case 4:
            case 5:
                tortX += (3 * WIDTH);
                hareX += WIDTH;
                tMove = "Fast Plod"; hMove = "Small Hop";
                break;
            case 6:
                tortX += WIDTH;
                if (hareX == 250) {} // Agit Nihil 
                else if (hareX <= (250 + (11 * WIDTH)))
                    hareX = 250;
                else
                    hareX -= (12 * WIDTH);
                tMove = "Slow Plod"; hMove = "Big Slip";
                break;
            case 7:
            case 8:
                tortX += (1 * WIDTH);
                if (hareX == 250) {} // Agit Nihil
                else if (hareX <= (250 + (WIDTH)))
                    hareX = 250;
                else
                    hareX -= (2 * WIDTH);
                tMove = "Slow Plod"; hMove = "Small Slip";
                break;
            case 9:
            case 10:
                if (tortX == 250) {} // Agit nihil
                else if (tortX <= (250 + (5 * WIDTH)))
                    tortX = 250;
                else
                    tortX -= (6 * WIDTH);
                tMove = "Slip"; hMove = "Fall Asleep.";
                break;
                // Cuniculus dormit, agit nihil .
            }
            turn++; turnNum = (turn + "");
            repaint();
            for (int i = 1; i <= 10; i++)
            {
                delay();
            }
        }
        tortX = 985; hareX = 985;
        repaint();
    }
    public void paint( Graphics screen )
    {
        drawRace(screen);
        if (tortX >= 985)
        {
            screen.setFont(new Font("Times New Roman", Font.ITALIC, 48));
            screen.drawString("Tortoise Wins", 650, 240);
            clearCurrent(screen);
            fillNext(screen);
        }
        else if (hareX >= 985)
        {
            screen.setFont(new Font("Times New Roman", Font.ITALIC, 48));
            screen.drawString("Tortoise Wins", 650, 240);
            clearCurrent(screen);
            fillNext(screen);
        }
        else
        {      
            screen.drawString(("Turn " + turnNum), 621, 55);
            screen.setFont(new Font("Times New Roman", Font.ITALIC, 12));
            screen.drawString(tMove, 59, 65); screen.drawString(hMove, 66, 255);
            clearCurrent(screen);
            fillNext(screen);
        }
        stop();
    }
    public void clearCurrent( Graphics s )
    {
        s.clearRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
        s.clearRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
    }
    public void fillNext( Graphics s )
    {
        s.fillRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
        s.fillRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
    }
    public void drawRace( Graphics s )
    {
        // Initium
        s.drawRect(250, 100, 750, 50);
        s.drawRect(250, 300, 750, 50);
        int lineX = 265, lineYi = 100, lineYf = 150;
        for (int i = 1; i <= 98; i++)
        {
            if (lineX == 1000)
            {
                lineX = 265; lineYi = 300; lineYf = 350;
            }
            s.drawLine(lineX, lineYi, lineX, lineYf);
            lineX += 15;
        }
        s.fillRect(tortX+1, tortY+1, WIDTH-1, HEIGHT-1);
        s.fillRect(hareX+1, hareY+1, WIDTH-1, HEIGHT-1);
        s.drawImage(tortoise, 59, 80, this);
        s.drawImage(hare, 66, 271, this);
        s.setFont(new Font("Times New Roman", Font.BOLD, 24));
        s.drawString("Race", 250, 55);
    }
    public void delay()
    {
        for (int i = 0; i < 90000000; i++)
        {
        }
    }
    public void stop()
    {
    }
}

解决方案

It looks like tMove or hMove (or both both) is null. It sesems like the switch statement in control() can leave these unassigned in some cases. Either ensure that tMove and hMove are definitely assigned before the screen is drawn or (perhaps better, because there's no guarantee that control() will be called before your applet is painted) replace this code:

screen.drawString(tMove, 59, 65);
screen.drawString(hMove, 66, 255);

with this:

if (tMove != null) {
    screen.drawString(tMove, 59, 65);
}
if (hMove != null) {
    screen.drawString(hMove, 66, 255);
}

这篇关于龟兔赛跑赛小程序,我怎样才能让我的code正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆