2016-04-22 46 views
0

我正在java中製作一個簡單的gui程序。當我點擊運行它讓我看起來像這樣的錯誤:(java.lang.IllegalArgumentException)與gui錯誤

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container 
at java.awt.Container.checkNotAWindow(Unknown Source) 
at java.awt.Container.addImpl(Unknown Source) 
at javax.swing.JLayeredPane.addImpl(Unknown Source) 
at java.awt.Container.add(Unknown Source) 
at javax.swing.JRootPane.setContentPane(Unknown Source) 
at javax.swing.JFrame.setContentPane(Unknown Source) 
at main.cool(main.java:31) 
at main$1.run(main.java:43) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

這裏是我的代碼:

import javax.swing.*; 

import java.awt.Container; 
import java.awt.event.*; 



public class main extends JFrame implements ActionListener { 

protected JButton click, fun; 

public main() 
{ 
    click = new JButton("Click"); 
    click.setActionCommand("click"); 
    click.addActionListener(this); 
    add(click); 
    click.setSize(16, 16); 
    fun = new JButton("wow"); 
    fun.setActionCommand("wow"); 
    fun.addActionListener(this); 
    add(fun); 

} 

public static void cool() 
{ 
    JFrame frame = new JFrame("TEST!"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    main main = new main(); 
    frame.setContentPane(main); 
    frame.setSize(128, 128); 
    frame.setVisible(true); 
    frame.setResizable(true); 
} 


public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() 
     { 
      cool(); 
     } 
    }); 

} 





public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    if("click".equals(e.getActionCommand())) 
    { 
     System.out.println("oh right"); 
    } else if ("wow".equals(e.getActionCommand())) 
    { 
     System.out.println("hi"); 
    } 
} 

} 

我認爲錯誤可能是在涼爽()方法;用setContentPane行。但不確定。誰能幫幫我嗎。

+1

也許你的意思是'擴展JPanel'而不是'擴展JFrame' – 3kings

回答

0

是;在您的main類中,您的cool()方法中的frame.setContentPanel()觸發該錯誤。您的main類應該extend JPanel而不是extend JFrame

Aside:避免聲明與類名匹配的局部變量;並且避免聲明與標準方法名稱相同的類名...因此,請將main類重命名爲Main(如果您必須,但試圖更具描述性......或許Application),並將您的本地變量名稱除了main ...或許mapplication

0

main類擴展JFrame,而不是JPanel,讓您在另一個JFrame調用frame.setContentPane(),它沒有意義有JFrame一個JFrame內。將超類更改爲JPanel,錯誤將消失

相關問題