2013-08-24 23 views
0

我有這個小小的代碼,但我不知道爲什麼它不能從aa類中讀取aa.width的值在ab類中。Java:看不到我的變量

我想創建一個基本的遊戲。文件ab.java有打印語句。我知道我沒有調用aa中的函數,但這就是java的工作原理。我想我可能只是做aa.width我一定要得到的值,因爲它是一個公共變量...感謝您的幫助

aa.java:

package com.Game; 

import javax.swing.JFrame; 

public class aa { 

    public static ab f= new ab(); 
    public static int width = 600; 
    public static int height = 400; 
    public static void main(String args[]){ 

     f.setSize(width,height); 
     f.setResizable(false); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setTitle("game first"); 
     f.setLocationRelativeTo(null); 
     System.out.println("main window running!"); 

    } 
} 

ab.java

package com.Game; 

import java.awt.GridLayout; 

import javax.swing.*; 

public class ab extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public ac panel; 

    public ab() { 
     panel = new ac(this); 
     setLayout(new GridLayout (1,1,0,0)); 
     add(panel); 
     System.out.format("the value of width %d\n", aa.width); 
    } 

} 

它打印出:

the value of width 0 
main window running! 
+0

聽起來像'aa'的靜態值是在第一次引用該類時設置的。在這種情況下,在'aa'之前運行'ab'的構造函數 –

+1

請使用大寫的類名「AA」而不是'aa' – raffian

回答

6

您在調用ab()構造函數後設置了aa.width變量。 移動public static int width = 600;一行,你就完成了。

+0

好的答案+1對於相同的 – SpringLearner

+0

aah很好的捕獲...感謝隊友:) – ban

+0

你也知道一些不錯的資源,我可以找到製作Java遊戲的所有功能嗎? – ban

0

我想建議你也不要使用太多的公共變量,而是每個對象應該有它的私有變量和setter/getter方法。 我建議你也檢查你的遊戲的結構和你想創建它的方式,如果你對Java GUI和/或MVC(模型視圖控制器)非常陌生,也許你只想用什麼創建一個類你需要在內部或者更進一步,一個處理邏輯的類和一個處理所有圖形的類。如果你在編碼之前做了很好的思考,你可能會有更快的編碼和調試。

我不能告訴你更多,因爲我不明白你的代碼想幹什麼。