2013-05-16 53 views
1

讓我們保持簡單。我的代碼編譯,當我運行它(使用java CLASSNAME),這是我的命令提示符的錯誤:程序編譯,但不會運行

Exception in thread "main" java.awt.IllegalComponentStateException: The frame is 
decorated 
     at java.awt.Frame.setBackground(Frame.java:986) 
     at RPG.<init>(RPG.java:147) 
     at RPG.main(RPG.java:69) 

以供參考,這是行147

Map.setBackground(new Color(0,0,0,0)); 

的代碼,並在行代碼69

Game.setContentPane(new RPG()); 

他們是兩個不同的JFrames,但他們是衝突? 這裏是我的源整個片段:

public static void main(String[] args) { 
    try { 
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } 
    catch (Exception unused) { } 
    Game.setTitle(" "); 
    Game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Game.setContentPane(new RPG()); 
    Game.setDefaultLookAndFeelDecorated(true); 
    Game.pack(); 
    Game.setSize(850,500); 
    Game.setLocationRelativeTo(null); 
    Game.setResizable(false); 
} 
    public RPG(){ 
    sgame = 1; 
    Game.setVisible(false); 
    JFrame Map = new JFrame(); 
     Map.setTitle("Map"); 
     Map.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Map.setBackground(new Color(0,0,0,0)); 
    Map.setUndecorated(true); 
    JLabel testLabel = new JLabel(new ImageIcon(getClass().getResource("Title.png"))); 
     Map.add(testLabel); 
     Map.setSize(200,200); 
     Map.setLocation(0, 250); 
     Map.setResizable(false); 
     Map.setVisible(true); 
    Launcher(); 
    } 

很抱歉,如果它似乎不清楚,或者如果我沒有做太大的意義,我只是想知道爲什麼我無法啓動我的程序。

回答

2

嘗試在調用.setBackground()之前將設置Map設置爲Undecorated。

+0

哇,這工作得很好。你介意告訴我爲什麼在設置底漆之前設置背景會導致程序崩潰? 你能解釋一下嗎? – user2388169

+0

想像一本書。 Java將按照它所呈現的順序執行代碼。當你第一次創建新的框架(JFrame Map = new JFrame();)時,你完全創建了一個新的框架,雖然是裝飾的。當您嘗試在其上設置背景時,由於該框架已裝飾,因此會出錯。因爲.setUndecorated(true)在.setBackground()之後,所以事件發生順序錯誤。 – Rogue

+0

謝謝。 知識面向未來:) – user2388169