0

I'm trying to create panel with some button which would enables disable the other button What's the problem with the codes its compiled perfectly but while running shows the error. I'm not able to debug this.

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)

Here's the code

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();
            }
        });
    }

}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
Gaurav
  • 69
  • 1
  • 6
  • 1
    It appears that Java is expecting this class to reside in the components package, but either it does not, or its not been executed from the correct context (path location) – MadProgrammer Apr 02 '13 at 08:32
  • When did the error occur? At loading time or at button click? – Doan Cuong Apr 02 '13 at 08:32
  • while running in prompt – Gaurav Apr 02 '13 at 08:32
  • Class file is also in component package sorry i just forget to add package components while pasting code in my code its specified – Gaurav Apr 02 '13 at 08:34
  • A stab in the dark: Do you build a jar file, or just run the class files? If you run the class files, are the class files and package directories named as expected? Windows should not care for upper or lower case, but I seem to remember issues in some scenarios. (like building on a network share.) Does removing the complete build directory help? – Rainer Schwarze Apr 02 '13 at 09:41

1 Answers1

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();
            }
        });
    }
}

EDIT

Java6 on WinXP caused the with same exception

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

  • but have to use the proper private to use instead of protected static ImageIcon createImageIcon(String path) { caused a.m. exception

@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;
    }
}
mKorbel
  • 109,525
  • 20
  • 134
  • 319