شنبه ۱۴ ژانویهٔ ۲۰۱۲
جمعه ۲ دسامبر ۲۰۱۱
مقدمه ای بر Thread ها در جاوا
Runnable
a=new Runnable();مجاز
نیست.اولین
روش برای آفریدن یک thread
بست
یک thread
از
کلاس آن است.
این
کار را فقط زمانی انجام دهید که کلاسی را
که میخواهید به شکل thread
بست
دهید هرگز نیاز به بست آن کلاس به دیگر
کلاسها را نداشته باشید.
این
کلاس در بسته ی java.lang
تعریف
شده است که نیاز به وارد کردن این بسته
دارید بنا بر این کلاسهای ما از این
تعریف آگاه می شوند.import java.lang.*;
public class Counter extends Thread
{
public void run()
{
....
}
}
مثال
بالایک کلاس جدید به نام Counter
ایجاد
میکند که کلاس Thread
را
بسط میدهد و متد Thread.run()
را
برای اجرای خود پیاده می کند.
متد
run
جایی
به کار میرود که همه ی وظایف کلاس Counter
انجام
شده باشد.
import java.lang.*;
public class Counter implements Runnable
{
Thread T;
public void run()
{
....
}
}
در
اینجا متد run
در
رابط Runnable
تعریف
و پیادهسازی شده است.
توجه
داشته باشید ما یک رابط از کلاس Thread
همچون
یک متغییر از کلاس Counter
داریم.
تنها
تفاوت میان دو متد، پیادهسازی متد
Runnable
است،
این کار انعطاف بیشتری در ایجاد کلاس Counter
در
اختیار ما قرار می دهد.
در
مثال بالا هنوز این فرصت وجود دارد که در
صورت لزوم کلاس Counter،
بسط داده شود.
بیشتر
کلاسهای ساخته شدهای که نیاز به اجرا
run
به
عنوان thread
داشته
ًباشند ، Runnable
را
پیاده ساری میکنند، از این رو آنها
برخی دیگر از وظایف کلاسهای دیگر را
احتمالاً بسط میدهند.گمان
نکنید که رابط Runnable
هر
کار واقعی را زمانی که Thread
اجرا
شده است انجام انجام میدهد.
این
تنها کلاس آفریده شده ایست، تا ایده ای
برای طراحی کلاس thread
باشد.
در
حقیقت، این یک محتوی بسیار کوچک است فقط
یک متد انتزاعی (abstract).
در
اینجا تعریف رابط Runnable
مستقیماً
از منابع جاوا آمده است.package java.lang;
public interface Runnable {
public abstract void run();
}
این
همه ی آن چیزی است که رابط Runnable
می
نامیم.یک
رابط فقط طرحی که کدام کلاسها باید
پیادهسازی شوند را ارائه می کند.
در
این حالت رابط Runnable،فقط
بر روی متد run
تمرکز
می کند.
بنا
بر این، بیشتر کار در کلاس thread
انجام
می شود.
یک
نگاه نزدیک تر به یک بخش در تعریف کلاس
thread
این
ایده رابه ما میدهد که چه چیز واقعاً در
حال انجام است:public class Thread implements Runnable {
...
public void run() {
if (target != null) {
target.run();
}
}
...
}
از کد بالا این مطلب آشکار است که کلاس thread همچنین رابط Runnable را پیادهسازی می کند.
Thread.run چک میکند تا اطمینان یابد هدف کلاس ( کلاسی که میرود تا همانند یک thread اجرا شود)
پوچ نیست، و سپس متد run به عنوان هدف اجرا می شود. زمانی که این اتفاق بیفتد متد run هدف همانند thread خود
اجرا خواهد شد.
شروع و پایان
از آنجایی که روشهای مختلفی برای ایجاد یک نمونه از thread در حال حاضر ارائه شده ، ما بحث خواهیم کرد که پیادهسازی
یک thread ها با روشهای در دسترس برای شروع و پایان آنها با استفاده از یک اپلت کوچک شامل یک thread برای
نمایش مکانیک:مثال و کد: CounterThread
اپلت بالا شمارش را از صفر شروع خواهد کرد و خروجی را در یک پنجره و در یک کنسول هردو به نمایش در خواهد آورد.
یک نگاه اجمالی این احساس را به ما میدهد که برنامه شمارش را شروع خواهد کرد و هر عدد را نمایش خواهد داد، اما این همه
چیز نیست. یک نگاه دقیقتر به اجرای این اپلت هویت ,واقعی آن را آشکار خواهد کرد.
یکشنبه ۳۰ ژانویهٔ ۲۰۱۱
چگونه به نت بینز پلاگین بیفزاییم؟
۱- از منو Tools گزینه ی Plugins را انتخاب کنید.
۲- سر برگ (تب) Download را انتخاب کنید.
۳- بر روی دکمه ی Add Plugins کلیک کنید.
۴- مسیر فایل پلاگین که به دات nbm ختم می شود را مشخص کنید.
۵- بر روی دکمه Install و در پایان بر روی دکمه OK کلیک کنید.
با سپاس از استاد شایسته علوی
یکشنبه ۲۳ ژانویهٔ ۲۰۱۱
مقدمهای بر خطا یابی جاوا و نت بینز
نت بینز پشتیبانی قدرتمندی برای برنامههای جاوا تدارک دیده است. در این درسنامه ما نگاهی بر اصول خطا یابی میاندازیم ، ابتدا تنظیم نقطه شکست در برنامه و مقادیر بازجویی در مدتی که برنامه اجرا میشود.
شکل ۱ یک برنامه ساده جاوا نشان میدهد این یک برنامه پیشرفته ای نیست و فقط برای شروع درسنامه ما نوشته شده است.
برنامه ما شامل یک جمله چاپ میباشد ، چنین جملهای بسیار ساده برای خطا یابی است . شکل ۲ خروجی برنامه را نمایش می دهد.
خب اجازه بدهید به قدم بعدی برویم و از ابزار خطا یابی که به وسیله نت بینز و جاوا تدارک دیده شده است استفاده کنیم. در شکل ۳ ما یک نقطه شکست ایجاد می کنیم. نقطه شکست باعث توقف برنامه میشود بنا بر این ما میتوانیم ببینیم چه چیزی روی میدهد مادامی که برنامه هنوز در حال اجراست.
مابرنامه را با دست اجرا نمیکنیم، ابتدا نقطه شکست را تنظیم میکنیم و برنامه را در حالت خطایابی اجرا می نماییم سپس صبر میکنیم تا برنامه به نقطه شکست برسد.
قدم بعدی این است که برنامه را ا جرا کنیم اما ما آن رابه روشی ویژه اجرا میکنیم تا از مزیت نقطه شکست استفاده کنیم. شکل ۴ نشان میدهد چگونه برنامه را در حالت خطا یابی اجرا کنیم.در حالت خطا یابی برنامه در خط شکست خواهد ایستاد. اجرا در حالت خطا یابی باعث میشود برنامه آهسته تر از حالت عادی اجرا شود اما این هزینه کمی است که ما میپردازیم تا از قدرت و قابلیت انعطاف حالت خطا یابی استفاده کنیم. حالت خطا یابی یک اثرکند کنندگی ناچیز بر اکثر برنامههای کوچک دارد.
در شکل ۵ برنامه در حالت خطا یابی اجرا شده است ، این برنامه اجرا میشود و تا خط شکست پیش میرود و سپس می ایستد. وقتی خط بعدی اجرا میشود خط شکست بوسیله نت بینز سبز می شود.
توجه: مطمئن شوید که نقطه شکست شما در مسیر اجرای برنامه باشد. اگر در مسیر نبود برنامه در آن نقطه نمی ایستد و نتیجهای حاصل نمی شود.
این قسمت خوب برنامه است. برنامه موقتآ از حرکت باز میایستد . ما میتوانیم حالت متغیر ها را تجربه کنیم و ببینیم چه رویدادی در حال وقوع است.
به خاطر داشته باشید که خط سبز روی خط بعدی است که اجرا شده است. خط کد هنوز اجرا نشده است.
در شکل ۶ موش واره بر روی متغیر آلفا است و نت بینز مقدار جاری متغیر را در یک بالن نما یش می دهد. خیلی خوب.
مقدار آلفا برابر ۳ است زیرا آن در خط ۱۱ به این صورت مقدار دهی شده است همان جایی که ابتدا اعلان شد .
شکل ۷
یکی دیگر از واژههایی که معرفی میکنیم مفهوم گام منفرد single-stepping خواهد بود. چون خط سبز شده هنوز اجرا نشده است ما بر روی دکمه Debug/Step یا بر روی دکمه F8 می فشاریم تا آن خط اجرا شود. خط سبز به خط بعدی منتقل میشود.
میتوانید از گام منفرد استفاده کنید تا مسیر کد را دنبال کرده و خطای منطقی را در کدی که نوشتهاید پیدا کنید.
یکشنبه ۱۶ ژانویهٔ ۲۰۱۱
ارث بری در جاوا ۲
Abstract انتزاعی
متد ها و کلاسها در جاوا میتوانند به شکل Abstract اعلان شوند. یک متد Abstract پیادهسازی ندارد، و یک کلاس Abstract نمیتواند داخل یک شی ساخته شود. با یک مثال این مسأله بهتر درک میشود ، ما از کلاس حیوان که پیش از این ساختیم استفاده می کنیم:
public abstract class Animal {
public boolean isAPet = true;
public String owner = “Fred”;
public void sleep() {
System.out.println(“Sleeping”);
}
public void eat() {
System.out.println(“Eating”);
}
}
با این کلاس شما نمیتوانید از عبارتAnimal a = new Animal(); 0 استفاده کنید زیرا آن abstract است. به هر روی بقیه آن کلاس میتواند درست همانند دیگر کلاسها تعریف شود. بجز اکنون ، شما نمیتوانید هر حیوان ویژه ای را درست کنید، شما به خود و دیگر برنامه نویسان تحمیل میکنید که یک حیوان ویژه همانند گربه یا سگ درست کنند.
متدهای abstract گیراترین قسمت ارث بری در جاوا است. متدی می سازید اما داخل آن را از کد پر نمی کنید! در اینجا مثالی است از یک متد abstract که ما آن را به کلاس حیوان اضافه میکنیم، متد move :
public abstract class Animal {
public boolean isAPet = true;
public String owner = “Fred”;
public void sleep() {
System.out.println(“Sleeping”);
}
public void eat() {
System.out.println(“Eating”);
}
public abstract void move();
}
توجه: این خیلی مهم است که شما از آکولاد برای متد های abstract استفاده نکنید! همچنین به خاطر داشته باشید که یک سمیکلون در انتها قرار دهید، و چنانچه میدانید کد ها را به طور منظم بنویسید.
بنابر این چه کاری میتوانید با این متد abstract انجام دهید در صورتی که هیچ چیزی در آن نیست؟ جواب در زیر کلاس قرار دارد. زیرا متد در سوپر کلاس به شکل abstract است و زیر کلاس باید این متد را پیادهسازی کند. این بدین معنی است که اکنون زیر کلاس در حال کار است تا تعیین کند کدام کد به متد میرود ، و متد در داخل زیر کلاس قرار دارد. اجازه دهید با پیادهسازی متد move در هردو کلاس سگ و گربه قدرت این روش را نشان دهیم.
Public class Dog extends Animals {
public void bark () {
System.out.println(“Woof!”) ;
}
public void move() {
System.out.println(“Running”) ;
}
}
public class Cat extends Animal {
public void meow () {
System.out.println(“Meow”) ;
}
public void move () {
System.out.println (“Prancing”);
}
}
اکنون همه حیوانات میتوانند متد های مشترک داشته باشند اما هنوز آن متد ها را به طور متفاوت اجرا می کنند. توجه کنید که اگر شما متد های abstract را از سوپر کلاس به زیر کلاس پیادهسازی نکنید ، زیر کلاس شما یک خطا خواهد داشت. این بدین معنی است که شما باید متد های abstract را پیادهسازی کنید.
خب اکنون شما باید سر انجام یک فهم درستی در ارث بری جاوا داشته باشید. اگر هنوز روشن نشدهاید مشکلی نیست . در مورد کلاسهای abstract و extend بیشتر بیاموزید. ببینید چه چیز هایی اجازه دارند و چه چیز هایی اجازه ندارند. تلاش کنید از کلاسی ارث ببرید و به کلاسهای دیگر ارث دهید و ببینید چه رویداد هایی انجام میشود. آزمایش بهترین راه یادگیری است، بنا بر این به جلو بروید و تلاش کنید. اگر در مورد این مثال سؤالی داشتید لطفآ به صورت کامنت بپرسید..
جمعه ۱۴ ژانویهٔ ۲۰۱۱
ارث بری در جاوا ۱
ارث بری در جاوا
برای درک بهتری از ارث بری حتمآ احتیاج دارید بدانید چگونه اشیاء کار میکنند تا بتوانید هر گونه احساسی نسبت به ارث بری در جاوا پیدا کنید. بنابر این پیشنهاد میکنم اگر میخواهید درک کاملی از این بحث داشته باشید به عقب برگردید و درس نامه های جاوای مقدماتی را مرور کنید، سه درسنامه در مورد اشیاء در جاوا.
به هر روی شما مجبور به استفاده از کلاسها و اشیاء هستید تا قسمتهای مختلف برنامه تان را نشان دهید. برای مثال می تونید یک کلاس سگ بسازید تا پس از آن اشیاء سگ که همه مشخصات یک سگ را دارد بسازید، و همچنین یک یک شی پرنده بسازید تا پس از آن اشیاء پرنده را خلق کنید که همچنین همه کرداری را که از یک پرنده انتظار دارید را داشته باشد. همانطور که می تونید تصور کنید شباهتهایی می تواند بین این دو شی وجود داشته باشد و برخی از این کد ها می توانند در هر دو کلاس تکراری شوند.
چه واکنشی خواهید داشت اگر بگویم که میتوانید یک شی حیوان درست کنید که این کار را برای شما انجام دهد. یعنی مانع کد های تکراری شود..... اینجا است که ارث بری در جاوا وارد می شود!!
Superclass یا کلاس بالاتر
وقتی در مورد ارث بری در جاوا بحث میکنیم ،اولین چیزی که ما به آن می نگریم، مفهوم کلاس بالاتر است. یک سوپر کلاس از نظر پایه مثل بقیه کلاسهای جاواست ، به جز آنکه ما میدانیم که میخواهیم دیگر کلاسها از آن ساخته شوند. اندوه مخورید در مورد اینکه چطور این اتفاق میافتد، اول اجازه بدید ببینیم یک سوپر کلاس چگونه به نظر می رسد
public class Animal {
}
اما صبر کنید، این فقط شبیه یک کلاس معمولی به نظر می رسد؟ بله درست است. یک سوپر کلاس میتواند شبیه هر کلاس دیگر باشد. بنابر این جادوی یک سوپر کلاس در داخل خودش نیست بلکه به در زیر کلاس subclass است.
Subclass یا زیر کلاس
یک زیر کلاس بچه ی کلاس مادر است. به ویژه، زیر کلاس از سوپر کلاس گرفته میشود. مثال زیر از سوپر کلاس بالا استفاده میکند
public class Dog extends Animal{
}
در اینجا یک واژه کلیدی جدیدextends وجود دارد که شما برای ساخت کلاس استفاده کردید. extends چیزی است که شما استفاده میکنید تا نشان دهید این کلاس یک زیر کلاس از یک کلاس بالاتر است.شما فقط میتوانید همیشه از extends برای یک کلاس استفاده کنید.
مثال حیوان Animal Example
خب پس نکته ارث بری در کجاست؟ نکته اینجاست که ما میتوانیم مقدار کد را کاهش دهیم و با استفاده از ارث بری در جاوا کد ها را بیشتر شبیه دنیای واقعی کنیم. اجازه بدید بگویم ما اشیاء سگ و گربه را داریم. سگ و گربه هر دو حیوانند بنا بر این به طور طبیعی ما میتوانیم یک سوپر کلاس به نام حیوان درست کنیم که ویژگیهای همه حیوانات را داشته باشد و سپس ویژگیهای خاص را برای یک سگ و یک گربه بسازیم.
اجازه دهید با سوپر کلاس یعنی کلاس حیوان شروع کنیم. اینجا می توانیم متغیر ها و متد هایی رو دست کنیم که همه حیوانات میتوانند داشته باشند. هم اکنون ما همه چیز را ساده میکنیم و فقط دو متغیر و دو متد که همه حیوانات میتوانند داشته باشند را درست می کنیم. اینجا کد ها نوشته شده
public class Animal {
public boolean isAPet = true;
public String owner = “Fred”;
public void sleep() {
System.out.println(“Sleeping”);
}
public void eat() {
System.out.println(“Eating”);
}
}
ما متغیر ها و متد های اصلی را برای همه حیوانات ساختیم. در این حالت، همه حیوانات ما یک متغیر بولی دارند که isAPet خوانده میشود که به صورت true مقدار دهی شده ، و owner به صورت یک رشته تعیین شده که مقدار آن Fred است. همه حیوانات میتوانند بخوابند و بخورند.
خب اکنون که تعیین کردیم چه چیزی حیوانات ما خواهند داشت، اجازه بدهید زیر کلاس آنها را بسازیم. قبلآ یک زیر کلاس به نام سگ ساختیم بنا بر این فقط از آن در اینجا استفاده می کنیم. این کلاس خالی است ولی درواقع آن به همه متد های public و protected کلاس بالا تر دسترسی دارد. این همانند این است که من همه آن متد ها را در کلاس سگ نوشته باشم. به مثال زیر نگاه کنید:
public static void main (String[] args) {
Dog d = new Dog();
d.sleep();
توجه داشته باشید که چرا برنامه بالا هیچ خطایی نمیدهد زیرا سوپر کلاس تمام متغیر ها و متد های public و protected خود را با زیر کلاس به اشتراک گذاشته است.
بنابر این شاید شما در شگفت باشید که دو پیراینده ی public و protected چه کاری انجام می دهند؟ اینها دو تا از سه سطح دسترسی هستند که در جاوا استفاده می شوند. اگر شما تا کنون این درسنامه ها را دنبال کرده باشید حتمآ public را زیاد دیدهاید ، اما protected برای شما جدید است. من در درسنامه بعدی عمیقآ به این بحث می پردازم ؛ چیزی که برای اکنون مهم است این دو پیراینده هر دو یکی هستند و به زیر کلاس این اجازه را میدهند که از متغیر ها و متد های سوپر کلاس استفاده کنند.
اکنون میتوانیم کد هایی را بنویسیم که اشیاء ویژه یک سگ را بنویسد ، اجازه بدید متدی بنویسیم به نام واق واق bark :
public class Dog extends Animal {
public void bark() {
System.out.println (“Woolf!”):
}
}
فقط سگها میتوانند واق واق کنند بنا بر این زیر کلاس این متد را دارد. سوپر کلاس هرگز به این متد دسترسی ندارد
اجازه بدید یک کلاس گربه بسازیم که آن هم زیر کلاس حیوان است.
public class Cat extends Animal {
این کلاس نیز خالیست اما این همان دسترسی به متد ها و متغیر های سوپر کلاس را دارد. اجازه بدید یک متد میو میو meow بسازیم :
public class Cat extends Animal {
public void meow () {
System.out.println(“Meow!”);
}
}
این متد فقط در کلاس گربه وجود دارد. سگها چیزی از این متد نمیدانند و همچنین سوپر کلاس هم چیزی از این متد نمی داند. و این همان چیزی است که ارث بری در جاوا را چنین قدرتمند می کند: توانایی تعریف متد ها و متغیر های مشترک در یک مکان و استفاده از آنها دوباره و دوباره. جاوا اشیاء خودش را به شکل سلسله مراتبی میسازد و چه زیباست از این فایده استفاده کنیم. حتی دلایل بیشتری برای قدرتمندی ارث بری در جاوا وجود دارد اما ما به آن دلایل در این درس نامه نمی پردازیم.
Abstract انتزاعی
چهارشنبه ۱۲ ژانویهٔ ۲۰۱۱
آموزش گام به گام جاوا : ۵
گاهی پیش میاد که می خواهید از جر فایل هایی که قبلآ ساخته اید یا مثلآ از اینترنت دانلود کردید در یک برنامه جدید استفاده کنید در این درس نامه این کار رو یاد می گیرید.
من برای انجام این کار از نت بینز ۶.۸ استفاده کردم.
۰- نت بینز را باز کنید
۱- از منو فایل گزینه New Project را انتخاب و از پنجره باز شده گزینه Java و از منو روبرو گزینه java Desktop application را انتخاب کنید نام پروژه مثلآ RunJar را انتخاب و تیک set as Main Project را انتخاب کنید.
۲- از منو Palette یک Button انتخاب و بر روی فریم قرار دهید.
۳- بر روی دکمه کلیک راست از منو باز شده گزینه Event و از منو باز شده گزینه Action وسپس گزینه actionPerformed را انتخاب کنید و در محل ویژه باز شده دستور زیر را تایپ کنید.
JavaLauncher.execJar(getResourcePath("resource" + File.separator + "runtest.jar"), jvmargs);
۰
۰
/**
*
* @author kian
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
/**
* JavaLauncher Provides an easy way to launch java appliations. The
ClasspathBuilder class* is handle to use in conjunction with this class.
* @author Jason Ederle
*/
public class JavaLauncher {
private static boolean debug = false;
/**
* Launch a java program.
* @param mainClass - class with main method
* @param classpath - the java classpath
* @param jvmargs - arguments for the jvm
* @param properties - any system properties
* @param xDockName - Mac os x, application name
* @param xDockIcon - Mac os x, application icon
*/
public static Process exec(String mainClass, String classpath, String[] jvmargs, String[] properties, String xDockName) throws Exception {
//get a jvm to execute with
String jvm = findJVM();
StringBuffer strClasspath = new StringBuffer("." + File.pathSeparator + classpath);
//combine all the arguments into 1 array.
String[] allArguments = new String[properties.length + jvmargs.length];
System.arraycopy(jvmargs, 0, allArguments, 0, jvmargs.length);
System.arraycopy(properties, 0, allArguments, jvmargs.length, properties.length);
//build the command with jvm, arguments, and mainclass
String[] command = new String[5 + allArguments.length];
//put java command in place
command[0] = jvm;
//add all the arguments
System.arraycopy(allArguments, 0, command, 1, allArguments.length);
//set application name
command[allArguments.length + 1] = "-Xdock:name=" + xDockName;
command[allArguments.length + 2] = "-classpath";
command[allArguments.length + 3] = "\"" + strClasspath + "\" ";
command[allArguments.length + 4] = mainClass;
String[] env = {};
StringBuffer wholeCommand = new StringBuffer();
for (int i = 0; i < proc =" Runtime.getRuntime().exec(command);" jvm =" findJVM();" comm =" new" proc =" Runtime.getRuntime().exec(comm);" inputstream =" proc.getErrorStream();" inputstreamreader =" new" bufferedreader =" new" line =" bufferedreader.readLine())" value = " + proc.exitValue()); } } catch (InterruptedException e) { System.out.println(" jvm =" null;" jvm =" System.getProperty(" jvm ="=" jvm = "java" jvm =" jvm" style="text-align: right;">
String mainPath = null;
String mainElement = null;
URL mainURL = null;
if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:", "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split(File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
} else {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:" + File.separator, "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split("\\" + File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
}
return mainURL;
}public URL getResourcePath(String yourPath) {
String mainPath = null;
String mainElement = null;
URL mainURL = null;
if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:", "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split(File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
} else {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:" + File.separator, "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split("\\" + File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
}
return mainURL;
}public URL getResourcePath(String yourPath) {
String mainPath = null;
String mainElement = null;
URL mainURL = null;
if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:", "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split(File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
} else {
try {
URL inputURL = getClass().getResource("");
if (inputURL.toString().contains("!")) {
File file = new File(getClass().getResource("").getFile());
inputURL = new URL("file", "", file.getParent());
// JOptionPane.showMessageDialog(null, "1 " + inputURL.toString());
mainElement = inputURL.toString().replace("file:file:" + File.separator, "");
// JOptionPane.showMessageDialog(null, "2 " + mainElement);
String element = URLDecoder.decode(mainElement.substring(0, mainElement.lastIndexOf(File.separator)) + File.separator, "utf-8");
// JOptionPane.showMessageDialog(null, "3 " + element);
mainPath = element.concat(yourPath);
// JOptionPane.showMessageDialog(null, "4 " + mainPath);
mainURL = new URL("jar", "", mainPath);
} else {
String[] strArray = yourPath.split("\\" + File.separator);
mainURL = new URL("jar", "", System.getProperty("user.dir") + File.separator + strArray[0] + File.separator + strArray[1]);
}
} catch (Exception ex) {
}
}
return mainURL;
}
۰
۷- برنامه را کلین و بیلد کنید و سپس اجرا کنید.
با سپاس از استاد شایسته علوی