2012-02-20 56 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);