与数组搜索有关的Java错误

与数组搜索有关的Java错误,java,arrays,swing,Java,Arrays,Swing,嘿,伙计们,我正在尝试使用drawString()函数来绘制数组中搜索的结果。我正在使用下面的代码 import java.awt.Graphics; public class canvas extends JPanel{ int i, count; public String read_string = ""; public String[] names = {"Duncan","Matthew","Kevin","Etc"}; public String[]

嘿,伙计们,我正在尝试使用drawString()函数来绘制数组中搜索的结果。我正在使用下面的代码

import java.awt.Graphics;

public class canvas extends JPanel{
    int i, count;
    public String read_string = "";
    public String[] names = {"Duncan","Matthew","Kevin","Etc"};
    public String[] searchfor = {"Duncan","Kevin"};
    public canvas() {

    search();


    }

    public void search() {

        for(i=0; i<names.length; i++) {
            read_string = names[i];
            if(read_string.contains("Duncan") || read_string.contains("Kevin")) {

                count++;

                System.out.println(read_string);
                drawThatText(null, read_string, 500*i + 1, 500*i + 1);
            } else {

            }


        }
    }


    public void drawThatText(Graphics g, String s, int x, int y) {


        g.drawString(s, x, y);

    }
}
导入java.awt.Graphics;
公共类画布扩展了JPanel{
int i,计数;
公共字符串读取_String=“”;
公共字符串[]名称={“Duncan”、“Matthew”、“Kevin”、“Etc”};
公共字符串[]searchfor={“Duncan”,“Kevin”};
公共画布(){
搜索();
}
公开无效搜索(){

对于(i=0;i您正在将一个空图形对象传递给drawThatText()

编辑:

最终应从要绘制的图形中检索图形对象。使用此方法:

yourComponent.getGraphics(); //where yourComponent is the component you want do draw on.
绘制该文本(读取字符串,500*i+1500*i+1);
是第33行

该行不可能抛出零除异常

但是,我确实看到,自从调用

drawThatText(null, ...
然后呢

public void drawThatText(Graphics g, String s, int x, int y) {
                         ^^^^^^^^^^^
                       will equal null

    g.drawString(s, x, y);
    ^
    |
    '--- Will throw a NullPointerException

}

以下是该程序的另一个版本,它将为您提供一个正确的方向:

import java.awt.Graphics;
import javax.swing.*;
public class canvas extends JPanel {
    int i, count;
    public String read_string = "";
    public String[] names = {"Duncan","Matthew","Kevin","Etc"};
    public String[] searchfor = {"Duncan","Kevin"};

    @Override
    public void paintComponent(Graphics g) {
        for(i=0; i<names.length; i++) {
            read_string = names[i];
            if(read_string.contains("Duncan") ||
               read_string.contains("Kevin")) {
                count++;
                System.out.println(read_string);
                drawThatText(g, read_string, 50*i + 10, 50*i + 10);
            }
        }
    }

    public void drawThatText(Graphics g, String s, int x, int y) {
        g.drawString(s, x, y);
    }

    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setContentPane(new canvas());
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(200, 200);
        jf.setVisible(true);
    }
}
导入java.awt.Graphics;
导入javax.swing.*;
公共类画布扩展了JPanel{
int i,计数;
公共字符串读取_String=“”;
公共字符串[]名称={“Duncan”、“Matthew”、“Kevin”、“Etc”};
公共字符串[]searchfor={“Duncan”,“Kevin”};
@凌驾
公共组件(图形g){

对于(i=0;i
g
为空,此代码如何工作?“drawThatText(读取字符串,500*i+1500*i+1);”是行33@Duncan,该行不可能生成除零异常。您的代码和错误不“匹配”。不解释被零除。我是java新手,有办法解决这个问题吗?@tulskiy:你是对的。我没有看到任何除法。也许他没有发布完整的代码。无论如何,这也是个问题。那么我如何才能让它不抛出NullPointerException呢?你应该使用系统传递给你的
Graphics
对象。你不需要“绘制组件”创建组件后,当系统决定需要绘制组件(调用
paintComponent
)时绘制组件,然后使用该方法调用中提供的
Graphics
对象绘制组件。
import java.awt.Graphics;
import javax.swing.*;
public class canvas extends JPanel {
    int i, count;
    public String read_string = "";
    public String[] names = {"Duncan","Matthew","Kevin","Etc"};
    public String[] searchfor = {"Duncan","Kevin"};

    @Override
    public void paintComponent(Graphics g) {
        for(i=0; i<names.length; i++) {
            read_string = names[i];
            if(read_string.contains("Duncan") ||
               read_string.contains("Kevin")) {
                count++;
                System.out.println(read_string);
                drawThatText(g, read_string, 50*i + 10, 50*i + 10);
            }
        }
    }

    public void drawThatText(Graphics g, String s, int x, int y) {
        g.drawString(s, x, y);
    }

    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setContentPane(new canvas());
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(200, 200);
        jf.setVisible(true);
    }
}