During learn and experience

۲۳ مطلب با موضوع «Java SE» ثبت شده است

کارگاه دو روزه رایگان برنامه نویسی Functional در جاوا ۸ (دوره چهارم)

با همت و حمایت شرکت رایان هم افزا، هفته دیگه دوره چهارم کارگاه برنامه نویسی Functional در جاوا ۸ همچنان بصورت رایگان برگزار خواهد شد. برای این دوره از سرویس evand برای ثبت نام استفاده کردیم و واقعا ازشون راضی هستیم. سرویسشون امکانات فوق العاده ای داره.

خیلی دوست داشتم یجوری توی این دوره Javaslang رو هم جا بدم ولی هم زمان کارگاه کمه و هم یکم سبک فانکشنال Javaslang متفاوت از چیزیه که توی Java 8 وجود دارد و خیلی هم با هم همپوشانی دارن ولی حتما اشاره ای به Javaslang هم می کنم.

 

۰۴ شهریور ۹۵ ، ۱۰:۲۹ ۱ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

استفاده از Akka در Kotlin

زبان برنامه نویسی Kotlin به تازگی نسخه یکش عرضه شده و بنظر میرسه داره کم کم جای خودشو بین توسعه دهندگان بخصوص توسعه دهندگان روی JVM باز میکنه. اگه بخام Kotlin رو با اسکالا مقایسه کنم که بنظرم حرفی برای گفتن نداره ولی خب به نسبت جاوا امکانات خیلی بیشتری داره. مرور زمان و بزرگ شدن code base پروژه هایی که از Kotlin استفاده می کنند مشخص میکنه Kotlin تا کجاها میتونه جلو بره و محدودیت هاش چیه.

یکی از قابلیت های Kotlin تعامل (interoperability) خوب اون با کدهای جاوا است. برای همین سعی کردم یک پروژه درست کنم و از Akka java API در اون پروژه Kotlin استفاده کنم و ببینم میشه برنامه Akka با Kotlin نوشت.

پروژه کامل رو در github قرار دادم که در حد یک hello work در akka، البته کد معادل جاوا هم در پروژه وجود داره:

package hello

import akka.actor.*
import akka.dispatch.OnComplete
import akka.pattern.Patterns.ask;
import scala.concurrent.Await
import scala.concurrent.Future;
import scala.concurrent.duration.Duration
import java.util.concurrent.TimeUnit

fun main(args: Array<String>) {
    val system = ActorSystem.create("MySystem")
    val myActor = system.actorOf(Props.create(MyActor::class.java), "myActor")
    val testActor = system.actorOf(Props.create(TestActor::class.java), "testActor")

    myActor.tell("test", testActor);
    testActor.tell("ask", myActor);

}

class MyActor : UntypedActor() {

    data class Greeting(val from: String)

    object Goodbye

    override fun onReceive(message: Any?) = when (message) {
        "test" -> println("received test")
        is Greeting -> {
            println("I was greeted by " + message.from)
            sender.tell("hello " + message.from, self)
        }
        is Goodbye -> println("Someone said goodbye to me.")
        else -> println("received unknown message")
    }
}

class TestActor : UntypedActor() {
    override fun onReceive(message: Any?) {
        when (message) {
            "ask" -> {
                println("received ask")
                val future: Future<Any> = ask(sender, MyActor.Greeting("Saeed"), 5000)

                future.onComplete(object : OnComplete<Any?>() {
                    override fun onComplete(failure: Throwable?, result: Any?) {
                        if (failure != null) {
                            println("We got a failure, handle it here")
                        } else {
                            println("result = " + result as String)
                        }
                    }
                }, context.dispatcher())
            }
            else -> println("received unknown message")
        }
    }
}

همونطور که توی کد میبینید دستور when یجورایی یه switch case پیشرفته جاوا و اصلا با pattern matching اسکالا قابل مقایسه نیست. data کلاس های Kotlin کاربرد خوبی برای تعریف پیغام ها در Akka داره (از استاتیک اینر کلاس در جاوا بهتره). از monad و این چیزا هم در Kotlin خبری نیست که نشون میده اسکالا چه زبان قدرتمندیه.

استفاده از Akka Scala API در Kotlin تقریبا غیر ممکنه چون بسیاری از توابع و کلاس های اسکالا no name provided هستند.

نکته عجیب دیگه ای هم که مشاهده کردم این بود که Intellij Idea که IDE رسمی Kotlin چند تا از سینتکس های Kotlin رو نمی تونست پارس کنه و error الکی میده!

بمنظور پرسیدن سوال و تبادل نظر یک نسخه از discourse بالا آوردن که خیلی جالبه.

در نهایت فکر می کنم Kotlin هنوز جای کار داره و بنظرم در خوشبینانه ترین حالت بتونه در حد groovy رشد کنه ولی در کل تجربه خوبی بود.

۲۲ ارديبهشت ۹۵ ، ۰۰:۰۳ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

استفاده از CompletableFuture برای برنامه نویسی concurrent به سبک functional در جاوا 8

اولین بار که با کلاس Future در Scala و بعدش Akka آشنا شدم که با اون میشد با یک سبک جدید و ساده تر برنامه نویسی concurrent کرد خیلی مشتاق بودم که معادلی براش تو دنیای جاوا پیدا کنم. متاسفانه اینترفیس Future که در جاوا 5 معرفی شده بود بسیار نقص داره و نمی توان کارهای زیبایی که با Future در اسکالا انجام میشه رو باهاش انجام داد. تا اینکه در Play Framework با Promise آشنا شدم که تقریبا معادل جاوایی Future در اسکالا ولی با امکانات محدودتر بود.

سبک برنامه نویسی concurrent با Future یک سبک functional که هم کدنویسی concurrent رو ساده تر می کنه و هم خواناتر. جاوا 8 با آوردن کلاس CompletableFuture و همراهی Lambda expression ها و Stream ها این سبک برنامه نویسی concurrent به سبک functional رو برای توسعه دهندگان جاوا به ارمغان آورده. در مثال زیر یک نام و یک عدد قرار است با تاخیر بدست بیایند ولی برای چاپ خروجی به وجود نتیجه هر دو محاسبه احتیاج است که با استفاده از CompletableFuture آن دو مقدار بر روی یک ThreadPool جدید محاسبه می شوند و با اینکه مقدار نام زودتر بدست می آید ولی باید منتظر بماند تا مقدار عدد نیز محاسبه شود:

    public static void main(String[] args) { 
 
        CompletableFuture<Integer> futureNumber = CompletableFuture.supplyAsync(() -> { 
            delay(2000); 
            System.out.println("getting number finish"); 
            return 12345; 
        }, executor); 
 
        CompletableFuture<String> futureName = CompletableFuture.supplyAsync(() -> { 
            delay(1000); 
            System.out.println("getting name finish"); 
            return "Saeed"; 
        }, executor); 
 
        System.out.println("do some normal work"); 
 
        futureNumber.thenCombineAsync(futureName, (number, name) -> { 
            System.out.println(name + " " + number); 
            return null; 
        }, executor).join(); 
 
    } 
 
    private static final Executor executor = Executors.newFixedThreadPool(10, 
            r -> { 
                Thread thread = new Thread(r); 
                thread.setDaemon(true); 
                return thread; 
            } 
    ); 
 
    public static void delay(long time) { 
        try { 
            Thread.sleep(time); 
        } catch (InterruptedException e) { 
            throw new RuntimeException(e); 
        } 
    } 

 

یکی دیگه از قابلیت های خوب CompletableFuture استفاده از آنها در Stream های جاوا 8 بخصوص وقتی از parallel stream ها استفاده می کنیم.

 

۰۱ اسفند ۹۴ ، ۲۲:۳۳ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

گارگاه رایگان دو روزه برنامه نویسی Functional در جاوا ۸

یکی از چیزایی که از رایان خوشم میاد همین لارج بازیاشه. یه دوره رایگان دیگه در قالب کارگاه عملی رایگان دو روزه برنامه نویسی Functional در جاوا ۸. تو این دو جلسه کلی به سبک functional در جاوا ۸ کد میزنیم و البته برای جذب نیرو در رایان هم تبلیغ می کنیم.

 

اطلاعات بیشتر

 

۱۱ بهمن ۹۴ ، ۱۲:۰۹ ۲ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

کپی فایل های موجود در یک Playlist در Rhythmbox با استفاده از Java 8

من برای گوش دادن موسیقی در اوبونتو از Rhythmbox استفاده می کنم و خیلی ازش راضیم بخصوص از این قابلیتش که تعداد دفعات گوش دادن به یک آهنگ رو نشون میده و بمرور زمان می تونی بفهمی از چه آهنگ هایی بیشتر خوشت میاد و به راحتی هم میزاره بر اساس همین تعداد دفعات گوش دادن Playlist درست کنی. حالا مشکل من از اینجا شروع شد که میخواستم آهنگ های موجود در Playlist مربوط به آهنگ هایی که بیشتر گوش دادم رو بریزم تو USB که بتونم تو ماشین و تلویزیون گوششون کنم ولی Rhythmbox فقط این امکان رو داره که Playlist هارو روی CD یا DVD رایت بزنه! حالا تو این همه فولدر باید چطوری این فایل هارو پیدا می کردم و کپیشون می کردم رو USB. به سرم زد که این کارو با Stream های Java 8 انجام بدم. با یه رفیق پایه دو نفری حدود ۴۵ دقیقه ای کد جاوا نوشتیم که این کارو انجام میده. ابتدا Playlist مورد نظرمو در قالب فایل با پسوند pls ذخیره کردم و بعد با Stream های Java 8 خط به خط پردازشش کردم:

import java.io.*; 
import java.net.URLDecoder; 
import java.nio.channels.FileChannel; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.stream.Stream; 
 
public class Main { 
 
    public static void main(String args[]) { 
 
        String playlistName = "my top.pls"; 
 
        try (Stream<String> stream = Files.lines(Paths.get(playlistName))) { 
 
            stream.filter(line -> line.startsWith("File")) 
                    .map(fileLine -> getFileName(fileLine.split("file://")[1])) 
                    .forEach(fileName -> copyFile(fileName)); 
 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
 
    } 
 
    private static String getFileName(String s) { 
        try { 
            return URLDecoder.decode(s, "UTF-8"); 
        } catch (UnsupportedEncodingException e) { 
            e.printStackTrace(); 
        } 
 
        return ""; 
    } 
 
    private static void copyFile(String fileName) { 
        String[] parts = fileName.split("/"); 
 
        File fileToCopy = new File(fileName); 
        File newFile = new File("/home/saeed/Desktop/rhythmbox-playlist/saeed-playlist/" + parts[parts.length - 1]); 
 
        try { 
            try (FileInputStream inputStream = new FileInputStream(fileToCopy); 
                 FileOutputStream outputStream = new FileOutputStream(newFile) 
            ) { 
                FileChannel inChannel = inputStream.getChannel(); 
                FileChannel outChannel = outputStream.getChannel(); 
                inChannel.transferTo(0, fileToCopy.length(), outChannel); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
 
    } 
 
 
}

 

۱۳ دی ۹۴ ، ۲۲:۲۷ ۰ نظر موافقین ۲ مخالفین ۰
سعید زرین فام

دوره های جاوا و Java EE آموزشگاه برنامه نویس

بروزرسانی: بنده دیگر هیچگونه همکاری با آموزشگاه برنامه نویس ندارم.

 

حدودا ۸ سالی میشه جاوا تدریس می کنم. البته اگر تدریس جاوا در انجمن علمی دانشگاه رو هم در نظر بگیریم بیشتر میشه. این برای اولین باره که با یک آموزشگاه به توافق رسیدم که دوره های آموزشی جاوا و Java EE بصورت منظم و زمانبندی شده و اختصاصی داشته باشم، تمام دوره هایی که داشتم سازمانی و خصوصی بوده.

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

 

طبق توافقات انجام شده، آموزشگاه برنامه نویس از این پس دوره های مرتبط با جاوا و Java EE برگزار خواهد کرد و بنده نیز مدرس دوره ها خواهم بود. برای شروع، دوره آموزشی Java SE 8 (برنامه نویسی Core Java) برنامه ریزی شده است و در آینده سایر دروه ها نیز زمانبندی و برنامه ریزی می شود.

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

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

۲۰ آذر ۹۴ ، ۱۱:۲۷ ۴ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

سوال های آزمون های جاوا برای گرفتن مدارک اوراکل

برای برگزاری آزمون تعیین سطح "دوره رایگان توسعه REST API با Play Framework (جاوا)"، خیلی فکر کردم که چجوری برگزار بشه. به این نتیجه رسیدم که بهترین گزینه استفاده از استاندارد های جهانی این قضیه است. آزمون چند گزینه ای با چند گزینه صحیح. البته خود اوراکل هم برای مدارک سطح بالاتر خودش میره سراع کدنویسی حضوری ولی برای مدارک معمولی این روش سوال های چند گزینه ای با چند گزینه درست خوب جواب میده مثل اینکه. ما هم هذفمون اینه که آدم هایی که یه دانش اولیه از جاوا دارن در دوره حاضر بشن، بنابراین فکر می کنم این تصمیم خوبیه.

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

 پ.ن. خیلی خوب می شد برای اسکالا هم یه همچین آزمون هایی وجود داشت، اونوقت مطمئنا پدر جواب دهنده ها در می اومد laugh

۲۹ آبان ۹۴ ، ۱۱:۴۶ ۰ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

دوره رایگان توسعه REST API با Play Framework (جاوا)

شرکت رایان هم افزا برگزار می کند

 

دوره رایگان توسعه REST API با Play Framework (جاوا)

مدرس: سعید زرین فام

مدت دوره:۱۲ ساعت

محتوای دوره: در این دوره بصورت عملی مفاهیم Java 8 - Play Framework - Spring - JPA - Automatic Test در قالب پروژه توسط دانشجویان پیاده سازی می شود، ابزار های محیط توسعه عبارتند از Ubuntu 14.04 - Intellij Idea - Git

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

نحوه ثبت نام: ارسال رزومه به ایمیل javajobs@rayanhamafza.com .

زمان شروع دوره: پس از ثبت نام و قبولی در آزمون تعیین سطح به دانشجویان اعلام می شود.

محل برگزاری : مطهری - لارستان

 

*در پایان دوره به افراد برگزیده گواهی اتمام دوره اعطا می شود و امکان استخدام ایشان در شرکت رایان هم افزا فراهم خواهد بود.

 

۲۴ آبان ۹۴ ، ۰۹:۳۷ ۴ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

Sample chat application using NIO

Hi,
Programming with NIO API is very hard and complicate than traditional blocking IO (streams) in java.  I found a good sample in the web that easily demonstrate java NIO features using a chat application.

ChatterClient
ChatterServer

have a nice time.
۰۲ مرداد ۹۱ ، ۱۳:۵۹ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

میزان حافظه مصرفی در یک برنامه جاوا

در بعضی موارد شما بمنظور مونیتور کردن حافظه مصرف شده توسط یک برنامه جاوا در زمان اجرا، احتیاج دارید از میزان حافظه مصرف شده توسط JVM ، مقدار کل حافظه تخصیص داده شده به JVM و ... اطلاع داشته باشید.
به همین منظور در کلاس Runtime در پکیج java.lang متدهایی به قرار زیر وجود دارد:

Runtime.getRuntime().freeMemory();
متد فوق مقدار حافظه آزاد درون JVM را به بایت باز می گرداند.
Runtime.getRuntime().maxMemory();
متد فوق حداکثر مقدار حافظه ای که JVM مجاز به استفاده آن است را به بایت باز می گرداند.
Runtime.getRuntime().totalMemory();
متد فوق مقدار حافظه مصرفی برنامه را به بایت باز می گرداند.
با استفاده از متدهای فوق براحتی می توانید اطلاعات دقیقی از حافظه مصرفی برنامه خود بدست آورید.

شاد باشید.
۰۴ خرداد ۸۹ ، ۲۱:۴۹ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Apache POI - the Java API for Microsoft Documents

کتابخانه Apache POI بمنظور کار با فرمت های رایج اسناد office مانند OOXML و OLE2 می باشد. به عبارت دیگر شما با استفاده از این کتابخانه می توانید اسناد Excel ، Word و PowerPoint را در برنامه جاوای خود باز کرده و یا اسناد جدیدی ایجاد کنید.
علاوه برموارد فوق جدیدا پروژه هایی برای پشتیبانی این کتابخانه برای کار با فایل های Outlook ، Visio و Publisher نیز راه اندازی شده است.
یکی از مزیت های کار با این کتابخانه راحتی استفاده از آن می باشد برای مثال با استفاده از تکه کد زیر براحتی می توانید یک فایل Excel بعنوان خروجی برای برنامه خود ایجاد کنید:

 
 
package exceltest;

import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


/**
*
* @author Saeed Zarinfam
*/
public class Main {

public static void main(String[] args) {
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.
Row row = sheet.createRow((short) 0);
// Create a cell and put a value in it.

Cell cell = row.createCell(0);
cell.setCellValue(1);

// Or do it on one line.
row.createCell(1).setCellValue(1.2);
row.createCell(2).setCellValue(createHelper.createRichTextString("This is a string"));
row.createCell(3).setCellValue(true);

// Write the output to a file
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
} catch (Exception ex) {
ex.printStackTrace();
}

}
}


اطلاعات بیشتر درباره این کتابخانه را می توانید  از وب سایت این کتابخانه http://poi.apache.org/ دریافت کنید.

شاد باشید.
۱۹ ارديبهشت ۸۹ ، ۲۱:۱۶ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Java EE 6 - JAXB 2.2

XML is used in platforms for defining deployment descriptors, metadata information, and so on. XML is also used as an integration technology that solves the problem of data independence and interoperability.  Associated with these XML documents, schemas are used to validate exchanged data.
In Java, there are several low-level APIs to process XML documents and XML Schemas , from common APIs (javax.xml.stream.XmlStreamWriter and java.beans.XMLEncoder) to more complex and low-level models such as Simple API for XML (SAX), Document Object Model (DOM), or Java API for XML Processing (JAXP). JAXB provides a higher level of abstraction than SAX or DOM and is based on annotations.

JAXB defines a standard to bind Java representations to XML and vice versa. It manages XML documents and XML Schema Definitions (XSD) in a transparent, object-oriented way that hides the complexity of the XSD language.
Except for the @XmlRootElement annotation, The following code shows the code of a normal Java class.

package test.jaxb;

import javax.xml.bind.annotation.XmlRootElement;


/**
*
* @author Saeed Zarinfam
*/
@XmlRootElement

public class CreditCard {

private String number;
private String expiryDate;
private Integer controlNumber;
private String type;

public CreditCard(String number, String expiryDate, Integer controlNumber, String type) {
this.number = number;
this.expiryDate = expiryDate;
this.controlNumber = controlNumber;
this.type = type;
}

public CreditCard() {
}

public Integer getControlNumber() {
return controlNumber;
}

public void setControlNumber(Integer controlNumber) {
this.controlNumber = controlNumber;
}

public String getExpiryDate() {
return expiryDate;
}

public void setExpiryDate(String expiryDate) {
this.expiryDate = expiryDate;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}
}

As shown in the following code ,With this annotation and a marshalling mechanism, JAXB is able to create an XML repreentation of a CreditCard instance :

package test.jaxb;

import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

/**
*
* @author Saeed Zarinfam

*/
public class Main {

public static void main(String[] args) {
try {
CreditCard creditCard = new CreditCard("1234", "12/09", 6398, "Visa");
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(CreditCard.class);
Marshaller m = context.createMarshaller();
m.marshal(creditCard, writer);
System.out.println(writer.toString());
} catch (JAXBException ex) {
ex.printStackTrace();
}
}
}
 
Reference : Beginning   Java™  EE 6 Platform  with GlassFish™  3 From Novice to Professional 

 
 
 
 
 
have a nice time.

۱۶ فروردين ۸۹ ، ۱۹:۴۲ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

استفاده از کلاس Cipher در پروژه های Eclipse

سلام

امروز به یک مشکل تازه توی Eclipse برخوردم. یک پروژه جدید از نوع Java Project from existing Ant Buildfile ایجاد کردم سپس آدرس Ant Buildfile پروژه را وارد کردم. درون این پروژه من از کلاس javax.crypto.Cipher و کلاس های مر تبط با آن برای انجام کارهای مربوط به encryption و decryption استفاده کرده بودم. وقتی پروژه را اجرا می کردم به error زیر برمی خوردم:

[java] Exception in thread "main" java.lang.Error: Unresolved compilation problems:
[java] The import javax.crypto cannot be resolved
[java] The import javax.crypto cannot be resolved
...

برای حل این مشکل کافی است در پنجره Project Explorer برروی پروژه خود راست کلیک کنید و برروی گزینه Properties کلیک کنید سپس برروی گزینه Java Build Path کلیک کنید و از بین تب های سمت راست تب Libraries را انتخاب کنید و سپس برروی گزینه Add External Jar کلیک کنید ، در محلی که JRE برروی سیستم شما نصب شده است به دایرکتوری lib بروید و فایل jce.jar را انتخاب کرده و برروی دکمه Open کلیک کنید و در نهایت برروی دکمه OK کلیک کنید.

اگر برنامه خود را مجددا اجرا کنید دیگر به این error بر نمی خورید.

شاد باشید.
۲۰ آبان ۸۸ ، ۱۰:۲۴ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

اجرای Tomcat برروی Windows 7

سلام
امروز وقتی می خواستم برای اولین بار Tomcat را روی Windows 7 نصب کنم به یک مشکل بر خوردم. Tomcat (نسخه 6.0.20) بدون هیچ مشکلی نصب شد ولی زمانی که بعد اتمام مراحل نصب می خواستم سرویس Tomcat را اجرا کنم پیغام زیر را دریافت می کردم.

windows could not start the Apache tomcat ... service-specific error code 0.

پس از کمی جستجو در Google در یک مطلب راه حل ساده ای برای رفع این مشکل پیدا کردم. در این مطلب آمده بود مشکل از اینجا است که JRE نمی تواند فایل msvcr71.dll را پیدا کند یا اینکه Tomcat به آن دسترسی ندارد.
راه حل ساده پیشنهادی در این مطلب ، کپی کردن فایل مورد نظر (که درون فولدر JRE قرار دارد) درون فولدر bin محل نصب Tomcat بود.

شاد باشد.


۱۳ آبان ۸۸ ، ۱۱:۰۲ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

آموزش کار با JSmooth

در مطلب ساختن فایل exe یا windows service در جاوا (java) که قبلا تنظیم کرده بودم یکی از دوستان comment گذاشتن که نحوه کار با این نرم افزار هم توضیح داده بشود.
کار با این نرم افزار فوق العاده ساده است. با اینحال در این مطلب نحوه ساختن فایل exe برای یک jar فایل رو مرحله به مرحله ذکر می کنم البته این یک مطلب ساده است که نحوه کار کلی با JSmooth را برای شما تشریح می کنند:(برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید)
همانطور که در شکل زیر مشاهده می کنید پس از اجرای برنامه JSmooth صفحه welcome این برنامه نمایش داده می شود.



در پنل سمت چپ برنامه ، مراحل کار به ترتیب از بالا به پایین آورده شده است. با کلیک برروی هر مرحله (ترجیحا به ترتیب از بالا به پایین) می توانید به مرحله بعد بروید.
برروی دومین دکمه در پنل سمت با نام Skeleton کلیک کنید. همانطور که در شکل زیر مشاهده می کنید در این صفحه می توانید نوع پروژه خود را انتخاب کنید. ما از combo box گزینه Windowed Wrapper را انتخاب می کنیم.



پس از انتخاب این گزینه می توانید یکسری تنظیمات اولیه برای فایل exe خود انجام دهید مانند:
  • تعیین پیغامی که در صورت نصب نبودن JVM به کاربر داده شود.
  • تعیین سایتی که بصورت خودکار برای دانلود JVM برای کاربر باز شود.
  • تعیین اینکه از برنامه فقط یک نمونه بتواند اجرا شود.
  • تعیین اینکه آیا از کلاس های JSmooth استفاده می کنید.
  • و...
برروی سومین دکمه در پنل سمت با نام Executable کلیک کنید.در این مرحله شما می توانید تنظیمات زیر را انجام می دهید:
  • تعیین نام فایل exe و آیکون آن.
  • تعیین دایرکتوری جاری فایل exe که معمولا منابع برنامه (نظیر عکس ها ، فایل های متنی که برنامه در آنها اطلاعات ذخیره می کند و...)


برروی چهارمین دکمه در پنل سمت با نام Application کلیک کنید. در این مرحله شما باید کلاس main فایل jar خود را تعیین کنید علاوه بر آن در قسمت Classpath ، فایل jar برنامه خود را اضافه کنید (اگر از کتابخانه های خاصی در برنامه خودتان استفاده کردید jar فایل های آن کتایخانه ها را نیز باید در قسمت Classpath اضافه کنید).


دو مرحله آخر تنظیمات پیشرفته مربوط به JVM در زمان اجرای فایل exe است که معمولا مقادیر پیش فرض مشخص شده در JSmooth کافی می باشد (البته در صورتی که احتیاج دارید مقادیر جدیدی تنظیم کنید با استفاده از راهنمای JSmooth به راحتی می توانید این کار را انجام دهید)

پس از ذخیره سازی پروژه JSmooth می توانید با استفاده از عملیات Compile که در منوی Project قرار دارد فایل exe را تولید کنید علاوه براین همچنین می توانید با استفاده از عملیات Run the exe که در همان منو قرار دارد برای تست فایل exe تولید شده را اجرا کنید.

شاد باشید.
۱۳ ارديبهشت ۸۸ ، ۱۱:۱۸ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دانلود JDK بدون استفاده از ...

سلام
با استفاده از لینک زیر می توانید آخرین نسخه JDK را به راحتی دانلود کنید.

همین الان دانلود کنید (لینک بزودی فعال می شود)

شاد باشید.
۳۱ فروردين ۸۸ ، ۱۶:۵۵ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دو خط کد برای اجرای یک فایل درون برنامه جاوا

Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler i:/sampleVideo.avi"); 
p.waitFor();

با استفاده از تکه کد بالا شما می توانید یک فایل (exe , pdf , avi , mp3 ,...) را با استفاده از برنامه های نصب شده برروی سیستم عامل خود اجرا کنید.وهمچنین برروی روند اجرای آن مدیریت داشته باشید. البته این تکه کد برای سیستم عامل ویندوز می باشد.

شاد باشید.
۲۶ بهمن ۸۷ ، ۰۸:۲۰ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

تکنولوژی Java Web Start

بوسیله تکنولوژی Java Web Start کاربران می توانند برنامه های جاوا را با کلیک برروی یک لینک در یک وب سایت اجرا کنند. لینک مورد نظر به یک فایل با فرمت JNLP می باشد.

فایل JNLP  به توسعه دهندگان امکان می دهد برنامه های دسکتاپ خود به راحتی در این فایل تعریف کرده و در وب پخش کنند. برای اجرای فایل JNLP  برروی سیستم کاربر فقط کافی است که کاربر برروی سیستم خود JRE را نصب کرده باشد. پس از دانلود فایل JNLP  و اجرای آن توسط کاربر ، Java Web Start با استفاده از اطلاعاتی که در فایل JNLP  ذکر شده است Jar فایل های مورد نیاز برای اجرای برنامه دسکتاپ جاوا را از وب دانلود کرده و سپس برنامه را اجرا می کند.

مراحل اسقرار (Deploy) برنامه با استفاده از تکنولوژی Java Web Start

  1. راه اندازی سرور وب: قبل از استقرار برنامه خود در وب باید نوع فایل JNLP  را به وب سرور خود بشناسانید. باید وب سرور خود را بنحوی تنظیم کنید که نوع JNLP  MIME را بشناسد برای مثال در سرور آپاچی (Apache) می توانید خط زیر را به فایل mime.types اضافه کنید:  application/x-java-jnlp-file JNLP و یا برای وب سرور (Apache Tomcat) خط زیر را به فایل web.xml اضافه کنید.


         JNLP
         application/x-java-jnlp-file

    برای سایر وب سرورها می توانید به مستندات وب سرور مراجعه کنید.

  2. ساخت فایل JNLP: مرحله کلیدی اجرای یک برنامه با Java Web Start فایل JNLP(Java Network Launching Protocol)است. فایل JNLPیک فایل XML است که حاوی عناصری و خصوصیاتی است که چگونگی اجرای برنامه را برای Java Web Start شرح می دهد. برای مثال فایل زیر را مشاهده کنید (برای اطلاعات بیشتر به لینک زیر مراجعه کنید http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html).




    codebase="http://java.sun.com/docs/books/tutorialJWS/deployment/webstart/examples/"
    href="Notepad.jnlp">

    Notepad Demo
    The Java(tm) Tutorial: Sun Microsystems, Inc.
    Notepad Demo

    ClickMeApp uses 3 custom classes plus several
    standard ones




    href="http://java.sun.com/products/autodl/j2se"/>


  3. قرار دادن برنامه برروی وب سرور: مرحله بعدی قرار دادن تمامی Jar فایل های برنامه بهمراه فایل JNLP برروی وب سرور است.
  4. ساخت یک صفحه وب: در آخرین مرحله یک صفحه وب درست کرده و لینک فایل JNLP را درون آن قرار دهید.

    اطلاعات بیشتر: http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/contents.html

    شاد باشید.

۲۳ بهمن ۸۷ ، ۱۱:۳۴ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دانلود آخربن نسخه JDK و Netbeans برای ایرانی ها

سلام

ویرایش: بدلیل پایان اعتبار هاست و دومین لینک های زیر موجود نمی باشد.

سایت جاوافا (http://www.javafa.com/) با در نظر گرفتن نیاز توسعه دهندگان فارسی زبان، به یک مرجع خبری و آموزشی در زمینه زبان برنامه نویسی جاوا راه اندازی شده است.

می توانید بدون محدودیت از لینک زیر JDK (32 و 64 بیتی برای لینوکس و ویندوز) را دانلود کنید:

دانلود JDK

مطالب مرتبط:
دانلود Netbeans 6.5.1
۱۲ آذر ۸۷ ، ۰۸:۴۸ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

ایجاد فایل ها با استفاده از جاوا (Create file using Java)

با استفاده از کد زیر ، در زبان جاوا می توانید یک فایل ایجاد کنید .
import java.io.*;

public class CreateFile{
public static void main(String[] args) throws IOException{
File f;
f=new File("myfile.txt");
if(!f.exists()){
f.createNewFile();
}
}
}
----------------------------------------
مطالب مرتبط :
تغییر نام فایل ها با استفاده از جاوا (Rename file using Java)
----------------------------------------
۰۲ آبان ۸۷ ، ۱۴:۰۲ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام