user3766749
user3766749

Reputation: 30

Opening an applet from a frame button click

I have a button inside an frame. On the click of the button, applet should load in another frame. These exceptions are coming up. defg is my applet class. Is there some other way to do it. Thanks.

     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
     JApplet applet = new defg();

     // Send the applet an init() message.
     applet.init();

     // Construct a JFrame.
     final JFrame frame =
             new JFrame("FrameTitle");

     // Transfer the applet's context pane to the JFrame.
     frame.setContentPane(applet.getContentPane());

     // Transfer the applet's menu bar into the JFrame.
     // This line can be omitted if the applet
     // does not create a menu bar.
     frame.setJMenuBar(applet.getJMenuBar());

     // Make the application shut down when the user clicks
     // on the close button.
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     // Set the size of the frame.
     // To pack the frame as tightly as possible
     // replace the setSize() message with the following.
     // frame.pack();
     frame.setSize(800, 800);

     // Set the location of the frame.
     frame.setLocation(30, 30);

     // Show the frame.
     frame.setVisible(true);



}  

The exception...

  Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at defg.init(defg.java:198)
at AppMain1.jButton1ActionPerformed(AppMain1.java:80)
at AppMain1.access$0(AppMain1.java:75)
at AppMain1$1.actionPerformed(AppMain1.java:40)
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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
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.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
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:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Upvotes: 0

Views: 1438

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347184

So the problem is within you applet's init method...

try { 
    java.awt.EventQueue.invokeAndWait(new Runnable() { 
        public void run() { 
            initComponents(); 
        } 
    }); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
}

You can't call invokeAndWait from within the context of the Event Dispatching Thread as this would generate a deadlock

Instead, you want to call init from outside the Event Dispatching Thread and then, when loaded, load the rest of the UI.

In this case, a SwingWorker might be useful, for example...

public class LoadAppletWorker extends SwingWorker<JApplet, JApplet> {

    @Override
    protected JApplet doInBackground() throws Exception {
        // TODO add your handling code here:
        JApplet applet = new defg();

        // Send the applet an init() message.
        applet.init();

        return applet;
    }

    @Override
    protected void done() {
        try {
            JApplet applet = get();

            // Construct a JFrame.
            final JFrame frame
                    = new JFrame("FrameTitle");

            // Transfer the applet's context pane to the JFrame.
            frame.setContentPane(applet.getContentPane());

            // Transfer the applet's menu bar into the JFrame.
            // This line can be omitted if the applet
            // does not create a menu bar.
            frame.setJMenuBar(applet.getJMenuBar());

            // Make the application shut down when the user clicks
            // on the close button.
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            // Set the size of the frame.
            // To pack the frame as tightly as possible
            // replace the setSize() message with the following.
            // frame.pack();
            frame.setSize(800, 800);

            // Set the location of the frame.
            frame.setLocation(30, 30);

            // Show the frame.
            frame.setVisible(true);
        } catch (InterruptedException | ExecutionException ex) {
            Logger.getLogger(Initapp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

Then you would call it using something like...

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    new LoadAppletWorker().execute();

}

Upvotes: 1

Related Questions