Tuesday, May 25, 2010

ජාවා වැඩසටහනකට Command Line Arguments ලබාගන්නා ආකාරය.

ජාවා වැඩසටහනක් ක්‍රියාත්මක කරවන(Execute) අවස්ථාවේම එයට යම් දත්තයක් හෝ කිහිපයක් ලබාදීමට Command Line Arguments භාවිතා කල හැක. උදාහ‍රණයක් ලෙස copy file1 file2 යන විධානයේ file1 හා file2 ලෙසට අපිවිසින් දත්තයන් දෙකක් ලබාදී ඇත copy utility එක සඳහා එම file1 file2 command line argument 2කි. එම විධානය ක්‍රියාත්මක කල විට copy utility එක විසින් අදාල arguments 2 වැඩසටහන තුලට ලබාගෙන අදාල කාර්‍යය ඉටුක‍රනු ලබයි. අපි දැන් බලමු ජාවා වැඩසටහනකින් කොහොමද මෙවැනි හැකියාවක් ලබාදෙන්නේ කියලා.

අපි ජාවා වැඩසටහන ආරම්භයේදී ලබා දෙන arguments තැන්පත් වී තිබෙන්නේ  public static void main(String args[]) හි සඳහන් කරන ලද args[] නම් array එක තුලයි. එනම් main method එකෙන් parameter එකක් ලෙස ලබාදුන් array එක තුලයි. මෙය args ලෙසින්ම නම් වීම අත්‍යාවශ්‍ය නොවේ. නමුත් එය String type එකෙන් තිබීම අනිවාර්‍ය වේ. ඔබට arrays ගැන ගැටලුවක් ඇත්නම් arrays සම්බන්ද පාඩම බලන්න.

example01:
class CommandLineDemo{
 public static void main(String args[]){
  String argument1=args[0];
  String argument2=args[1];
  String argument3=args[2];
  System.out.println("Argument 1 : "+argument1);
  System.out.println("Argument 2 : "+argument2);
  System.out.println("Argument 3 : "+argument3);
 }
}

Output:
අපි මෙහිදී Java C++ C# Perl ලෙසින් argument 4ක් දී තිබුනද console එකෙහි පෙන්වා ඇත්තේ Java C++ C# arguments 3 පමණි. අපි access ක‍ර ඇත්තේ args[] හි 0,1,2 යන elements 3 පමණි. යම්හෙයකින් අපි args හි අඩංගු නැති element එකක් access කලහොත් ArrayIndexOutOfBoundsException එකක් ලැබෙනු ඇත. එනම් program එකෙහි run time error එකක් ඇතිවනු ඇත. Error Control ගැන කෙරෙන පාඩමේදී අපි Exception ගැන විස්ත‍රාත්මකව ඉගෙන ගනිමු. අපි ඉහත වැඩසටහනේ එවැනි error එකක් ලැබෙන අවස්ථාවක් ගැන බලමු.
අපි arguments ලෙස ලබා දී ඇත්තේ Java හා C++ පමණි නමුත් අප වැඩසටහන තුලදී args[] හි 3වන element එකද access කෙරේ(2nd index). එමනිසා මෙහිදී ඉහත සඳහන් කල ආකාරයේ exception එකක් (මෙහිදී නම් run time error) ලැබේ.

අපි දැන් ඉහත ආකාරයේ දෝශ මගහැරවීමට සුදුසු පියව‍රක් යොදා එම වැඩසටහනම වැඩිදියුණු (modify) ක‍රමු. 
example02:
class CommandLineDemo{
 public static void main(String args[]){
  try{
   String argument1=args[0];
   String argument2=args[1];
   String argument3=args[2];
   System.out.println("Argument 1 : "+argument1);
   System.out.println("Argument 2 : "+argument2);
   System.out.println("Argument 3 : "+argument3);
  }catch(ArrayIndexOutOfBoundsException ex){
   System.out.println("Incorect usage!");
   System.out.println("You must provide minimum of 3 numbers!");
   System.out.println("Invalid index =  " + ex.getMessage());
   
  }
 }
}
Exception handle කිරීම ගැන අපි ඉදිරි පාඩමකින් විස්ත‍රාත්මකව සාකච්ඡා ක‍රමු. මෙම පාඩමේ මූලික අරමුණ Command Line Arguments භාවිතා ක‍රන ආකාරය හැදෑරීමයි. මෙහිදී මතක තබාගත යුතු කාරණාව වන්නේ args[] array එක String type එකෙන් ඇති බවයි එමනිසා අපි ගණිතමය දත්තයන් arguments ලෙස ගන්නා විට ඒවා සුදුසු types වලට convert කිරීමට සිදුවනවා.

අපි දැන් ප්‍රායෝගික උදාහරණ කිරිපයක් බලමු.

Example03:
class CLADemo1{
 public static void main(String args[]){
  try{
   String name=args[0];
   float price=Float.parseFloat(args[1]);
   float VAT=Float.parseFloat(args[2]);
   float Total=price+VAT;
   System.out.println(name +" :  " + Total);
  }catch(ArrayIndexOutOfBoundsException e){
   System.out.println("Incorrect usage!");
  }catch(NumberFormatException e){
   System.out.println("Invalid number " + e.getMessage());
  }
 }
}
Output 01:
මෙහිදී numbers convert ක‍රන විට ලබාදී ඇති number format එක දෝශ සහගත නම් එයද handle කිරීමට NumberFormatExcption එකක්ද program එක තුලදී catch ක‍ර ඇත. පහත රූපයෙන් එවැනි exception එකක් මතුවූ විට අප විසින් පෙන්වන දෝශ පණිවුඩය දැක්වේ.
මෙම පාඩමේ උදාහරණ download කරගැනීමට පහත Link එක භාවිතා කරන්න.

7 comments:

  1. keep on writing. I 'm a first year student @ SLIIT

    ReplyDelete
  2. Thanks again aiyaa. I came back ! I put the first comment on 26th May 2010. Those days I was just reading your blog and Today I'm really making use of your blog doing the exercises and so on. Keep on writing aiyaa.

    ReplyDelete
  3. example1 run kalama error found!!

    drjava mama use karanne



    java.lang.ArrayIndexOutOfBoundsException: 0
    at CommandLineDemo.main(CommandLineDemo.java:5)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

    ReplyDelete
  4. command line arguments ලබාගන්නා වැඩසටහනක් නිසා run වෙන මොහොතේ values ලබාදිය යුතුයි
    උදා : java Program Arg1 arg2
    IDE එකක් භාවිතා කරල කරනවනම් command line args ලබාදිමට run එක configure කල යුතුයි.

    ReplyDelete
  5. thanks 4 ur help..thank u thank u very much!!

    me lesson tika godaak hodai..c language wage anek languages walatat liyanna puluwan nam godaak hodai..Best of Luck!!

    ReplyDelete
  6. Thank u very very much 4 ur lessons.me wagema c wage anek languages walatat liyanna puluwan nam godaak watinawa..best of luck!!

    ReplyDelete