۱۳۸۹ بهمن ۱۰, یکشنبه

چگونه به نت بینز پلاگین بیفزاییم؟

۰- نت بینز را اجرا کنید
۱- از منو Tools گزینه ی Plugins را انتخاب کنید.
۲- سر برگ (تب) Download را انتخاب کنید.
۳- بر روی دکمه ی Add Plugins کلیک کنید.
۴- مسیر فایل پلاگین که به دات nbm ختم می شود را مشخص کنید.
۵- بر روی دکمه Install و در پایان بر روی دکمه OK کلیک کنید.

با سپاس از استاد شایسته علوی

۱۳۸۹ بهمن ۳, یکشنبه

مقدمه‌ای بر خطا یابی جاوا و نت بینز

English

نت بینز پشتیبانی قدرتمندی برای برنامه‌های جاوا تدارک دیده است. در این درسنامه ما نگاهی بر اصول خطا یابی می‌اندازیم ، ابتدا تنظیم نقطه شکست در برنامه و مقادیر بازجویی در مدتی که برنامه اجرا می‌شود.


شکل ۱ یک برنامه ساده جاوا نشان می‌دهد این یک برنامه پیشرفته ای نیست و فقط برای شروع درسنامه ما نوشته شده است.




برنامه ما شامل یک جمله چاپ می‌باشد ، چنین جمله‌ای بسیار ساده برای خطا یابی است . شکل ۲ خروجی برنامه را نمایش می دهد.

خب اجازه بدهید به قدم بعدی برویم و از ابزار خطا یابی که به وسیله نت بینز و جاوا تدارک دیده شده است استفاده کنیم. در شکل ۳ ما یک نقطه شکست ایجاد می کنیم. نقطه شکست باعث توقف برنامه می‌شود بنا بر این ما می‌توانیم ببینیم چه چیزی روی می‌دهد مادامی که برنامه هنوز در حال اجراست.

مابرنامه را با دست اجرا نمی‌کنیم، ابتدا نقطه شکست را تنظیم می‌کنیم و برنامه را در حالت خطایابی اجرا می نماییم سپس صبر می‌کنیم تا برنامه به نقطه شکست برسد.

قدم بعدی این است که برنامه را ا جرا کنیم اما ما آن رابه روشی ویژه اجرا می‌کنیم تا از مزیت نقطه شکست استفاده کنیم. شکل ۴ نشان می‌دهد چگونه برنامه را در حالت خطا یابی اجرا کنیم.در حالت خطا یابی برنامه در خط شکست خواهد ایستاد. اجرا در حالت خطا یابی باعث می‌شود برنامه آهسته تر از حالت عادی اجرا شود اما این هزینه کمی است که ما می‌پردازیم تا از قدرت و قابلیت انعطاف حالت خطا یابی استفاده کنیم. حالت خطا یابی یک اثرکند کنندگی ناچیز بر اکثر برنامه‌های کوچک دارد.


در شکل ۵ برنامه در حالت خطا یابی اجرا شده است ، این برنامه اجرا می‌شود و تا خط شکست پیش می‌رود و سپس می ایستد. وقتی خط بعدی اجرا می‌شود خط شکست بوسیله نت بینز سبز می شود.


توجه: مطمئن شوید که نقطه شکست شما در مسیر اجرای برنامه باشد. اگر در مسیر نبود برنامه در آن نقطه نمی ایستد و نتیجه‌ای حاصل نمی شود.

این قسمت خوب برنامه است. برنامه موقتآ از حرکت باز می‌ایستد . ما می‌توانیم حالت متغیر ها را تجربه کنیم و ببینیم چه رویدادی در حال وقوع است.

به خاطر داشته باشید که خط سبز روی خط بعدی است که اجرا شده است. خط کد هنوز اجرا نشده است.


در شکل ۶ موش واره بر روی متغیر آلفا است و نت بینز مقدار جاری متغیر را در یک بالن نما یش می دهد. خیلی خوب.

مقدار آلفا برابر ۳ است زیرا آن در خط ۱۱ به این صورت مقدار دهی شده است همان جایی که ابتدا اعلان شد .

شکل ۷

یکی دیگر از واژه‌هایی که معرفی می‌کنیم مفهوم گام منفرد 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 بیشتر بیاموزید. ببینید چه چیز هایی اجازه دارند و چه چیز هایی اجازه ندارند. تلاش کنید از کلاسی ارث ببرید و به کلاس‌های دیگر ارث دهید و ببینید چه رویداد هایی انجام می‌شود. آزمایش بهترین راه یاد‌گیری است، بنا بر این به جلو بروید و تلاش کنید. اگر در مورد این مثال سؤالی داشتید لطفآ به صورت کامنت بپرسید..


لینک انگلیسی English

۱۳۸۹ دی ۲۴, جمعه

ارث بری در جاوا ۱

ارث بری در جاوا

English

برای درک بهتری از ارث بری حتمآ احتیاج دارید بدانید چگونه اشیاء کار می‌کنند تا بتوانید هر گونه احساسی نسبت به ارث بری در جاوا پیدا کنید. بنابر این پیشنهاد می‌کنم اگر می‌خواهید درک کاملی از این بحث داشته باشید به عقب برگردید و درس نامه های جاوای مقدماتی را مرور کنید، سه درسنامه در مورد اشیاء در جاوا.


به هر روی شما مجبور به استفاده از کلاس‌ها و اشیاء هستید تا قسمت‌های مختلف برنامه تان را نشان دهید. برای مثال می تونید یک کلاس سگ بسازید تا پس از آن اشیاء سگ که همه مشخصات یک سگ را دارد بسازید، و همچنین یک یک شی پرنده بسازید تا پس از آن اشیاء پرنده را خلق کنید که همچنین همه کرداری را که از یک پرنده انتظار دارید را داشته باشد. همانطور که می تونید تصور کنید شباهت‌هایی می تواند بین این دو شی وجود داشته باشد و برخی از این کد ها می توانند در هر دو کلاس تکراری شوند.


چه واکنشی خواهید داشت اگر بگویم که می‌توانید یک شی حیوان درست کنید که این کار را برای شما انجام دهد. یعنی مانع کد های تکراری شود..... اینجا است که ارث بری در جاوا وارد می شود!!


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 را انتخاب کنید و در محل ویژه باز شده دستور زیر را تایپ کنید.

String[] jvmargs = {" "};
JavaLauncher.execJar(getResourcePath("resource" + File.separator + "runtest.jar"), jvmargs);
۰
خب حالا باید پکیج زیر را وارد کنید

import java.io.File;
۰
۴- حالا باید کلاس JavaLauncher بسازیم

package runjar;
/**
*
* @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 = {};


//combine to printable string for debugging
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;">

۵- کد های زیر را به کلاس RunJarView اضافه کنید.و سپس پکیج هایی رو که نت بینز هشدار میده import کنید.


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;
}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;
}


۰


۶- یک پوشه به نام resource در پوشه RunJar بسازید و فایل جر مورد نظر را که در اینجا به نام runtest هست را در آن قرار دهید.
۷- برنامه را کلین و بیلد کنید و سپس اجرا کنید.

با سپاس از استاد شایسته علوی

۱۳۸۹ دی ۱۹, یکشنبه

هش ماپ Hash map

درادامه مجموعه های جاوا:

به هر حال مجموعه های جاوا خیلی بهتر از آرایه ها هستند. در اینجا ما hash map را معرفی می‌کنیم یک hash map یک رابطه یک به یک بین یک شی به شی دیگر است. اجازه دهید به روش دیگر برای کسانی که نمی‌خواهند ریاضی را حفظ کنند توضیح دهم.


اجازه دهید فرض کنیم شما می‌خواهید به‌ حساب ایمیلتان دسترسی پیدا کنید. شما نمی‌توانید این کار را انجام دهید مگر آنکه ابتدا لاگین کنید. در صفحه ی لاگین شما باید نام کاربری و رمز عبور خود را وارد کنید و در صورتی که آن دو ترکیب درست بود می‌توانید به حساب ایمیلتان درسترسی پیدا کنید.


یک hash map به طور مشابه کار می کند. شما باید یک ورودی مناسب داشته باشید تا یک خروجی درخور تحویل بگیرید. هر ورودی دقیقآ به یک خروجی مرتبط می شود. در مثال قبلی یک ترکیب نام کاربری و رمز عبور به دقیقآ یک حساب ایمیل منجر می شود.


در اینجا می تونید یک نمونه کد hash map ببینید



دوباره شما جمله import را فراموش کردید. به طور معمول می‌توانید جمله import ی را که احتیاج دارید به شکل زیر تایپ کنید.


Import java.util.NameOfObject


و به جای نام شی از نام مجموعه‌ای که استفاده می‌کنید استفاده کنید که در اینجا HashMap است. همچنین می‌توانید با گرفتن کلید های Ctrl + Shift + O به طور خود کار هر چیزی را در اکلیپس وارد یاimport کنید.


اگر به HashMap ی که ساخته این نگاه کنیم می‌بینیم اولین مقدار و همچنین دومین آن هر دو استرینگ هستند. البته شما می تونید هر نوع ترکیبی داشته باشید.


شما از یک کلید برای بدست آوردن یک مقدار استفاده می کنید. یک کلید درست برابر یک مقدار، درست مثل یک نام کاربری برابر یک رمز عبور.


وارد کردن یک کلید/مقدار جدید آسان است


map.put(“Me” , “Password”);


و به شکل زیر آن‌ها را حذف می‌کنید


map.remove(“Me”);


اگر یک آرایه از کل کلید ها در یک هاش مپ بخواهید می‌توانید از متد KeySet استفاده کنید


String [] keys = map.KeySet ().toArray(new String[map.size()]);


این نسبتآ خدعه آمیز است. متد KeySet یک مجموعه Set را برمی گرداند. سپس آن مجموعه به یک آرایه ای از استرینگ Strings با ایجاد یک new String تبدیل می‌شود که طولی برابر اندازه هش مپ دارد. سپس آن آرایه در یک آرایه دیگر که کلید keys خوانده می‌شود ذخیره می شود. دلیل آنکه من یک آرایه از رشته‌ها strings درست کردم این است که کلیدها keys همه از قبل رشته Strings هستند.


چگونه است که هش مپ ها مفید هستند؟ آن‌ها به شما این اجازه را می‌دهند که اشیاء را با در نظر گرفتن دیگر اشیاء در عوض مقادیر لیست شده ذخیره کنید، همانند آنچه شما با یک ArrayList انجام می دهید



نکته: تکرار می‌کنم شما نمی‌توانید در ArrayList ها ، HashMap ها و یا هر مجموعه ی جاوا دیگر نوع های اولیه primitive types را ذخیره کنید. مجموعه های جاوا فقط اشیاء را ذخیره می کند. این بسیار مهم است پس فراموش نکنید.


امیدوارم این نوشتار مقدمه مفیدی در استفاده از انواع توسعه یافته ی مجموعه ها در اختیار شما قرار داده باشد. آن‌ها ابزار های قدرتمندی هستند به شرط آنکه به جا استفاده شوند و می‌توانند قابلیت‌های برنامه شما را به طور چشمگیری ارتقاء دهند.مجموعه های جاوا بیش از چیزی هستند که من در اینجا لیست کردم ؛ من به شدت شما را تشویق می‌کنم که به بقیه آن‌ها نگاهی بیندازید، بیاموزید چگونه از آن‌ها استفاده کنید و سپس در برنامه‌های خودتان به کار بگیرید.

۱۳۸۹ دی ۱۷, جمعه

لیست آرایه ها و هاش مپ ها Java Collections - ArrayLists and HashMaps

English


مقدمه

لیست آرایه؟ هاش مپ؟ تری ست؟

مجموعه های جاوا مهمترین ابزار برای ذخیره بیشتر انواع داده‌های پویا می باشند. چه اتفاقی خواهد افتاد اگر شما پیشاپیش ندانید چه مقدار داده وجود خواهد داشت؟ چه اتفاق خواهد افتاد اگر نوع داده‌ها یی که می‌خواهید ذخیره کنید از یکی از انواع اصلی داده نباشد؟ آنچه من در اینجا می‌خواهم عنوان کنم این است که چه اتفاقی خواهد افتاد اگر برای مثال من بخواهم یک گروه از اشیاع یک سگ را ذخیره کنم. البته باید از یک آرایه استفاده کنم ولی اگر پیشاپیش ندانم آن‌ها چه تعداد هستند چطور؟ اگر من بخواهم بین داده‌ها یا پیوند ها …..یک رشته متنی با یک شی ویژه نسبتی برقرار کنم چطور؟


خب برویم یک نگاه کوتاه و ساده به مجموعه ها در جاوا بیندازیم و یاد بگیریم چگونه آن‌ها را به کار ببریم.


ArrayList


اجازه بدید فرض کنیم شما یک شبیه ساز زمین را می سازید و شما یک جمعیت انسانی دارید که در حال رشد است. اگر انسان یک شی باشد چند شی انسانی در پایان شبیه سازی وجود خواهند داشت؟ چه اتفاقی خواهد افتاد در پایان این شبیه سازی؟ چگونه شما خواهید دانست چقدر شی انسانی خواهید داشت، قبل از اینکه آرایه ها را بسازید تا بتوانید همه آن‌ها را در آن ذخیره کنید؟ درست این است که شما در عمل احتمالآ می تونید یک حدس بزنید، و چنانچه شما احتمالاً می دونید این حدس قابل قبول نیست؟


جاوا یک شی بطور باورنکردنی مفیدی به نام ArrayList دارد. ArrayList جاوا اصولآ یک آرایه داینامیک است. وقتی شما این شی را می سازد شما در کل یک سایز برای آن تعیین نمی کنید. اجازه بدید من آن را بهتر بگویم شما احتیاج ندارید که یک اندازه برای ArrayList تعیین کنید بله این آرایه ایست که ابتدا به امر خالی است


یک ArrayList شبیه چیست؟ این یک نوع کلک است. زیرا یک ArrayList می‌تواند هر چیزی را ذخیره کند، ما می‌ خواهیم اطمینان حاصل کنیم که این دقیقآ همان چیزی است که می‌خواهیم ذخیره نماییم. اجازه دهید یک مثال سریع انجام دهیم و بگوییم ما می‌خواهیم ArrayList اعداد صحیح را ذخیره نماید.


توجه: Integer و int یکسان نیستند. Integer یک شی است و int یک نوع اولیه است. جاوا می‌تواند آن‌ها را به سادگی به کار بگیرد.


لینک کد


اگر از اکلیپس استفاده کنید زیر خط ArrayList خط قرمز مشاهده خواهید کرد این به خاطر این است که شما نیاز دارید ArrayList را به شکل زیر import کنید.


import java.util.ArrayList;


بنابر این شما چطور یک مقدار را به آن اضافه می کنید؟ در زیر می‌توانید ببینید چگونه این عمل انجام می شود.


Array.add(1);

می‌خواهید چیزی را از از ArrayList بردارید؟ خب مشکلی نیست در اینجا راه هایی برای این کار به شما نشان می دهیم.


Array.remove();


با این کار شما عنصر صفرم را از آرایه حذف می کنید.( به خاطر داشته باشید این به معنی عنصر اول در جاوا می باشد). اگر آن گزینه در وسط لیست قرار داشته باشد لیست به طور خودکار کوتاه می‌شود و به این شکل رخنه ای در داده‌های شما ایجاد نمی‌شود. شسته‌رفته بود نبود؟


چگونه می‌توانیم به یک عنصر ویژه دسترسی داشته باشیم؟ بسیار آسان است:


array.get(0);


پس از آنکه من ArrayList را کشف کردم تقریبآ کاملآ آرایه ها را کنار گذاشتم . زیرا لیست آرایه ها به طور باور‌نکردنی قدرتمند هستند.

هش ماپ را در اینجا بخونید