簡體   English   中英

DrawString不繪制字符串

[英]DrawString Not Drawing String

您好我正在學習java游戲開發,當我運行它運行的代碼但是沒有繪制String時它給了我這個錯誤在Code.Core.render的線程“main”java.lang.NullPointerException中的異常(Core.java:62)在Code.Core.run(Core.java:69)的Code.Core.start(Core.java:27)在Code.Core.main(Core.java:45)

繼承我的守則

package Code;

import java.applet.Applet;
import java.awt.*;
import java.awt.image.VolatileImage;

import javax.swing.*;

public class Core extends Applet implements Runnable{   
////////////////////////////////////////////////////////////////////
    double x, y, Cx, Cy;

    public static boolean isRunning = false;

    static JFrame frame;

    public static Core core = new Core();

    public Image i = new ImageIcon("res/Google.jpg").getImage();

    public VolatileImage screen;
////////////////////////////////////////////////////////////////////


    public void start() {
        isRunning = true;
        core.run();
    }

    public void stop() {
        isRunning = false;
    }

    public static void main(String[] args) {
        frame = new JFrame();

        frame.add(core);
        frame.setUndecorated(true);
        frame.pack();
        frame.setResizable(false);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        core.start();


    }



    public void tick() {
        System.out.println("tick");
    }

    public void render() {
        Graphics g = null;
        System.out.println("render");
        setBackground(Color.PINK);
        setForeground(Color.WHITE);

        g.drawString("Test", 500, 500);

    }

    public void run() {
        while(isRunning){
            tick();
            render();
            try{Thread.sleep(5);}catch(Exception e){isRunning = false;}

        }

    }
}
public void render() {
    Graphics g = null;              // uh oh.
    System.out.println("render");
    setBackground(Color.PINK);
    setForeground(Color.WHITE);
    g.drawString("Test", 500, 500); // g is null here.
}

您將g直接賦值為null,然后在其上調用方法。 這會給你一個NPE。

  1. 您正在從Applet擴展,但創建一個JFrame來容納它。 混合重量輕和重量輕的組件是明智的,更不用說在框架上添加小程序了。
  2. 您正在創建一個長時間運行的循環而不考慮您正在運行它的線程的上下文,可能導致它阻止事件調度線程,防止任何可能的繪制更新(以及其他內容)
  3. 您的渲染方法沒有有效的Graphics內容可用於繪制...

首先創建一個可以繪制的自定義組件(例如,從JPanel擴展)。 然后,您可以決定在何處顯示它,例如在小程序或框架上。

有關如何在Swing中執行繪畫的詳細信息,請參閱執行自定義繪畫

看一下Swing中的Concurrency,了解有關如何執行長時間運行的任務以及從Event Dispatching Thread的上下文更新UI的詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM