Aiuto! Aiuto! Aiuto!
Ho creato un jframe(Admin) che contiene un jsplitpane che richiama al suo interno due diversi pannelli(PannelloAdminStart e BarraAdmin).
Questa è la finestra principale(Admin-jframe):
codice:
package Schedule.Accesso.Admin;
import java.awt.Color;
import java.awt.Toolkit;
import javax.swing.DebugGraphics;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import com.jgoodies.forms.layout.CellConstraints;
public class Admin extends JFrame{
private static final long serialVersionUID = 1L;
private JSplitPane jSplitPane = null;
private BarraAdmin panel;
public JPanel jPanel1;
private String UsernameDocente; // @jve:decl-index=0:
public int id;
public String Nomin; // @jve:decl-index=0:
public String getNomin() {
return Nomin;
}
public int getId() {
return id;
}
public String getUsernameDocente() {
return UsernameDocente;
}
public void setUsernameDocente(String UsernameDocente, int id, String Nomin) {
this.UsernameDocente = UsernameDocente;
this.id = id;
this.Nomin = Nomin;
}
/**
* This is the default constructor
*/
public Admin(String UsernameDocente) {
this.UsernameDocente = UsernameDocente;
this.setSize(1504, 902);
this.setContentPane(getJSplitPane());
this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/img/logo_uni.png")));
this.setTitle("Benvenuto/a " +" " + this.getUsernameDocente() );
}
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setBounds(0, 0, 1300, 800);
jSplitPane.add(getJPanel1(), JSplitPane.RIGHT);
jSplitPane.add(getJPanel(), JSplitPane.LEFT);
jSplitPane.setBackground(new Color(0, 51, 255));
}
return jSplitPane;
}
private JPanel getJPanel1() {
if(jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setBackground(new Color(0, 51, 255));
jPanel1.setDebugGraphicsOptions(DebugGraphics.LOG_OPTION);
jPanel1.setPreferredSize(new java.awt.Dimension(1008, 800));
PannelloAdminStart PA=new PannelloAdminStart(UsernameDocente, id, Nomin);
JPanel admin = PA.getJContentPane();
jPanel1.add(admin, new CellConstraints("2, 4, 1, 1, default, default"));
admin.setPreferredSize(new java.awt.Dimension(1010, 750));
admin.setDebugGraphicsOptions(DebugGraphics.BUFFERED_OPTION);
admin.setBackground(new Color(0, 51, 255));
}
return jPanel1;
}
private JPanel getJPanel() {
if(panel == null) {
panel = new BarraAdmin();
panel.setPreferredSize(new java.awt.Dimension(108, 162));
panel.setBounds(54, 398, 1284, 365);
panel.setSize(108, 162);
}
return panel;
}
}
Da BarraAdmin (in jsplitpanel) richiamo il metodo che al click del pulsante Logout mi chiuda il jframe:
codice:
Logout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Container component = Logout.getParent();
while(!(component.getClass().toString().endsWith("JFrame"))){
System.out.println(component.getClass());
component = component.getParent();
}
((JFrame)component).dispose();
}
});
Purtoppo, dopo avermi stampato a video, su richiesta:
class Schedule.Accesso.Admin.BarraAdmin
class javax.swing.JSplitPane
class javax.swing.JLayeredPane
class javax.swing.JRootPane
class Schedule.Accesso.Admin.Admin
mi dà questa eccezione:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Schedule.Accesso.Admin.BarraAdmin$5.actionPerforme d(BarraAdmin.java:309)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Ciò vuol dire che il frame lo vede, ma perchè non funziona????? ;(
ah dimenticavo di dire che l'errore è riferito a questa riga di codice, presente all'interno del metodo utilizzato al click:
while(!(component.getClass().toString().endsWith(" JFrame")))