嘿家伙我正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Duncan
java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
at canvas.search(canvas.java:33)
at canvas.<init>(canvas.java:19)
at Client.<clinit>(Client.java:10)
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)
drawThatText(read_string, 500*i + 1, 500*i + 1);是第33行
该行不可能抛出除零异常.
然而,我确实看到NullPointerException你打电话后可以得到一个
drawThatText(null, ...
Run Code Online (Sandbox Code Playgroud)
然后呢
public void drawThatText(Graphics g, String s, int x, int y) {
^^^^^^^^^^^
will equal null
g.drawString(s, x, y);
^
|
'--- Will throw a NullPointerException
}
Run Code Online (Sandbox Code Playgroud)
这是该程序的不同版本,可以帮助您推动正确的方向:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
