2013-04-02 50 views
0

我試圖創建一些按鈕,這將啓用禁用其他按鈕的面板 它的編碼完美,但運行時顯示錯誤代碼有什麼問題。 我無法調試。使用擺動時出錯

Exception in thread "main" java.lang.NoClassDefFoundError: buttondemo (wrong nam 
e: components/buttondemo) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 
2) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472) 

下面的代碼

import javax.swing.AbstractButton; 
import javax.swing.JButton; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.ImageIcon; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

public class buttondemo extends JPanel implements ActionListener { 
    private JButton b1, b2, b3; 

    public buttondemo() { 
     ImageIcon Left = createImageIcon("C:\\Users\\nco\\Desktop\\Swing\\components\\images\\left.png"); 
     ImageIcon Right = createImageIcon("C:\\Users\\nco\\Desktop\\Swing\\components\\images\\right.jpg"); 
     ImageIcon Middle = createImageIcon("C:\\Users\\nco\\Desktop\\Swing\\components\\images\\middle.jpg"); 
     b1 = new JButton("Disable middle button", Left); 
     b1.setVerticalTextPosition(AbstractButton.CENTER); 
     b1.setMnemonic(KeyEvent.VK_D);// shortcut D 
     b1.setActionCommand("disable"); 
     b2 = new JButton("middle button", Middle); 
     b2.setVerticalTextPosition(AbstractButton.BOTTOM); 
     b2.setVerticalTextPosition(AbstractButton.CENTER); 
     b3.setMnemonic(KeyEvent.VK_M);// shortcut M 
     b3 = new JButton("Enable middle button", Right); 
     b3.setVerticalTextPosition(AbstractButton.RIGHT); 
     b3.setMnemonic(KeyEvent.VK_E);// shortcut E 
     b3.setActionCommand("enable"); 
     b3.setEnabled(false); 
     b1.addActionListener(this); 
     b3.addActionListener(this); 
     b1.setToolTipText("click on the middle button to " + "disable middle"); 
     b3.setToolTipText("click on the middle button to " + "enable middle"); 
     b2.setToolTipText("click disable"); 
     add(b1); 
     add(b2); 
     add(b3); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if ("disable".equals(e.getActionCommand())) { 
      b2.setEnabled(false); 
      b1.setEnabled(false); 
      b3.setEnabled(true); 
     } else { 
      b2.setEnabled(true); 
      b1.setEnabled(true); 
      b3.setEnabled(false); 
     } 
    } 

    protected static ImageIcon createImageIcon(String path) { 
     java.net.URL img = buttondemo.class.getResource(path); 
     if (img != null) { 
      return new ImageIcon(img); 
     } else { 
      System.err.println("could not find path" + path); 
      return null; 
     } 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("Button demso"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     buttondemo Contentpane = new buttondemo(); 
     Contentpane.setOpaque(true); 
     frame.setContentPane(Contentpane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

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

} 
+1

看來,Java的期待該類駐留在組件包,但要麼沒有,或者它不是被執行從正確的上下文(路徑位置) – MadProgrammer

+0

錯誤何時發生?在加載時或點擊按鈕? –

+0

當在提示符下運行時 – Gaurav

回答

2

enter image description here

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingConstants; 
import javax.swing.UIManager; 

public class buttondemo extends JPanel implements ActionListener { 

    private JButton b1, b2, b3; 

    public buttondemo() { 
     Icon Left = UIManager.getIcon("OptionPane.errorIcon"); 
     Icon Right = UIManager.getIcon("OptionPane.informationIcon"); 
     Icon Middle = UIManager.getIcon("OptionPane.warningIcon"); 
     b1 = new JButton("Disable middle button", Left); 
     b1.setVerticalTextPosition(SwingConstants.TOP); 
     b1.setHorizontalTextPosition(SwingConstants.CENTER); 
     b1.setMnemonic(KeyEvent.VK_D);//shortcut D 
     b1.setActionCommand("disable"); 
     b2 = new JButton("middle button", Middle); 
     b2.setVerticalTextPosition(SwingConstants.BOTTOM); 
     b2.setHorizontalTextPosition(SwingConstants.LEFT); 
     b3 = new JButton("Enable middle button", Right); 
     b3.setMnemonic(KeyEvent.VK_M);//shortcut M 
     b2.setVerticalTextPosition(SwingConstants.EAST); 
     b2.setHorizontalTextPosition(SwingConstants.CENTER); 
     b3.setActionCommand("enable"); 
     b3.setEnabled(false); 
     b1.addActionListener(this); 
     b3.addActionListener(this); 
     b1.setToolTipText("click on the middle button to " + "disable middle"); 
     b3.setToolTipText("click on the middle button to " + "enable middle"); 
     b2.setToolTipText("click disable"); 
     add(b1); 
     add(b2); 
     add(b3); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if ("disable".equals(e.getActionCommand())) { 
      b2.setEnabled(false); 
      b1.setEnabled(false); 
      b3.setEnabled(true); 
     } else { 
      b2.setEnabled(true); 
      b1.setEnabled(true); 
      b3.setEnabled(false); 
     } 
    } 

    protected static ImageIcon createImageIcon(String path) { 
     java.net.URL img = buttondemo.class.getResource(path); 
     if (img != null) { 
      return new ImageIcon(img); 
     } else { 
      System.err.println("could not find path" + path); 
      return null; 
     } 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("Button demso"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     buttondemo Contentpane = new buttondemo(); 
     Contentpane.setOpaque(true); 
     frame.setContentPane(Contentpane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

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

編輯

的Java6在WinXP導致與同一異常

java.lang.NoClassDefFoundError: JButton/ButtonDemo Caused by: java.lang.ClassNotFoundException: JButton.ButtonDemo at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: JButton.ButtonDemo. Program will exit. Exception in thread "main" Java Result: 1

  • ,但不得不使用道具呃private使用的protected static ImageIcon createImageIcon(String path) {,而不是造成上午例外

@see

private ImageIcon createImageIcon(String path) { 
    java.net.URL img = ButtonDemo.class.getResource(path); 
    if (img != null) { 
     return new ImageIcon(img); 
    } else { 
     System.err.println("could not find path" + path); 
     return null; 
    } 
} 
+1

爲[sscce] +1(http://sscce.org/)和UI圖標+1。 – trashgod

+0

b3也初始化 – Gaurav

+0

還考慮'ButtonGroup'中的'JToggelButton',見[這裏](http://stackoverflow.com/a/6036048/230513)。 – trashgod