How to make/convert a JAR to EXE

The_Killer

Well-known member
  • Jan 20, 2014
    11,053
    2,200
    113
    WA, Straya 🇦🇺🦘
    www.elakiri.com
    හරි. ඔන්න මම අද කියලා දෙන්න යන්නේ JAR එකක් ඒ කියන්නේ අපි හදපු compiled ජාවා ඇප්ලිකේෂන් එකක් .exe කරන්නේ කොහොමද කියලා.



    exe4j_splash.jpg



    ඔය .exe වින්ඩෝස් වල විතරයි නේ දැනට භාවිතා කරන්න පුලුවන්. හැබැයි ඉතින් මම වැඩියෙන්ම පාවිච්චි කරලා තියෙන්නේත් jar to exe තමා. ඒ නිසා අපි හදපු ජාවා ඇප් එකක් මැක් වල හෝ ලිනක්ස් වල භාවිතා කරන හැටි මම පස්සේ කියලා දෙන්නම්.

    ඔන්න මේ තොවිලය නටන්න පොඩි පොඩි බඩු මූට්ටු ටිකක් ඕනා. ඒවා තමයි exe4j මෘදුකාංගය, තමන් කැමති PNG පින්තූරයක්, ඒකේම .ico අයිකනයක්, හොඳට error handle කරපු JAR එකක්, පින් හිතක්.

    තොවිලය පවත්වන ආකාරය

    මුලින්ම මේක මෙන්න මෙතනින් බාගත කරගන්න. ඊට පසුව එහි ඇති ලැයිසොම යොදා Genuine පොරක් ලෙස වෙස් මාරු කරගන්න. නැත්නම් යකා එලවන්න වෙනවා අන්තිමට.


    Password: [email protected]

    හරි ඔක්කෝම දා ගත්තාද? එහෙනම් වැඩේ පටාන් ගමු.

    #Step 01
    පළවෙනි රූප සටහනේ පරිදි ලැයිසොම වෙනස් කරන් ඊලග අඩව්වට සැට් වෙන්න.

    Step_01.jpg

    #Step 02
    ආහ් රොකට් එක වගේ ඇවිත් නේ.. ඉන්න මෙන්න මෙහෙමයි ඊලග වැඩේ කොරන්නේ.

    Step_02.jpg
    අපිට ඕනා JAR එකක් EXE විදියට භාවිතා කරන්න නිසා ඕකේ මම තෝරලා තියෙන එකට මනාපය දෙන්න, දීලා ඉස්සරහට යමු.

    #Step 03
    ඊට පස්සේ මෙන්න මෙව්වා එකට තමා එන්නේ. ඕකේ ඔන්න ඔයාගේ හදපු ඇප් එකේ නම හරි ඔයා ඒක promote ඉන්න නම හරි දෙන්න මේක file එකේ property attributes වලට save වෙනවා. ඕක තමා ඒකේ නම විදියට භාවිතා වෙන්නේ. ඊට පස්සේ කොහෙටද exe එක compile වෙන්න ඕනා කියලා path එක දෙන්න. ඒක desktop එකේ new folder එකක් හදලා දුන්නත් කමක් නෑ, Netbeans/Eclipse වල ඔයාගේ Project එක ඇතුලේ තව new folder එකක් හදලා දුන්නත් කමක් නෑ.

    Step_03.jpg

    #Step 04
    හරි, දැන් පහළ රූප රාමුවෙන් GUI application option එක තෝරන්න. අපි මේක GUI app එකක් විදියට භාවිතා කරන්න යන නිසා. නැත්නම් ඔයාගේ ඇප් එකට අදාල වර්ගය තෝරන්න. ඊට පස්සේ මෙතනත් ඔයා කලින් භාවිතා කරපු නම executable name එකට දෙන්න. මේ නමින් තමා .exe එක හැදෙන්නේ.
    අර කලින් ලෑස්ති කරන්න කියලා මේසේ පැත්තකින් තියාගත්ත .ico icon එකේ path එක මෙතනට දෙන්න. ඔයාට ඕනා එක වතාවකට එක application instance එකක් run වෙන්න නම් allow only a single... option එක භාවිතා කරන්න. මේක නිකන් tick කරලා ගියා නම් වඩා හොදයි. දැන් ඔය පොඩි අතෙන් පෙන්නන්නේ ඕක ඔබන්න කියලා. ඔබලා බලන්න, බය වෙන්න කාරි නෑ. :rofl:

    Step_04.jpg

    Step_05.jpg

    #Step 05
    දැන් ඔබලා ආවේ මෙන්න මෙතනට.

    Step_06.jpg

    ඕකේ Redirect stderr (standard error) එකෙන් කියන්නේ සාමාන්‍ය error එකක් ආවහම error file log එක කොහේටද write & save කරන්න ඕනා කියලා. ඒ කියන්නේ ඔය try catch errors, throwable errors අන්න ඒ වගේ ඒවා. කොටින්ම කියුවොත් හැම try catch exception එකක්ම මේකේ append වෙලා save වෙනවා. append කියන්නේ තියෙන error ටික එහෙම්මම තියෙද්දි අලුත් error එක update කරන එක. මෙතනදි මගේ අතින් overwrite තේරිලා තියෙන්නේ. ඒක append කරගන්න.
    උදා:

    try {
    your code..​
    }catch (Exception ex) {
    Logger.getLogger(PCRemoteAccessApp.class.getName()).log(Level.SEVERE, null, ex);​
    }

    error_log.jpg

    මේ වගේ log එක නිකන් system.out.println(ex) කරාට එන්නේ නෑ. Logger එක හරහා තමා exception level එක්ක හදන්න ඕනා. මට logger class ගැන නම් වැඩිය මතක නෑ. ඒකත් මම හොයලා බලලා update කරන්නම්.
    මේ, හදිස්සි වෙන්න එපා. තව එකක් තියෙනවා කියලා දෙන්න. ඕකේ Redirect stdout (standard output) තේරුවොත් නම් පුටෝ සමහර වෙලාවට output log දැක්කට පස්සේ සමාජෙට මූන දෙන එකක් නෑ. ඒක තේරුවොත් ඔය අපේ තරුණ ඩිවෙලොපර්ස්ලා එහෙම ඔය ආතල් එකට System.out.print or println වලට බලන්න දාන ඒවා ඔක්කෝම log වෙනවා. ඔන්න මම සාම්පලයක් දැම්මා. :sorry:

    output_log.jpg

    #Step 06
    හරි මෙන්න මේකෙන් තමා වින්ඩෝස් සර්විස් මොකක් හරි ඔයාට ඕන නම් application invoke වෙද්දි පටන් ගන්න ඒක හදන්නේ මෙතනින්. අවාසනාවකට මම නම් ඒක ගැන දන්නේ නෑ මචංලා. ටස් ගාල ඊලට එකට මාරු වෙමු.

    Step_07.jpg

    #Step 07
    මේකෙන් අපිට අපේ file version එකේ වගේ පෙන්නන්න දාන්න පුලුවන්. කිසිම JAR එකක් එක පාර Final EXE වෙන්නේ නෑ නේ. ඉතින් කැමති නම් මෙතනින් පොඩි version control වගේ වැඩ පාරක් දාන්න. මේකෙන් exe application එකට effect එකක් වෙන්නේ නෑ. ඒකට version control software එකක් පාවිච්චි කරන්න. build කරපු jar එකත් එක්ක compiled exe එකේ version එකත් ගැලපෙන්න. එතකොට පස්සේ වෙලාවක ආපු error/bug එකක් උනත් කලින් revision වලින් හොයාගන්න පුලුවන්. මේකේ file version එක file property එකේ attributes වලට save වෙනවා.

    Step_08.jpg
    - - -
    File_Properties_2.jpg


    #Step 08
    Step_09.jpg

    මේකෙන් කැමති නම් 64-bit Executable එකක් හදාගන්න පුලුවන්. හැබැයි අපේ targetted machine එකේ JRE එක 64-bit වෙන්නත් ඕනා. නමුත් මේක Distributed app එකක් නම් මේක tick නොකර ඊලග අදියරට එන්න.

    #Step 09
    හරි පුටාලා. මේකෙන් කරන්නේ අපි හදන exe එකේ windows user account controller privilege හදන එක. සාමාන්‍ය exe ඇප්ලිකේෂන් එකක් නම් මේක As invoker තියන්න.

    Step_10.jpg

    නැත්නම් Highest available හරි Require administrator හරි දුන්නොත් exe එක run එක වෙද්දි UAC එකේ මෙන්න මෙහෙම වින්ඩෝ එකක් එනවා. එහෙම උනහම ඔයා මේ ඇප් එක Startup applications pool එකට දාන්න ඉන්නවා නම් UAC එකට ඔයාගේ permission හම්බෙනකන් වැඩ කරන්නේ නෑ.

    UAC.jpg

    #Step 10
    මේක තමා වැදගත්ම දේ. මොකෝ ඉතින් ලට්ට ලොට්ට තොගයක් හැදුවා JAR තවම exe එකට පූට්ටු කලේ නෑ නේ. මෙන්න මේකෙන් තමා ඒක කරන්නේ.

    Step_11.jpg

    දැන් ඕකේ ඔය කොල පාට + එක ඔබන්න. ඊට පස්සේ මෙන්න මෙහෙම වින්ඩෝ එකක් එයි. ඒකට දැල්බෝංචි project folder එකේ dist එකේ තියෙන compiled JAR එක ලබා දෙන්න. ඊට පසු ඉදිරියට යන්න OK අක්කාට මනාපය දෙන්න. මොකද බං ඔලුව කසන්නේ? දැල්බෝංචි කියුවේ Netbeans වලට. :P

    Step_11_Reference.jpg


    Step_12.jpg


    තව වැදගත් දෙයක්. අපි එක එක java library පාවිච්චි කරනවා නේ ඒවල function/method සහය පතන්න. ඒවා ඔන්න ඔය dist-->lib folder එකේ තියෙන්නේ. ඒකේ තියෙන jar library ටිකත් මෙතනට add කරගන්න. lib folder එකට ගිහින් Jar add කරගන්න. එහෙම නැති උනොත් error එකක් එනවා.

    Step_13.jpg

    මේකේ මම error handle කරපු පොඩි project එකක්. මම හිතලා මතලාම exe එක හදද්දි mysql-connector-java-5.0.8-bin එක අර library ගොඩට add කලේ නෑ. මේ මට ආපු error එකක්. හරියට error handle නැත්නම් application freeze වෙයි. ඒ නිසා exe app කියන්නේ ලොකු වගකීමක්. controlled environment(IDE Run) එකක execute කරනවා වගේ නෙවෙයි.

    Library_Error.jpg

    Seeing an error
    yb64vKd.gif


    හරි ඔය ඔක්කෝම එකතු කලා නම් කලබලෙන් ඊලග window එකට දුවන්නේ නැතුව මේ application එකේ main method [public void main(String[] args){}] එක මෙතනින් select කරලා දෙන්න application එක run/invoke වෙන්න.

    Step_14.jpg

    ඔය මම පෙන්නලා තියෙන්නේ මගේ තියෙන jFrame වලත් තියෙන Main method එක මෙතනට invoker එකක් විදියට පේන හැටි. හොඳ OOP Application එකක් නම් මෙහෙම තැනින් තැන invokers ඉතුරු කරන්න එපා. කොහොම උනත් ඔය මම select කරලා තියෙන්නේ මගේ app එකේ main method එක.

    #Step 11
    දැන් මෙතනට සෙට් වෙන්න ළමායි.

    Step_17.jpg

    මෙතනින් ඔයාලාගේ එකේ exe app එකේ අවම සහ උපරිම JRE එක application runtime condition එකක් විදියට දෙන්න පුලුවන්. උදාහරණෙකට අපි JDK 8 පාවිච්චි කලා කියමුකෝ. දැන් සාමාන්‍යෙන් හැම අලුත් පරිගණකයකම වගේ JRE දාලා එන්නේ. නමුත් ඒක පරණ නම් අපේ එකේ තියෙන අලුත් වැඩ කෑලි(JDK 8 New Lambda Expressions) වගේ implement කරලා නෑ. එහෙම උනහම runtime errors එනවා. ඉතින් application එක invoke වෙද්දි මෙතනින් ඒකත් තීරණය කරගන්න පුලුවන්.

    Step_16_i.jpg

    ඕනම නම් windows computer එකේ java home classpath එක තියෙන තැන් මේවලට අමතරව scan කරන්න කියලා මෙතනින් කියන්න පුලුවන්. නමුත් අපි මේක අලුත් පරිශීලකයෙක්ට දෙනවා නම් නොදන්න classpath scan කරන්න දාන්න ගිහින් exe run වෙද්දි අමාරුවේ වැටෙයි. එහෙම උනොත් මේක තමා වෙන්නේ.

    code-31.gif


    After fixing the classpath error

    code-26.gif

    #Step 12
    හරි දැන් ඔයාල තවත් ආස එකක් තමයි මේක. exe එක double click කරලා run වෙද්දි මෙතනින් පුලුවන් splash screen එකක් පෙන්නන්න. ඔය අනික් ඇප්ලිකේෂන් තරම් ටික වෙලාවක් තියෙන දරුණු ඒවා නෙවෙයි. පොඩි එකක්. අර දැන් මේසේ අනික් පැත්තෙන් තියන්න කියපු image එකේ path එක මෙතනට දෙන්න. මම පස්සේ පෙන්නන්නම් කොහොමද මේක සෙට් වෙන්නේ කියලා. ඒ උනාට ඔයාලා මෙතනට එකක් දාල බලන්න කොහොමද කියලා. මම දාපු static image එක තමා පෙන්නන්න වෙන්නේ. :sorry:

    Step_18.jpg

    #Step 13
    ඊලග window එකට ආවහම මෙතනින් පුලුවන් අපිට කැමති පොඩි custom description එකක් දෙන්න එක එක error/notification වර්ග වලට. නිකන් ඕකට ඇගිලි නොගහා next කරන එක තමයි පුටේ හොඳ.

    Step_19.jpg

    #Step 14
    මගේ මේ දිග ලිපිය කියවලා කම්මැලි ඔබලා බලා සිටින අවසාන මොහොත. මෙන්න මේ බාර් එක දිගටම පිරුනහම පුතේ අර පින් හදවතින් මට පින් දීලා exe එක run කරන්න තියෙන්නේ.. අවුලක් තියෙනවානම් අවුල ආපු මෙනු එක වම් පැත්තෙන් බලලා edit කරන්න. පස්සේ finish button එක ඔබන්න. ආයේ පාරක් exe setup wizard එක කොම්පයිල් වේවි. :rolleyes:

    Step_20.jpg


    Step_21.jpg



    Application First RUN

    Properties

    File_Properties_1.jpg


    App_Splash_Screen.jpg


    My_Splash_Screen.jpg


    Main_Window.jpg




    දැන් ඔන්න ඔයාලා දන්නවා කොහොමද Java ඇප්ලිකේෂන් එකක් .exe එකක් කරන්නේ කියලා. ඔන්න ඕක try එකක් දීලා නොදන්න එකෙක් ඉන්නවානම් මගේ post එකේ ලින්කුව දෙන්න. සරල සින්ගිලිස් වලින් තියෙන නිසා ලේසි නේ කියවන්න. ලොකු කස්ටක් කාලා මේක ලියුවේ. ඉතින් පොඩ්ඩක් සලකලා ගියාට කමක් නෑ.

    මම මේ පස්සේ මේක දැක්කේ, මෙන්න මේ වීඩියෝ එක ඩවුන්ලෝඩ් කරලා කොහොමද jar to exe convert කරන්නේ කියලා බලන්නත් පුලුවන්.

    Compressed File Size : 5.19MB


    FAQ
    1. Q: මම මගේ ප්‍රොජෙක්ටුවට edit එකක් කලා අයියේ. දැන් මම ආයෙත් මේ exe setup wizard එක මුල ඉඳන් run කරන්න ඕනා ද?

    A: නෑ. මේක අර අන්තිම වින්ඩෝ එකේදී setup config එක save කරලා තියා ගන්න. ප්‍රොජෙක්ටුවට අලුතින් library එකක් add හරි delete හරි කලේ නැත්නම් finish button එක ඔබන්න. වැඩේ හරි.

    2. Q: මේ setup file zip folder එකට පාස්වර්ඩ් එකක් දාලා නේ? මොකක්ද පාස්වර්ඩ් එක?

    A: ආ.. ඒක [email protected]



    කට්ටිය මේක බලලා jar to exe ගහන්න ඉගෙන ගෙන අනික් අය අතරේ ඉන්න හැටි පෙන්වන රූප රාමුවක් :P:rofl:

    U6HYo2S.gif


    මම මේ 2010 ඉගෙන ගත්ත එකක් අද බෙදා ගත්තේ. අඩුපාඩු නම් නැතුව ඇති කියලා හිතෙනවා. තියෙනවා නම් මට පෙන්නලා දෙන්න අනික් අයටත් හදා ගන්න එක්ක.

    එහෙනම් ජය වේවා!
    ty.gif


    ප.ලි: මේක ප්‍රයෝජනවත් කියලා හිතෙනවා නම් ත්‍රේඩ් එකේ
    thread_rate.jpg
    වලට හොඳ අගයක් ලබා දෙන්න.
     
    Last edited:

    owlX

    Well-known member
  • Jul 13, 2014
    1,321
    400
    83
    /usr/bin
    පට්ට මචං.. සෑහෙන්න මහන්සි වෙලා තියෙනවා කොටන්න.. :baffled:
    ++ ඇඩඩ්..
     

    The_Killer

    Well-known member
  • Jan 20, 2014
    11,053
    2,200
    113
    WA, Straya 🇦🇺🦘
    www.elakiri.com
    mchan patta.. elakirima thamai..:D :D :D :D :D :D :D


    I don't want this app. but thumbsup for ur effort in teaching this! rep++++++++


    THANK YOU



    පට්ට මචං.. සෑහෙන්න මහන්සි වෙලා තියෙනවා කොටන්න.. :baffled:
    ++ ඇඩඩ්..


    good job machan.. :D ++

    patttah ah :D

    thanks_alot.png