与数组搜索有关的Java错误
嘿,伙计们,我正在尝试使用drawString()函数来绘制数组中搜索的结果。我正在使用下面的代码与数组搜索有关的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[]
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;ig
为空,此代码如何工作?“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);
}
}