PDA

View Full Version : ویژگی های جدید نگارش 6 جاوای استاندارد - Java SE 6 New Features



pooyanm
دوشنبه 11 اردیبهشت 1385, 06:10 صبح
من در این پست ویژگی جدیدی از Java 6 را با ذکر مثال معرفی می کنم و اگر فرصت پیش آمد به سایر قابلیت ها هم خواهم پرداخت. امیدوارم مفید واقع شود.
ویژگی دسترسی درون پردازشی (in-process) به compiler امکان جدیدی در نگارش 6 است که با توجه به اهمیت آن شاید کمی دیر به این زبان اضافه شد. این ویژگی امکان تولید bytecode های جاوا از درون ماشین مجازی در حال اجرا بدون نیاز به فراخوانی javac و ایجاد یک پردازش جداگانه را فراهم می کند. مهمترین مزیت این روش افزایش سرعت کمپایل IDE های جاوا و فریم ورک های JSP به میزان چند برابر سرعت فعلی آنهاست. در ادامه نحوه استفاده از این ویژگی با یک مثال آورده شده که در آن دو فایل جاوا، با این روش کمپایل می شود در مورد دومین فایل بدلیل اینکه همه منابع مورد نیاز در عملیات قبلی بوسیله ماشین مجازی cache شده اند سرعت کمپایل چند برابر بیشتر از قبلی است.
برای اجرا آن را در فایلی با نام Compiler.java ذخیره کرده سپس کامپایل و اجرا کنید. من از jdk-6-beta2-bin-b81-20_apr_2006 برای آن استفاده کردم در حالی که jdk-6_0-ea-bin-b40-09_jun_2005 که اواسط سال 2005 داونلود کردم دارای این قابلیت نیست.
جاوای 6 از این آدرس (تا الان بدون محدودیت برای ایران) قابل دریافت است: http://mustang.dev.java.net (http://mustang.dev.java.net/)




/*
* An example on how to use Java compiler API, available
* in Java SE 6 (currently in beta).
*
* based on: http://download.java.net/jdk6/docs/api/javax/tools/JavaCompilerTool.html
*
*/
import javax.tools.*;
import java.io.*;
import java.util.*;
public class Compiler {
private JavaCompilerTool compiler;
private StandardJavaFileManager javaFileManager;
public static void main(String[] args) throws Exception {
Compiler c = new Compiler();
c.compile(new File("e:\\CompilerTest.java"));
// reuse the same file manager to allow caching of jar files
c.compile(new File("e:\\CompilerTest2.java"));
c.getStandardJavaFileManager().close();
}
public Compiler() {
compiler = ToolProvider.getSystemJavaCompilerTool();
javaFileManager = compiler.getStandardFileManager(null);
}
public StandardJavaFileManager getStandardJavaFileManager() {
return javaFileManager;
}
public void compile(File file) {
System.out.println("Wait, Compiling...");
Vector<String> options = new Vector<String>();
String cp = System.getProperty("java.class.path");
cp += ";c:\\clspath\\"; // append your own class-path
options.add("-cp");
options.add(cp);
options.add("-Xlint:all");
System.out.println(" javac " + file.getName());
Iterable<? extends JavaFileObject> compilationUnits = javaFileManager.getJavaFileObjectsFromFiles(
Arrays.asList(new File[] {file})
);
JavaCompilerTool.CompilationTask compilationTask = compiler.getTask(
null,
javaFileManager,
null,
options,
null,
compilationUnits
);
compilationTask.run();
System.out.println(
compilationTask.getResult() ?
" Successfully Compiled." :
" Errors occurred during compiling..."
);
System.out.println();
}
}

zehs_sha
چهارشنبه 13 اردیبهشت 1385, 13:29 عصر
بسیار جالب بود(خیلی خوف !!!) با تشکر از شما و منتظر مقالات بعدی هستیم

zehs_sha
چهارشنبه 13 اردیبهشت 1385, 15:09 عصر
به این لینک هم یک نگاهی بیاندازید.
http://download.java.net/jdk6/docs/

pooyanm
شنبه 16 اردیبهشت 1385, 02:38 صبح
تا الان به جرات می توان گفت جاوا 6 نسبت به نگارش های پیشین بیش از هر چیز دیگر به امکانات Desktop پرداخته است و ویژگیهایی از قبیل System Tray (http://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/systemtray/)،کلاس Desktop (http://download.java.net/jdk6/docs/api/java/awt/Desktop.html) و پشتیبانی بیشتر کلاس ها از modality در dialog ها document ها و... کلاس (http://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/modality/) SwingWorker برای کار ترکیبی swing با Thread ها و بسیاری از قابلیت های دیگر، اکنون دارای پشتیبانی خوبی در تمامی سیستم عامل هایی که ماشین مجازی جاوای 6 در آنها نصب شده، می باشند. در مثال زیر متد JTable.setRowSorter() به همراه کلاس
javax.swing.table.TableRowSorter برای مرتب سازی اطلاعات سیستم کاربر در یک جدول به کار رفته اند. با هر کلیک بر روی عنوان هر ستون بر اساس مقادیر رشته ای آن ستون داده های جدول مرتب می شوند.
البته این مثال نحوه استفاده از TableRowSorter را برای ایجاد یک روش مرتب سازی رشته ای را معرفی می کند (برای مرتب سازی صحیح فارسی با کمک یک الگوریتم، رشته ای مناسب را ایجاد و در StringConverter برگردانید.) در صورتی که داده های جدول شما از نوع String های انگلیسی است یا شیئی است که نمایش String آن برای مرتب سازی مناسب است، می توانید صرف نظر از همه جزئیات دستورات زیر را برای مرتب سازی خودکار بکار برید:

JTable table = new JTable(data, titles);
table.setAutoCreateRowSorter(true);
به JTable قابلیت های دیگری نیز از قبیل filtering (که در مثال برای کلماتی که "java" ندارند فیلتر گذاشته شده است) و highlighting اضافه شده که توضیحات آن در http://download.java.net/jdk6/docs/api/javax/swing/JTable.html آمده است.
امکانات جدید Desktop به طور کامل در این آدرس معرفی شده اند:
Update: Desktop Java Features in Mustang
(http://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/)
همچنین در آدرس های اطلاعات بیشتری را در این زمینه خواهید یافت:
http://community.java.net/javadesktop/
http://javadesktop.org/forums/
مقاله java.sun.com در مورد نحوه به کارگرفتن کلاس Desktop به همراه مثال را در این آدرس بخوانید:
Using the Desktop API in Java SE 6 (Mustang)
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/desktop_api/
_________________________________



/*
* An example to demonstrate sorting data of javax.swing.JTable.
*
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class SystemInfoFrame extends JFrame {

public static final long serialVersionUID = 0xf7ae5e71a1l;
public static void main(String[] args) throws Exception {
new SystemInfoFrame();
}
public SystemInfoFrame() {
super("System Properties");
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
setSize( ( int ) ( scrSize.width/1.2 ), ( int ) ( scrSize.height / 1.2 ));
setLocation(scrSize.width / 2 - getSize().width / 2,
scrSize.height / 2 - getSize().height / 2);
add(new JScrollPane(new SystemPropertiesTable()));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
class SystemPropertiesTable extends JTable {
public static final long serialVersionUID = 0x5e71a1;
public SystemPropertiesTable() {
SystemPropertiesTableModel dataModel = new SystemPropertiesTableModel();
setModel(dataModel);
MyTableRowSorter<SystemPropertiesTableModel> sorter =
new MyTableRowSorter<SystemPropertiesTableModel>(dataModel);
setRowSorter(sorter);
try {
sorter.setRowFilter(RowFilter.regexFilter("java"));
} catch (java.util.regex.PatternSyntaxException pse) {
pse.printStackTrace();
}
}
}
class MyTableRowSorter<MyTableModel extends SystemPropertiesTableModel>
extends TableRowSorter<MyTableModel> {
private TableStringConverter tsc;
public MyTableRowSorter(MyTableModel model) {
super(model);
}
public TableStringConverter getStringConverter() {
if (tsc == null) {
tsc = new TableStringConverter() {
public String toString(TableModel model, int row, int
column) {
return (String)model.getValueAt(row, column); //
String representation for my objects
}
};
}
return tsc;
}
}
class SystemPropertiesTableModel extends AbstractTableModel {
public static final long serialVersionUID = 0x5e71a10de1l;
private String[][] data;
private String[] colNames = new String[] {"Key", "Value"};
public SystemPropertiesTableModel() {
Object[] keys = (java.util.Collections.list(
System.getProperties().propertyNames()
).toArray());
//java.util.Arrays.sort(keys); // Also you may sort them at first...
data = new String[keys.length][2];
for(int i = 0; i < keys.length; i++) {
data[i][0] = (String)keys[i];
data[i][1] = System.getProperty(data[i][0]);
}
}
public int getColumnCount() {
return 2;
}
public String getColumnName(int column) {
return colNames[column];
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}