約 2,879,265 件
https://w.atwiki.jp/ce00582/pages/3680.html
import java.awt.*; import java.awt.event.*; import java.awt.image.*; class game0522 extends Frame implements Runnable,MouseListener{ PixelGrabber pg; Color col; Image img; int w=500; int h=500; int red,green,blue; int pix[]=new int[w*h]; int memor[][]=new int[h][w]; int memog[][]=new int[h][w]; int memob[][]=new int[h][w]; int mx,nx,m,n; int m1,n1,m2,n2; int ex,ey; int mode; String s1; game0522(){ addMouseListener(this); s1="ron.jpg"; catchimg(s1); Thread th=new Thread(this); th.start(); } public void run(){ int t; t=1; mode=1; while(t 10){ repaint(); try{ Thread.sleep(2000); }catch(InterruptedException e){} t=t+1; } repaint(); System.out.println(ex); System.out.println(ey); } public static void main(String[] args) { game0522 f = new game0522(); f.setSize(700,700); f.setBackground(Color.blue) ; f.setVisible(true); f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}}); } public void paint( Graphics g ) { g.setColor(Color.blue); g.fillRect(0,0,700,700); mx=1; nx=1; for (mx=0;mx h;mx++){ for (nx=0;nx w;nx++){ g.setColor(new Color(memor[mx][nx],memog[mx][nx],memob[mx][nx])); g.fillRect(nx,mx,1,1); } } g.setColor(Color.red); g.fillRect(ex,ey,5,5); } void catchimg(String s){ img = createImage(w,h); img = Toolkit.getDefaultToolkit().getImage(s); pg = new PixelGrabber(img,0,0,w,h,pix,0,w); try{pg.grabPixels();}catch(InterruptedException ie){} m=0; n=0; for(int i=0;i w*h;i++){ int p = pix[i]; col=new Color(pix[i]); red=col.getRed(); green=col.getGreen(); blue=col.getBlue(); memor[m][n]=red; memog[m][n]=green; memob[m][n]=blue; n=n+1; if (n==w)m=m+1; if (n==w)n=0; } } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ double mex,mey; mey=e.getY() ; mex=e.getX(); ex=(int)mex; ey=(int)mey; } }
https://w.atwiki.jp/sfrontier/pages/33.html
Java 作成日 2007/11/01 H.Naito 更新日 2007/11/01 H.Naito hoge hoge
https://w.atwiki.jp/creation/pages/11.html
自作 WindowControl Windowsのウィンドウを制御する事ができるクラス よく使うライブラリ JavaCommAPI 外部機器との通信 画像・メディア系 JAI Java Advanced Imaging 画像処理のためのライブラリ。開発にはあのAdobeのスタッフもかかわっているらしい。使用方法は一癖あるが、高速な画像処理が可能。 JMF Java Media Framework 映像・音声を統一的に扱うためのフレームワーク。入力-処理-出力を抽象的に扱える。 ファイルだけでなく、カメラ、ネットワーク、自作の入力機器など幅広いシステムに対応。 Java3D Javaで3DCGや3Dサウンドを扱うためのAPI。シーングラフを用いて効率的にプログラム可能。若干クセが強いので解説本必須。慣れると結構書きやすいかも。 ネットワーク HORB Javaの分散オブジェクト技術の元祖。RMIよりわかりやすい。RMIより古いらしい。RMIより早いらしい。 Apache Axis SOAPのJavaによるオープンソース実装。次期分散オブジェクト技術の本命?? 参考 http //xml.apache.org/axis/ 参考 http //muimi.com/j/axis/ GUI InfoNode Swing用のGUIドッキングコンポーネント。 flexdock オープンソースのドッキングコンポーネント。 https //flexdock.dev.java.net/ その他のユーティリティ Jakarta Commons Javaユーティリティの本命。この中にたくさんのプロジェクトが存在する。品質が高く、非常に実用的。 Log4j JavaでLogを行う。Commons Loggingと合わせて使用するのがベスト。 QRコードクラスライブラリ for Java 文字列からQRコードを生成 http //www.swetake.com/qr/ 下記は調査中 Preference API 設定のロードやセーブを簡単に行える。Windowsはレジストリ、UNIX系はファイルを用いる。ちょっとした設定の保存には重宝しそう。J2SE1.4以降に標準でついている。 参考サイトhttp //www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/MiscAPI/Preferences/Preferences.html なお、凝ったプロパティファイルを使いたければjava.util.Propertiesクラスを使いましょう。J2SE5.0からはXMLにも対応しているらしい。 参考サイトhttp //www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/TinyTips/Properties/Properties.html JOGL JavaのためのOpenGLバインディングAPI。OpenGLの機能をほぼ余すことなく使える。 Quicktime for Java AppleによるJavaのためのQuicktimeインターフェース。Quicktimeの持つマルチメディア機能をJava上から使用できるようになる。最近のQuicktimeには最初からついていて、インストール時にチェックするだけで使えるようになる。 参考:千房けん輔 Javaメディアプログラミング JavaWorld誌2004年2月号~10月号 IDG jUSB Java USB JavaからUSBを制御するためのAPI。JCPで正式に採用されているらしい。どの程度使えるかは不明。 jUSB http //jusb.sourceforge.net/ 参考サイトhttp //www-6.ibm.com/jp/developerworks/java/040312/j_j-usb.html RTSJ Real Time Specification for Java Javaをリアルタイムシステムとして利用できるようにするための仕様。そろそろ本格的に使える? https //rtsj.dev.java.net/
https://w.atwiki.jp/sfrontier/pages/36.html
Java 作成日 2007/11/01 H.Naito 更新日 2007/11/02 H.Naito GeneralsGeneral FAQ FrameWork Design Pattern WebTechnology Informain From Sun Qualification Generals General Javaの道 Javaの技術について、包括的に解説。 FAQ Java に関するよくある質問とその回答集 主にソースコードレベルでの FAQ FrameWork Design Pattern http //www.hellohiro.com/pattern/ http //www.techscore.com/tech/DesignPattern/ http //www.itarchitect.jp/beginners/-/51409.html http //blog.yuki.sub.jp/ http //www.objectclub.jp/technicaldoc/pattern/DPforJavaProgrammers WebTechnology Informain From Sun Official サイト(日本語版) 日本語版オフィシャルページ Official サイト(英語版) 英語版オフィシャルページ Java 6.0 修正済みバグ報告 Java6.0 の修正済みバグ報告 Qualification Qualification この wiki に掲載している資格情報 Sun Sun のオフィシャルページの情報 アール・プロメトリック アール・プロメトリック社のwebサイト。ここから、受験申し込みができます。
https://w.atwiki.jp/ce00582/pages/3566.html
import java.net.*; import java.io.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class game0328 extends JFrame { private Image img; public static void main(String[] args) { game0328 frm = new game0328(); frm.addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent e) { System.exit(0); } }); frm.setBounds(0 , 0 , 400 , 200); frm.setVisible(true); frm.setDefaultCloseOperation(DISPOSE_ON_CLOSE); try { URL url = new URL("http //www.wasedasai.net/2008/feature/img/pare_jyosou.gif"); Object obj = url.getContent(); if (!(obj instanceof ImageProducer)) System.exit(0); frm.img = frm.createImage((ImageProducer)obj); } catch(Exception e) { System.err.println(e); } } public void paint(Graphics g) { if (img != null) g.drawImage(img , 0 , 0 , this); } }
https://w.atwiki.jp/chakimar/pages/38.html
オブジェクト指向言語 プロットフォーム非依存(JVM) オーブンソース ライブラリやフレームワークが豊富 やさしいJava 第3版 (やさしいシリーズ)
https://w.atwiki.jp/hideaki0121/pages/169.html
/* * 作成日 2007/06/02 * * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート */ package shimane; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.Hashtable; import java.util.Vector; /** * @author miyanishi * * ひとつの文章の集合であるテキストクラス. * * ある一つのテキストファイル(hoge.txt)に含まれる文(Sentence)を切り離す * ※Sentenceインスタンスは含まれる文の数だけ作る */ public class Text{ private final static String HINSHI = "名詞"; private final static String EXCEPT = " /*-+.() %$#=[]票"; private String tfilename; //文章(ファイル名) /*1つのテキスト中に含まれる単語と回数*/ private Hashtable textwordhash; private Vector textvector; /* ある1文中に登場する単語とその頻度 */ private Hashtable shash; private ArrayList storeshash; private Vector svector; private ArrayList storesvector; /* 単語を格納 */ private ArrayList tword; private static int tcount = 0; /*private ArrayList noun, verb, adjective, abverb, auxiliary_verb,particle;*/ /*public Text(){ //テキスト名が指定されていない場合に指定 this("/misc/home/miyanishi/eclipse/workspace/KBSE07/test/[[1.txt]]"); }*/ public Text(String _filename){ tfilename = _filename; System.out.println("================================================-"); System.out.println("ファイル名" + getFilename() + "\n"); textwordhash = new Hashtable();//テキストファイル中の単語の頻度 textvector = new Vector();//テキストファイル中の単語のベクトル setTextwordhash();//テキストの全単語の出現回数をカウント(センテンス無視) divSentence(); } public void divSentence(){ storeshash = new ArrayList(); storesvector = new ArrayList(); setTextwordhash(); //与えられた1つのテキスト内の全ての(単語,登場回数) setSentencewordhash();//1文ごとに分割して格納! printSentence(); //1文ごとにセンテンスを表示 tcount++; //ファイル番号格納(static) } private void setFilename(String _name){ this.tfilename = _name; } private String getFilename(){ return tfilename; } /** * 品詞ごとにグルーピングする * 同時に,フィールド変数であるHashTableに代入する */ private void setTextwordhash(){ String filename = getFilename(); ArrayList str = ReadLine(filename); String operator = EXCEPT; for(int i = 0 ; i str.size() ; i++ ){ String[] str1 = divTAB( (String)str.get(i) ); //ArrayList→Stringへ String singleword = str1[0]; //System.out.println(i + "]" + singleword); String parse = ""; if(singleword.equals("EOS")){ parse = "記号"; } else if(operator.indexOf(singleword) = 0) parse = "記号"; else{ try{ String[] str2 = divComma( str1[1] ); parse = str2[0]; }catch(Exception e){ System.err.println(filename + " 品詞解読エラー = " + singleword); } } if(parse.equals(HINSHI)){ Integer n = (Integer)textwordhash.get(singleword); //ハッシュテーブルにキーが入ってないときに値は1を格納 hm(word,cnt) /** * @see http //www.wakhok.ac.jp/biblion/1996/JavaAppli/node27.html * */ //単語が1つも登録されていない場合は新規に(単語,1)を割り当てる if( !(textwordhash.containsKey(singleword)) ){ textwordhash.put( singleword , new Integer(1) ); } //単語が登録されている場合は(単語,cnt+1)とする else{ textwordhash.put( singleword ,new Integer((int)(n.intValue() + 1) )); } //単語が登録したかどうかを確認するベクトル if( !(textvector.contains(singleword)) )//要素が入ってない場合 textvector.add(singleword); } } } /** * 品詞ごとにグルーピングする * 同時に,フィールド変数であるHashTableに代入する */ public void setSentencewordhash(){ String filename = getFilename(); ArrayList str = ReadLine(filename); String operator = EXCEPT ; int scnt = 0; //文数のカウントflag for(int i = 0 ; i str.size() ; i++ ){ String[] str1 = divTAB( (String)str.get(i) ); //ArrayList→Stringへ String singleword = str1[0]; //System.out.println(i + "]" + singleword); String parse = ""; if(singleword.equals("EOS")){ parse = "記号"; } else if(operator.indexOf(singleword) = 0) parse = "記号"; else{ try{ String[] str2 = divComma( str1[1] ); parse = str2[0]; }catch(Exception e){ System.err.println(filename + " Sentence品詞解読エラー = " + singleword); } } if(scnt == 0 ){ shash = new Hashtable(); String vectorkey = String.valueOf(scnt); svector = new Vector();//Stringでベクトル生成に注意 scnt++; } if( parse.equals(HINSHI)){ //tword.add(singleword); Integer n = (Integer)shash.get(singleword); //ハッシュテーブルにキーが入ってないときに値は1を格納 hm(word,cnt) /** * @see http //www.wakhok.ac.jp/biblion/1996/JavaAppli/node27.html * */ if( !(shash.containsKey(singleword)) ){ shash.put( singleword , new Integer(1) ); } else{ shash.put( singleword ,new Integer((int)(n.intValue() + 1) )); } if( !(svector.contains(singleword)) ){//要素が入ってない場合,単語を追加 svector.add(singleword); //System.out.println("test]]" + singleword); } } /** * ここについてはもう少し考える必要あり. * ◯で終わる場合だけなのか?EOSの場合はどうするのか?? * * 文が終わる場合にはどうするのか?常に最後のonesentenceは空白になってしまうのか? */ if(singleword.equals("。") || singleword.equals(".")|| singleword.equals("票") ){ storeshash.add(shash); //文末(。)のときにHashtableをArrayListに格納 storesvector.add(svector); //1文が抽出できたらセンテンスクラスで処理を行う if( i != str.size() ){ shash = new Hashtable(); String vectorkey = String.valueOf(scnt); svector = new Vector();//Stringでベクトル生成に注意 scnt++; } } } } public ArrayList getStoreonesentence(){ return storeshash; } /** * 文数ごとに単語数と出現数を表示する * →ゆくゆくはこれからtf-idfを算出 * */ private void printSentence(){ int scnt = storesvector.size(); //フィードから文数を代入 /*ArrayListからHashtableを抽出*/ for(int i = 0 ; i scnt ; i++ ){ System.out.println(tcount + " "+ i +"]" + storeshash.get(i));//文章ごとに抽出 } /*ArrayListからベクトルを抽出*/ for(int i = 0 ; i storesvector.size() ; i++){ Vector tmp0 = (Vector) storesvector.get(i);//ベクトル抽出 for(int j = 0 ; j tmp0.size() ; j++){//ベクトルから値抽出 //System.out.println( tmp0.getVector(j) );//ベクトルを切り離して抽出 } } /*Hashtableに存在するキーとベクトルを使って値を抽出*/ for(int i = 0 ; i storeshash.size() ; i ++){ Hashtable ht = (Hashtable)storeshash.get(i); //System.out.println("Hash " + ht); Vector vec = (Vector)storesvector.get(i); //System.out.println("Vector "+ vec.getVector(i)); for(int j = 0 ; j ht.size() ; j++){ if( ht.containsKey(vec.get(j) )){ //System.out.print(i +" "); //System.out.print(vec.getVector(j)+ " "); //System.out.println(ht.get(vec.getVector(j))); } } } } /** * [Mecab]ファイルから1行ずつ読み込む * * @return s ArrayList */ private ArrayList ReadLine(String filename){ ArrayList list = new ArrayList(); try{ BufferedReader br = new BufferedReader(new FileReader( filename )); /* 行単位で読み込む */ String str; while( (str = br.readLine() ) != null ){ //System.out.println(str); //if(str.equals("ENDOFDOC")) //終端文字は解析対象外 //break; //else if( !(str.equals(" ") || str.equals("EOS"))) list.add( str ); } }catch(Exception e){ System.err.println("error " + e.getMessage() ); } return list; } /** * Mecabで分けられてたクラスを[TAB]キーで分割 * * @param str * @return div[] String */ private String[] divTAB(String str){ String[] div = str.split("\t"); return div; } /** * Mecabで表示された文字を[,]で分割 * * @param str * @return div[] String */ private String[] divComma(String str){ String[] div = str.split(","); return div; } /*public static void main(String args[]){ Text text = new Text(); }*/ }
https://w.atwiki.jp/shisaku0017/pages/79.html
JavaScriptに対応しているフリーウェア一覧 AjaxMGraph Canvas 3D Graph Canvas Pie Chart with Tooltips Chart Animation Script Chart Director Emprise JavaScript Charts Flot Flotr Graph Gear HTML-Graphs JS charts JavaScript Chart JavaScript Graph Plotting Tool LT Diagram Builder MooChart Pie Graph PlotKit ProtoChart Raphaël Timeplot TufteGraph fgCharting Plugin for jQuery jQuery Sparklines jqPlot 登録タグ グラフ出力形式 仕様 対応言語
https://w.atwiki.jp/acil/pages/46.html
初心者がJavaを“超高速”で学ぶためのコツ Java技術によるWebアプリケーション開発入門 Spring Frameworkで理解するDI EOF
https://w.atwiki.jp/0x0b/pages/82.html
JAVA 義ではオブジェクト指向プログラミング言語Javaであり、広義ではプログラミング言語Javaのプログラムの実行環境および開発環境 プログラミング言語としてのJava、および関連する技術や設計思想、およびJava言語の実行環境としてみたJavaプラットフォーム 拡張子java パラダイム構造化・命令型・オブジェクト指向 登場時期1995年 設計者Java Community Process 開発者オラクル(サン・マイクロシステムズ) 最新リリースJava Standard Edition 7 (1.7.0)(2011年7月28日(米国時間)) 型付け強い静的型付け 主な処理系コンパイラ(JDK, OpenJDKなどのjavac, gcjなど)、バイトコードインタプリタ(JDK, JRE(サーバー用、クライアント用が存在), Microsoft VM for Java, OpenJDK など多数) 影響を受けた言語Objective-C、Smalltalk、C++、Eiffel、C# 影響を与えた言語C#、D プラットフォームSolaris、Linux、Windows、 Mac OS X、AIX、System i、 各種の組み込みシステム ほか多数 ライセンスGNU General Public License ウェブサイトjava.sun.com Javaは、従来のさまざまな言語の良い部分を引き継ぎ、欠点を克服するよう設計された。次のような特徴をもつ。 Javaではプラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。 Javaで開発されたソフトウェアは堅牢な実行環境(仮想マシン)であるJava仮想マシンのもとで動作する。 オブジェクト指向プログラミングの考え方に基づいて設計された言語であり、ソフトウェアの開発と保守の複雑さを低減し、開発効率と保守性を高める。 Smalltalk や Objective-C と同様な簡潔なオブジェクトモデルを採用している。 構文は C および C++ から多くを引き継いでいる。 現在、Javaの技術は、情報技術のローエンドからハイエンドまで幅広く使われている。 組み込みシステムや携帯機器(携帯電話・PHSやPDA・スマートフォン等)のシステムから、企業の情報システムを担う大規模なサーバやスーパーコンピュータまで、非常に多くの分野で活用されている。 プログラムの実行は、各クラスが実体化したオブジェクト群が相互にメッセージをやりとりしながら行われる Javaでは、継承については実装の単一継承を採用している。ただし1つのクラス(オブジェクト)は複数のインタフェースを実装できる。Javaで扱うデータ/オブジェクトの型(データ型)は、強い静的型付けを採用している。Javaのコンパイラおよび実行環境が、型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証が、可能である。 Javaは例外処理機構を備えており、プログラム実行中に生じた異常(例外)の扱いを、比較的安全な方法で行い、プログラムを読みやすく記述することができる。 Javaでは簡潔なメモリモデルを採用しており、プログラマがメモリ (主記憶装置) を管理する負担を軽減する。あらゆるオブジェクトはメモリ内のヒープという領域に割り当てられる。メモリ管理は、Java仮想マシンに統合されたガベージコレクションの機能によって行われる。従来のオブジェクト指向プログラミング言語である C++ では、ヒープ領域に生成したオブジェクトについて、もはや必要が無くなった時に破棄する指示を、プログラマが自分で責任をもって行わなければならなかった。これは、C++ プログラマにとっては負担が大きく複雑で間違えやすい作業であり、ソフトウェアの安全性・開発効率・保守性を損なう要因だった。Javaではガベージコレクションの機能があるため、このようなことは無く、プログラマの負担は大きく軽減される。 Javaの文法は、CおよびC++から多くを引き継いでいる。また、C/C++には存在する低水準領域を操作できるポインタという機構は排除されていると言われているが、Javaの開発者も言っているように、C/C++のポインタモデルとは異なるがJavaにもポインタモデルが存在する。たとえば、クラスインスタンスと配列はポインタを使用している。これは、"ClassName a = new ClassName();"と"ClassName b;"を定義し"b = a"とすることにより、bはaのフィールドを操作できる。すなわち、a,bにはアドレスが設定されている。同様にして、配列名に格納されるのもアドレスである。このように、インスタンス名(上記のaやb)には、バージョン1.2以前はオブジェクトハンドル(ポインタのポインタ)、バージョン1.3以降はポインタが設定されている。よって、Javaは当初から現在までポインタとは切っても切れない関係にある。これについては、Javaのホワイトペーパー[1]に「C/C++とJavaの最大の違いは、Javaには、メモリへの上書きおよびデータ喪失の可能性を排除するポインタモデルがあることである。そこでは、ポインタ演算の替りに真の配列が用意されており、添字チェックを可能としている。なお、任意の整数をポインタに型変換することは、不可能である。」と解説されている。 Javaではプラットフォーム非依存を目標の一つとし、またバージョン間の互換性に注意して開発が進められている。Java技術を使うことで、プラットフォームに依存しないアプリケーションソフトウェアの開発と配備を行うことができる。従来のプログラミング言語の多くはプラットフォーム (CPU) に依存したネイティブなコードにコンパイルすることを前提として設計されていたが、Javaはこうした言語と異なり、中間言語(バイトコード)にコンパイルされ、Java仮想マシンで実行されるよう設計された。多くの場合、ジャストインタイムコンパイル方式が使われる。 プラットフォーム非依存とバージョン間の互換性の目標は、完全に達成できたわけではなく課題が残っている。 Javaではスレッドを言語仕様で規定しており、マルチスレッドによる並行計算を、従来の言語と比べて簡単に実装することができる。なお並行計算は、複数の処理を同時に実行する処理形態である。またスレッドは、プロセスより小さく軽量な処理の単位である。 Javaでは充実したライブラリにより、コンピュータネットワークを活用するソフトウェアを、効率良く開発することができる。Javaはその初期のバージョンから、TCP/IPのライブラリを備えていた。分散オブジェクト環境 (Java RMI, CORBA) のソフトウェアの開発も早い時期からできるようになっていた。近年では、さまざまなネットワークプロトコルの高水準なライブラリが使えるようになっている。充実したネットワーク機能と次に述べるXML文書を扱う機能を有効に組み合わせることにより、これまでにない高度なシステムの構築ができる言語の一つである。 XML文書を扱う機能も早期に実用化された。XMLは、広く普及している構造化文書の技術である。近年では、XMLプロセサとXSLTプロセサがJava標準ライブラリに統合され提供されている。 Javaはセキュリティを考慮して設計されており、サンドボックスモデルに基づいたセキュリティ機構を備えている。セキュリティ機構を正しく実装したJava実行環境を適切に使うことで、遠隔のコンピュータ上にある実行コードを安全に実行することができる(Javaアプレット)。 また、名前空間の機構をもつ言語であり、ライブラリおよびアプリケーションに含まれる多数のJavaのプログラム(クラスとインタフェース)は、パッケージという階層構造で管理することができる。 Javaに対しては批判も少なくない。いくつかの批判に対しては、サンやJCPに参加する人々の努力により、Javaの改良が行われている。一方で現在、多くのソフトウェア開発者は、Javaについて、広く使われている言語としては優れた技術の一つと評価している。 JavaScript (ECMAScript) は、Javaとは直接の関係は無いが、Javaと似た言語名称と構文を持っている。 表記はJのみが大文字の「Java」が正しい。「JAVA」は正式な表記ではない 近くのコーヒーショップで供されていたコーヒーのブランドに由来すると考える人が多い。その根拠は、Java のクラスファイル(中間言語のバイトコード)の最初の4バイトが十六進記数法で必ず 0xCAFEBABE となっている事である。諸々JAVAの語源には説がある ウェブ(クライアント側) ウェブブラウザでJavaアプレットを実行する技術は、広く使われている。Javaアプレットは、ブラウザ(ウェブのクライアント側)がウェブページ内でアニメーションの表示やマウスによるインタラクティブな操作を可能とする技術である。ただし、いくつかの有力な競合技術も存在する。近年では、Yahoo! Games やビデオプレイヤーなどのアプリケーションで、Javaアプレットを採用する事例が多い。 かつては、Javaアプレットを使用したサイトを表示すると、数十秒~数分間操作を受け付けないブラウザが存在した。近年は、JavaおよびJavaアプレットの技術の向上により、環境によって動作が異なったり、実行速度、特に画面の描画が遅いという問題が解消されつつある。 簡単でインタラクティブなアニメーション用には、Javaアプレットよりも GIF89a や Adobe Flash を採用する事例が多い。この分野においては、最近では Ajax も普及しつつある。 ウェブ(サーバ側) 現在、ウェブのサーバ側において、Java技術 (Java EE) は広く使われている。多くのウェブサイトが、Javaサーブレット (Java Servlet) や JSP(JavaServer Pages)などの Java EE 技術を使って動的にページを生成するウェブを構築している。Javaサーブレットは2000年前後から急速に広く使われるようになり、現在では多くのウェブアプリケーション(動的なウェブページ)がサーブレットとして稼動するようになっている。 サン・マイクロシステムズが開発したJavaサーブレット技術を簡単に説明する。必ずしも厳密な説明ではない。 Java の実行環境のプロセス(サーブレットコンテナ)を起動して1.ウェブサーバのマシンに常駐させる。 2.ウェブサーバが、ウェブブラウザからアクセスされる(リクエストを受ける)。 3.ウェブサーバは、そのリクエストをサーブレットコンテナに渡す。 4.サーブレットコンテナで動くJavaプログラム(Javaサーブレット)は、受け取ったリクエストに基づき、ウェブページを動的に生成する。 5.サーブレットコンテナは、サーブレットが生成したウェブページをウェブサーバに渡す。 6.ウェブサーバは、サーブレットコンテナから受け取ったウェブページを、ウェブブラウザに返す。 サンがJavaサーブレット技術を開発した1990年代末当時、ウェブアプリケーションの開発には、次に述べるようないくつかの問題があった。 ウェブアプリケーション(動的なウェブページ)を記述するには--CGIを用いるか、MicrosoftのIISによるActive Server Pages (ASP) を用いるのが大半だった。 CGI はその特性から実行時のオーバーヘッドが高く、性能を向上することが難しかった。 ASP はサーバが高価な Microsoft Windows NT Server である必要があった。 Javaサーブレットはこれらの問題をある程度解決することができる技術だった。 デスクトップにおける展開 デスクトップ環境においては、スタンドアロンのJava (Java SE) のアプリケーションソフトウェア(Javaアプリケーション)は、これまではあまり多く使われていなかったが、近年はいくつかのソフトウェアが広く使われるようになっている。近年になって使われるようになってきた理由としては、次のことが挙げられる。 コンピュータの処理性能が急速に向上してきた。 Javaの仮想マシン(Java仮想マシン、Java VM)とJavaコンパイラが大きく改良されてきた。 使い勝手の良いJavaのデスクトップアプリケーションを簡単に開発できる強力な開発環境が、オープンソース界と商用開発企業の双方からさまざまに提供されるようになってきた。 広く使われているJavaのソフトウェアとしては、NetBeansおよびEclipse SDKの統合開発環境や、LimeWireやAzureusのようなファイル共有クライアントのソフトウェアなどがある。また数学ソフトウェアMATLABにおいても、ユーザインタフェースのレンダリングと計算機能の一部を実現するために使われている。多くの Java のSwingやSWTのウィジェット・ツールキットを使ったアプリケーションが、現在も開発されている。 このように、近年はデスクトップ上でJavaアプリケーションを使う事例が増えつつあるものの、従来は次に述べるいくつかの理由のためにあまり使われてこなかった Javaアプリケーションは、Java実行環境のオーバーヘッドのため、ネイティブアプリケーションと比べて、大量のメモリを使うことが多い。 グラフィカルユーザインタフェース (GUI) は実行対象となるプラットフォーム特有のヒューマンインタフェースガイドライン (HIG) を考慮しない傾向があった。HIG を考慮したアプリケーションを開発することによって、ユーザはアプリケーションをすぐに使い慣れることができる。また、デフォルトではフォントスムーシングが使えない。そのためユーザインタフェースの文字列(テキスト)の表示の品質が低くなってしまう。 Java開発キット (JDK) として無償で提供される基本的な開発環境は、使い勝手の良いデスクトップアプリケーションを簡単に開発するには、力不足だった。 近年では先述したとおり、使い勝手の良いJavaのデスクトップアプリケーションを簡単に開発できる強力なツールが、オープンソース/商用ともに提供され使えるようになっている。 Java実行環境 (JRE) はこれまで数度のメジャーバージョンアップを経ており、複数のバージョンが存在する。ユーザはJavaアプリケーションを使い始める際には、必要に応じて、そのアプリケーションが動くバージョン、もしくはそのバージョンより新しいバージョンのJava実行環境をインストールする必要があった。--Java実行環境は、7MB 以上のサイズであり、そのダウンロードとインストールもやや不便な手順をふむ必要があった。 近年では Java Web Startの登場によりダウンロードとインストールも自動化され、ブラウザでJavaアプリケーションを見つけるとクリック一回でJREのダウンロード、インストール、アップデートなどをその場で済ませて Java Web Start 対応Swingアプリケーション実行が可能になっている。 一部のソフトウェア開発者は、情報技術はウェブを基盤としたモデルが主流となっており、スタンドアロンアプリケーションは流行遅れであり、新しいプログラミング技術は優れたウェブアプリケーションを開発することに充てられている、と思っていた。この見解については、ソフトウェア技術者の間で賛否が分かれている。 現在では、リッチクライアントやWeb 2.0の登場により新たなパラダイムが生まれようとしている。すなわちウェブを基盤としたウェブアプリケーションとスタンドアロンアプリケーションの融合である。ウェブアプリケーションをAjaxや Java Web Start、Adobe Flash などと組み合わせることにより、Web2.0時代に見合ったより洗練されたアプリケーションを開発することができる。 パーソナルコンピュータにおける実行環境 現在、ほとんどの パーソナルコンピュータ (PC) のユーザは、何ら問題なくウェブおよびデスクトップ環境上でJavaアプリケーションを実行できる。多くのPCメーカーは、自分たちが製造・販売する Windows PCにJava実行環境 (JRE) を同梱している。アップルの Mac OS X や、多くのLinuxディストリビューションでも、Java実行環境を同梱している。そのため、マイクロソフトが2001年頃以降にJava実行環境をWindowsに同梱していないことの影響は小さい。 2001年頃にマイクロソフトによるJava実行環境をWindowsに同梱することを止めたという行動は、サン・マイクロシステムズが同社を「品質の低い」Java実行環境を同梱してきたとして告訴したことが契機となった。マイクロソフトがそれまでWindowsに同梱してきたJava実行環境向けに開発されたJavaプログラムは、他のプラットフォームのJava実行環境で動かない可能性があった。 しかし近年では、Javaアプリケーションパッケージ自体にJava実行環境を同梱する事例が少なくない。その背景にはJavaアプリケーション開発者の判断がある。Javaアプリケーションが想定どおりに機能するよう、Java実行環境のバージョンの違いによる非互換性に基づく不具合を避けるために、PCに同梱されているJava実行環境を使わないという判断である。 現在では、Javaアプレットは動作対象のJava実行環境のバージョンを認識することができる。また、バージョン間の互換性も プログラミング言語の中では高い水準にあり、上位互換性については java SE 1.3 以降は大きな問題はほぼおきにくくなっている。さらに Java Web Start ではデスクトップにインストールされているJavaのバージョンを確認してアップデートできるならアップデートし、それだけでなく Java Web Start 対応アプリケーションをもアップデートしようとする。そのため古いバージョンのJava実行環境を使っているマシンがあったとしても、自動アップデートされるためにそう難しい問題は起きない。 組み込みシステム 組み込みシステム向けの Java (Java ME) も広く使われている。 携帯機器(携帯電話・PHSやPDA・スマートフォン等)にJavaの実行環境が実装されるケースが多い。Java環境はこれら携帯機器全般に広く普及している。一方、 Symbian および BREW は携帯電話や(日本的定義での)スマートフォンを主なターゲットとし、Javaと競合している。 Java MEでは、BREWとは異なり、開発者がライセンス料を支払わずに、プログラムを開発することができる。Java MEはSymbianより広く普及している。その理由は、Java MEがSymbianより広範な携帯機器、特に廉価なモデルで動作するからである。こうした事情からサードパーティによりOpera miniのようなフリーのJavaソフトウェアを開発することができるようになった。 携帯機器のJava MEプログラムは、サンドボックスのもとで動くため、多くの開発者が特別な配慮をせずにプログラムを開発しても、安全に実行できる。携帯機器のJava技術が多様化するに伴い、異なるメーカーの携帯機器でもJavaプログラムが動くよう、携帯機器のためのJava技術の標準が必要となった。携帯機器のためのJava MEの標準がMobile Information Device Profile (MIDP) である。最初の標準はMIDP 1で、小さい画面を想定したものであり、音声機能は無く、プログラムサイズは32kBまでという制限があった。後のMIDP 2の標準では、音声機能を備え、プログラムサイズの制限は64kBまでと緩和された。携帯機器の設計の進歩は標準化よりも急速であるため、一部のメーカーは、MIDP 2標準の最大プログラムサイズなどいくつかの制限を、意図的に緩和して携帯機器を開発している。 携帯機器におけるJava MEの競合技術について簡単に述べる。 Symbianの技術は、シンビアンが開発した携帯電話向けのユーザインタフェースフレームワークを備えたプラットフォームであり、マルチスレッド機能やメモリ保護機能をもつ。開発用言語はC++やJava MEなどである。Java と同様に、開発者がライセンス料を支払わずに、プログラムを開発することができる。 BREWの技術は、クアルコムが開発し推進している、携帯電話向けのプラットフォームである。開発用言語は C/C++ である。Javaと異なり、プログラムを開発するために、開発者がライセンス料を支払う必要がある。BREWプログラムは、携帯電話利用者に課金する機能にアクセスすることができる。この課金機能は、クアルコムが管理する厳重な承認機能を、必要とする。この承認機能により、ライセンス料を徴収することができ、また携帯電話ごとにどの BREW プログラムが使えるかを制御することができる。BREWを採用する携帯電話事業社は、排他的なコンテンツ配布の技術を使うことができる。一部の携帯電話事業社はこのコンテンツ配布技術から利益を得ることができると考えている。 世界的な動向としては、 GSMの方式を採用するほとんどの携帯電話事業社は、Javaを採用する傾向がある。 CDMAの方式を採用する携帯電話事業社の多くは、BREWを採用する傾向がある。ただし例外的に、CDMA式を採用するアメリカ合衆国の携帯電話事業者 Sprint Nextel Corporation は、Javaを採用している。 Symbian のスマートフォンは、スマートフォン市場で85%を占有している。 Javaの実装は携帯機器(携帯電話・PHSやPDA・スマートフォン等)に広く普及している。 また、2001年にはソニーのコンシューマゲーム機 PlayStation2 にJava 仮想マシンが搭載される予定と発表され話題になった。 クラスライブラリなどを含めた、Javaバイトコードの実行環境と開発環境(広義のJava)については、Javaプラットフォーム 言語の文法に関してはJavaの文法 バージョン JDK 1.0(1996年1月23日) JDK 1.1(1997年2月19日) J2SE 1.2(1998年12月8日) J2SE 1.3(2000年5月8日) J2SE 1.4 (2002年2月6日) J2SE 5.0(2004年9月30日) Java SE 6(2006年12月11日) Java SE 6 Update 10 Java SE 7(2011年7月28日) Java SE 8 http //java.com/