我一直在谷歌搜索几个小时,并没有设法弄清楚我做错了什么,抱歉,我真的很擅长java!
我有一个绘制网格的基本2D图形程序。起初我使用设定值来设置网格的大小。现在我已经设置了使用在命令行输入的值替换我的设置值的任务。我无法让它发挥作用。请你看看我的代码并告诉我我做错了什么?
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class W1Graphics extends JFrame
{
MyPanel myVeryOwnPanel;
public static void main(String[] args)
{
W1Graphics w = new W1Graphics();
w.setVisible(true);
}
public W1Graphics(String[] args)
{
String a = args[0];
String b = args[1];
int x = Integer.parseInt(a);
int y = Integer.parseInt(b);
setTitle("Jimmy Hill");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,300);
setLocation(300,300);
myVeryOwnPanel = new MyPanel(x, y);
add(myVeryOwnPanel);
}
}
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
在您的行上:W1Graphics w = new W1Graphics();
您调用的构造函数没有参数。你想要做的是调用String[]
类型的构造函数。将创建W1Graphics对象的行更改为W1Graphics w = new W1Graphics(args);
答案 1 :(得分:1)
命令行参数是给主方法而不是W1Graphics方法的参数。
以下代码:
String a = args[0];
String b = args[1];
int x = Integer.parseInt(a);
int y = Integer.parseInt(b);
应该在您的主要方法中。然后,您应该将x和y参数传递给W1Graphics构造函数。
EX:
public W1Graphics(int x,int y) {
setTitle("Jimmy Hill");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,300);
setLocation(300,300);
myVeryOwnPanel = new MyPanel(x, y);
add(myVeryOwnPanel);
}
当然,在你的主要方法中说出这样的话:
String a = args[0];
String b = args[1];
int x = Integer.parseInt(a);
int y = Integer.parseInt(b);
W1Graphics w = new W1Graphics(x, y);
w.setVisible(true);
编辑:或者当然将args传递给您的构造函数!但是为你的main方法留下解析命令行参数是更好的编程习惯,这样你就可以分离方法功能了。您不希望在W1Graphics构造函数中处理命令行参数异常,而是在调用它之前在main方法中处理。