2012-02-20 39 views
-1

我一直在谷歌上搜索了几个小时,也没有设法找出我做错了,对不起,我真的不擅长的java!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

的命令行参数来自主要方法 – 2012-02-20 01:46:24

+2

这不应该编译 - 你想创建的实例'W1Graphics'使用默认的构造函数它没有。看起来你想要传递'args',即'W1Graphics w = new W1Graphics(args);'。 – 2012-02-20 01:47:03

+0

非常感谢你,不敢相信我没有意识到这一点。它现在有效。 – 2012-02-20 01:50:07

回答

1

命令行参数是赋予主方法而非W1Graphics方法的参数。

这下面的代码:

String a = args[0]; 
    String b = args[1]; 
    int x = Integer.parseInt(a); 
    int y = Integer.parseInt(b); 

应该在你的主要方法。然后,您应该将x和y参数传递给您的W1Graphics构造函数。

EX:

公共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方法中处理命令行参数异常。

1

在您的线路:W1Graphics w = new W1Graphics();你调用不带参数的构造函数。你想要做的是调用构造函数,它需要String[]类型。将您创建W1Graphics对象的行更改为W1Graphics w = new W1Graphics(args);