How do I prevent my form from freezing when it is loading an image from the web at the click of a button?

Posted by Vimal Basdeo on Stack Overflow See other posts from Stack Overflow or by Vimal Basdeo
Published on 2010-12-25T15:30:04Z Indexed on 2010/12/25 15:54 UTC
Read the original article Hit count: 264

Filed under:
|

I want to display an image from the web to a panel in another Jframe at the click of a button but whenever I click the button first the image loads and during this time the current form potentially freezes and once the image has loaded the form is displayed with the image.. How can I avoid the situation where my form freezes since it is very irritating

My codes ::

My current class

private void btn_TrackbusActionPerformed(java.awt.event.ActionEvent evt) {                                             
        try {
            sendMessage("Query,map,$,start,211,Arsenal,!");
            System.out.println(receiveMessage());
        } catch (UnknownHostException ex) {
            Logger.getLogger(client_Trackbus.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(client_Trackbus.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (Exception ex) {
            Logger.getLogger(client_Trackbus.class.getName()).log(Level.SEVERE, null, ex);
        }
        client_trackedbus nextform=new client_trackedbus(planform,connection,packet_receive,packet_send);
        this.setVisible(false);
        this.dispose();
        nextform.setVisible(true);
        // TODO add your handling code here:
    }                                            

My next class that displays the image

public class client_trackedbus extends javax.swing.JFrame {
    client_planform planform=null;
    DatagramSocket connection=null;
    DatagramPacket packet_receive=null;
    DatagramPacket packet_send=null;
    JLabel label=null;
    /** Creates new form client_trackedbus */
    public client_trackedbus(client_planform planform,DatagramSocket 
        connection,DatagramPacket packet_receive,DatagramPacket packet_send) {
        initComponents();
        this.planform=planform;
        this.connection=connection;
        this.packet_receive=packet_receive;
        this.packet_send=packet_send;
        try {
            displayMap("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg", jPanel1, new JLabel());
        } catch (MalformedURLException ex) {
            Logger.getLogger(client_trackedbus.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


    private void displayMap(String url,JPanel panel,JLabel label) throws MalformedURLException{
        URL imageurl=new URL(url);
        Image image=(Toolkit.getDefaultToolkit().createImage(imageurl));
        ImageIcon icon = new ImageIcon(image);
        label.setIcon(icon);
        panel.add(label);
       // System.out.println(panel.getSize().width);
        this.getContentPane().add(panel);
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        btn_Exit = new javax.swing.JButton();
        btn_Plan = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Public Transport Journey Planner");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 368, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 172, Short.MAX_VALUE)
        );

        jLabel1.setFont(new java.awt.Font("Arial", 1, 18));
        jLabel1.setText("Your tracked bus");

        btn_Exit.setText("Exit");
        btn_Exit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_ExitActionPerformed(evt);
            }
        });

        btn_Plan.setText("Plan journey");
        btn_Plan.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_PlanActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(104, 104, 104)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(65, 65, 65)
                        .addComponent(btn_Plan)
                        .addGap(65, 65, 65)
                        .addComponent(btn_Exit, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(20, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btn_Exit)
                    .addComponent(btn_Plan))
                .addContainerGap(12, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void btn_ExitActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        Exitform();
    }                                        

    private void btn_PlanActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        this.setVisible(false);
        this.dispose();
         this.planform.setVisible(true);
    }                                        


    private void Exitform(){
        this.setVisible(false);
        this.dispose();

    }
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
               // new client_trackedbus().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton btn_Exit;
    private javax.swing.JButton btn_Plan;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   

}

© Stack Overflow or respective owner

Related posts about java

Related posts about image