Friday, January 23, 2015

onbeforeonload event in firefox

There is a difference in onbeforeunload event across the version of Firefox browser. Normally we are using "alert" function to identify whether that particular function is calling or not. But in case of onbeforeunload event, alert will work upto firefox version 26.0. If the firefox version is greater than 26.0, alert funtion will not work. So if you want to use onbeforeunload event in firefox which is greater version of 26.0, then don't use alert function, just write your logic and test it.

<html> <head> <script> function onBrowserClose() { alert("Browser is closing"); // This will work, if your firefox version is less than or equal to 26.0 //Your logic } </script> </head> <body onbeforeonload="onBrowserClose()"> Browser close test... </body> </html>
If your Browse is latest version of firefox (greater than 26.0). Just remove the alert from above code.
<html> <head> <script> function onBrowserClose() { //Your logic } </script> </head> <body onbeforeonload="onBrowserClose()"> Browser close test... </body> </html>

Sunday, January 11, 2015

Java Exception Handling

An Exception is nothing but a problem which will occur during execution of program. An Exception can occur for many reasons. Below are the some of reasons,

  1. Invalid data from User
  2. Program try to read a file, but file is not available
  3. Program try to connect to Database, but credential is invalid

Exception Handling

Exception Handling is nothing but handle the Exception to avoid the abnormal termination of program. If an Exception is not handled, program will terminate abnormally.

To know the clear idea about an Exception handling, we will see the three categories of an Exceptions

  1. Checked Exceptions: Checked Exception is an Exception which can occur typically by user error. So programmer will not knowing it affront. For example, if a file is to be opened, but the file cannot be found, an exception occurs. These Exceptions cannot be ignored by compiler. These kind of Exceptions are called "Checked Exception"
  2. Runtime Exceptions: Runtime Exception is an Exception which programmer can be knowing it affront based on critically of the code. Runtime Exceptions can be avoided during the development itself. But programmer is the responsible for that.
  3. Errors: There are not at all an Exceptions.The problem arise at beyond the user or programmer control. For example, JVM is running out of memory, this cannot be handled by program and cannot identify at compilation.

Exception Hierarchy

All Exceptions are subclasses of Exception class. Exception class is subclass of Throwable class. There is one more class which is derived from Throwable class is Error.


Catching an Exception

Exception handling is the combination of "try" and "catch" block. "try" will have the critical code which may arise an Exception. "catch" block should be written immediately next to "try" block. Whenever Exception is occurring inside the "try" block, control will go to respective "catch" block and execute the "catch" block.

     try {
           //critical code
     } catch(ExceptionName e) {
           //Handling block
     }

A catch statement involves declaring the type of exception you are trying to catch. If an exception occurs in critical code, the catch block (or blocks) that follows the try is checked. If the type of exception that occurred is listed in a catch block, the exception is passed to the catch block much as an argument is passed into a method parameter.

Single catch block - Sample

Following code is having an array with size 2, when try to add 3rd element, program will throws an Exception.

     try {
           int[] i = new int[2];
           i[0] = 1;
           i[1] = 2;
           i[2] = 3;
     } catch(ArrayIndexOutOfBoundsException e) {
           System.out.println("Exception thrown :" + e);
     }

Multiple catch block - Syntax and Sample

Syntax
     try {
           // Critical code
     } catch(ExceptionType e1) {
           // catch block 1
     } catch(ExceptionType e2) {
           // catch block 2
     } catch(ExceptionType e3) {
           // catch block 3
     }
Sample
     try{
           file = new FileInputStream(fileName);
           x = (byte) file.read();
     } catch(IOException i) {
           i.printStackTrace();
     } catch(FileNotFoundException f) {
           f.printStackTrace();
     }

Sunday, January 4, 2015

Java Performance

This post is about performance factors in java. There are many performance factors in java. Here i am mentioning some of the performance factors which i have used in early days in java. I will keep posted some approach, experience on performance improvement.

some of the performance tips are,

  1. ArrayList is faster than Vector except when there is no lock acquisition required.
  2. Use StringBuffer in place of String if you are doing lots of string manipulation it will reduce memory by avoiding creating lots of string garbage. If you are using java5 then consider StringBuilder but that is not synchronized so beware.
  3. Try to make variable , class , method final whenever possible that’s allow compiler to do lots of optimization e.g. compile time binding so you will get faster output.
  4. Static methods are bonded compile time while non static methods are resolved at runtime based on object type so static method will be faster than non static.
  5. Don't call methods in for loop for checking condition e.g. length() size() etc. instead of doing this , use modified version.
  6. Use exceptions only where you really need them
  7. Local variables are the faster than instance variables, which are in turn faster than array elements
  8. Use the fastest available JVM
  9. '==' is faster than equals()
  10. Creating Doubles from strings is slow
  11. Combine similar loops
  12. Don't create too may objects
  13. Beware of object leaks (references to objects that are never nulled)
  14. Use Lazy loading to avoid unnecessary pre-loading of child data
  15. Do bulk updates to reduce database calls
  16. Use the print() method rather than the println() method

Saturday, January 3, 2015

Difference between JDK, JRE and JVM

Understanding the difference between JDK, JRE and JVM is important in Java. We are using JDK, JRE and JVM daily, but many of us not knowing the difference of them. Let we discuss the difference between JDK, JRE and JVM.

JVM

JVM is the short form of Java Virtual Machine. It is a specification that provides runtime environment to execute the java bytecode. JVM is platform dependent because configuration of each OS is differ. But we know that, java is platform independent because java bytecode can be executed in any platform.

JRE

JRE is the short form for Java Runtime Environment. JRE is providing the runtime environment. JRE is the implementation of JVM. It physically exist. It contains set of libraries and set of files that JVM uses at runtime.

JDK

JDK is the short form of Java Development Kit. It physically exist. It contains JRE and Development tools.



Friday, January 2, 2015

Program - FLAMES

I have written FLAMES program around 6 years back when i was started to learn Java programming.
Initially i have written in 'C' language and later the same logic to be used in java program with JFrame for GUI. This program seems to be very easy for those who are having good understanding and basic knowledge in java, but i was struggled to find out this logic when was started this in 'C' language.

I found an issue in this program just before posting this code. Can you please trace and find out the issue?


Try below and find the relationship with your loved one

Name 1:
Name 2:



import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Flames extends JFrame implements ActionListener{
JLabel lbl1 = new JLabel("Name 1");
JLabel lbl2 = new JLabel("Name 2");
JTextField fld1 = new JTextField();
JTextField fld2 = new JTextField();;
JButton btn = new JButton("Submit");
JLabel rlt = new JLabel("");
public Flames()  throws Throwable{
super("Flames");
setLayout(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(Color.LIGHT_GRAY);
setBounds(100, 100, 300, 300);
lbl1.setBounds(50, 40, 100, 40);
lbl2.setBounds(50, 100, 100, 40);
fld1.setBounds(120, 40, 150, 30);
fld2.setBounds(120, 100, 150, 30);
btn.setBounds(110,150,100,30);
rlt.setBounds(110,200,100,30);
rlt.setFont(new Font("Courier New", Font.BOLD, 18));
rlt.setForeground(Color.RED);
add(btn);
add(lbl1);
add(lbl2);
add(fld1);
add(fld2);
add(rlt);
btn.addActionListener(this);
}
  public static void main(String args[])  throws Throwable {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new Flames();
  }
  public void actionPerformed(ActionEvent e) {
rlt.setText("");
String name1 = fld1.getText().toUpperCase();
String name2 = fld2.getText().toUpperCase();
if(name1 ==null || name1.equals("")) {
JOptionPane.showMessageDialog(null, "Name 1 must not be empty.", "Error", JOptionPane.ERROR_MESSAGE);
} else if(name2 ==null || name2.equals("")) {
JOptionPane.showMessageDialog(null, "Name 2 must not be empty.", "Error", JOptionPane.ERROR_MESSAGE);
} else if(name1.equals(name2)) {
JOptionPane.showMessageDialog(null, "Name 1 and Name 2 must not be same.", "Error", JOptionPane.ERROR_MESSAGE);
} else {
rlt.setText(getFlames(name1, name2));
}
  }
  public String getFlames(String name1, String name2)  {
    String result = "";
    char[] f = { 'F', 'L', 'A', 'M', 'E', 'S' };
    char[] n1 = name1.toCharArray();
    char[] n2 = name2.toCharArray();
    int len = 0;
    for (int i = 0; i < n1.length; i++) {
      for (int j = 0; j < n2.length; j++) {
        if (n1[i] == n2[j])  {
          n1[i] = '0';
          n2[j] = '0';
          break;
        }
      }
    }
    for (int i = 0; i < n1.length; i++) {
      if (n1[i] != '0') {
        len++;
      }
    }
    for (int i = 0; i < n2.length; i++) {
      if (n2[i] != '0') {
        len++;
      }
    }
    int k = 1;int l = 0;int c = 1;
    for (;;)  {
      if (k == len)  {
        if (f[l] != '0')  {
          f[l] = '0';
          k = 1;
          l++;
          c++;
          if (l >= 6) {
            l = 0;
          }
          if (c == 6) {
            break;
          }
        } else {
          l++;
          if (l >= 6) {
            l = 0;
          }
        }
      } else  {
        if (f[l] != '0') {
          k++;
        }
        l++;
        if (l >= 6) {
          l = 0;
        }
      }
    }
    for (int i = 0; i < f.length; i++) {
      if (f[i] != '0') {
        if (f[i] == 'F') {
          result = "FRIEND";
        } else if (f[i] == 'L') {
          result = "LOVE";
        } else if (f[i] == 'A') {
          result = "AFFECTION";
        } else if (f[i] == 'M') {
          result = "MARRIAGE";
        } else if (f[i] == 'E') {
          result = "ENEMY";
        } else if (f[i] == 'S') {
          result = "SISTER";
        }
      }
    }
    return result;
  }
}