0

每次我想在单击按钮时打开一个新窗口时,我都使用了这个:

String password = new String(TextoContraseña.getPassword());
String nombre = (String)BotonNombreOperario.getSelectedItem();
if(!nombre.equals("Seleccione")) {
   if (Trabajo.validarOperario(nombre,password)) {
             Inicio.setNombreLogin(nombre);
             OpcionesOperario rec = new OpcionesOperario();
   if (JOptionPane.showConfirmDialog(this,rec,(String)BotonNombreOperario.getSelectedItem(), JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE)==JOptionPane.OK_OPTION){
           } // this open the new window
        } else {
            JOptionPane.showMessageDialog(null, "Contraseña incorrecta");
        }
    } else {
        JOptionPane.showMessageDialog(null, "Seleccione a un operario");
    }

问题是我知道这样做不是正确的方法,因为我使用的是 JOptionPane,它不用于选择任何选项,而是打开一个新窗口。问题是我想使用 JFrame 正确地做到这一点。例如,我将“OpcionesOperario”更改为扩展 JFrame 而不是扩展 JPanel。

我也在 Inicio 中更改了此代码

Inicio.setNombreLogin(nombre);
OpcionesOperario rec = new OpcionesOperario();    
rec.setVisible(true);
Inicio.super.dispose();

但是当我使用 rec.setVisible(true) 时出现错误。我认为是因为我不知道使用 JFrame,所以我会很感激一些帮助。我知道这样做是一种奇怪的方式,这就是为什么我想尽可能地改变,因为所有程序都能完美运行。


我的 OpcionesOperario 课程是:

公共类 OpcionesOperario 扩展 javax.swing.JPanel {

/**
 * Creates new form OpcionesOperario
 */
String aux;
boolean realizado = false;
boolean realizado1 = false;
boolean realizado2 = false;
public static String textoImprimible;
String actividad;


public OpcionesOperario() {
    initComponents();
    for (Producto p : Trabajo.getProductos()) {
        jComboBox1.addItem(p.getiD_Producto());    
    } 
    aux=" ---------------------------------------------------------------------\r\n";
    aux+="                             Listado de Registros\r\n";
    aux+=" ---------------------------------------------------------------------\r\n\r\n"; 

   for (Trabajador t : Trabajo.getTrabajadores()) {
        if ((!t.getTipoEmpleado().equals("Sudo")) && (!t.getTipoEmpleado().equals("Administrador"))) {
            if (t.getNombre().equals(Inicio.getNombreLogin())) {
                if (t.isActividadIniciada()){
                    BotonInicio.setEnabled(false);
                    textoVariante.setText("Actividad en curso...");
                    actividad = t.getActividad();
                    jComboBox2.setSelectedItem(actividad);
                    jComboBox2.setEnabled(false);


                } else {
                    BotonFinal.setEnabled(false);
                    textoVariante.setText("Iniciar para comenzar");
                    textoVariante.setForeground(Color.red);
                }
            }
        }
    }
}

我有更多方法,但我认为这对解决问题没有用

我得到的问题是:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: trabajo/OpcionesOperario$5
at trabajo.OpcionesOperario.initComponents(OpcionesOperario.java:163)
at trabajo.OpcionesOperario.<init>(OpcionesOperario.java:40)
at trabajo.Inicio.BotonOKActionPerformed(Inicio.java:325)
at trabajo.Inicio.access$500(Inicio.java:24)
at trabajo.Inicio$6.actionPerformed(Inicio.java:192)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.AbstractButton.doClick(AbstractButton.java:356)
at trabajo.Inicio$1.actionPerformed(Inicio.java:45)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
at javax.swing.JTextField.postActionEvent(JTextField.java:721)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1664)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2879)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2926)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2842)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Caused by: java.lang.ClassNotFoundException: trabajo.OpcionesOperario$5
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
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)
... 51 more

我已更改为 JFrame,但在我说“rec.setVisible(true)”的那一行仍然遇到问题。我将放置主类 Inicio 的构造函数的代码。

public Inicio() {

    initComponents();
    setIconImage(new ImageIcon(getClass().getResource("/Imagenes/Icono.png")).getImage()); // Esto es para cambiar el iconito de java
    this.centerScreen(this); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //this is new
    for (Trabajador t : Trabajo.getTrabajadores()) {
        if ((!t.getTipoEmpleado().equals("Sudo")) && (!t.getTipoEmpleado().equals("Administrador"))) {
            BotonNombreOperario.addItem(t.getNombre());                                   //Meter en combobox solo los operarios  
        }
    }

    TextoContraseña.addActionListener(new ActionListener() {
    @Override
        public void actionPerformed(ActionEvent e) {
           BotonOK.doClick();                                                       //darle a intro tambien entra
        }
    });
}
4

1 回答 1

1

我认为问题在于Netbeans

试试这个: 转到C:\Users\yourname\.netbeans\yourversion并删除内容。然后再次尝试编译。

于 2013-08-28T10:52:49.743 回答