プロフィール
| |
- Author:あろは (alohakun)
- 若槻俊宏 (WAKATSUKI toshihiro)
連絡先 : alohakun ___at___ gmail.com mixi : http://mixi.jp/show_friend.pl?id=182927 twitter : http://twitter.com/alohakun
abstract
プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.
具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.
もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.
キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis





|
FC2カウンター
| |
|
ブロとも申請フォーム
| |
この人とブロともになる
|
|
Java3D で四角を表示してマウスで回したりドラッグしたりできる最低限のサンプル
| 2008/03/17(月) 01:10:45
|
私が最低限と言ったら本当に最低限なので,コンストラクタと main しかありません.
import javax.swing.JFrame; import javax.vecmath.Point3d; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import javax.media.j3d.BranchGroup; import javax.media.j3d.TransformGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.BoundingSphere; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
public class T extends JFrame { public T() { getContentPane().setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); getContentPane().add(canvas, BorderLayout.CENTER); OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL); orbit.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 100.0)); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.getViewingPlatform().setViewPlatformBehavior(orbit); BranchGroup root = new BranchGroup(); TransformGroup tg = new TransformGroup(); root.addChild(tg); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); MouseTranslate trans = new MouseTranslate(tg); BoundingSphere bounds = new BoundingSphere(); bounds.setRadius(5.0); trans.setSchedulingBounds(bounds); tg.addChild(trans); root.addChild(new ColorCube(0.1)); root.compile(); universe.addBranchGraph(root); } public static void main(String[] args) { T t = new T(); t.setBounds(10, 10, 400, 400); t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t.setVisible(true); } }
ひどいコードですが,一応これで動くと思います.なんか警告が出てるな…
~/work/java/j3d$ ~/jdk1.6.0_05/bin/javac T.java ~/work/java/j3d$ ~/jdk1.6.0_05/bin/java -cp . T Java 3D WARNING : reported GLX version = 1.2 GLX version 1.3 or higher is required The reported version number may be incorrect. There is a known ATI driver bug in glXQueryVersion that incorrectly reports the GLX version as 1.2 when it really is 1.3, so Java 3D will attempt to run anyway. JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality
次はオブジェクトの動かし方と,複数のオブジェクトを協調動作させる方法だなぁ… ようするに ToPoLo クローンみたいなのを作りたいわけです.伸び縮みとか曲がったりとか,いろいろな動くブロックをくっつけて,動く積み木を作るゲーム.
|
JAVA/VM|TB:0|CM:0|
|

▲
| |
|
JDK 6 を Debian/GNU linux にインストール
| 2008/03/16(日) 12:10:27
|
ついでに Java 3D も試してみる.
SUN の Java SE Downloads から jdk-6u5-linux-i586.bin と,Java 3D のサイトから java3d-1_5_1-linux-i586.bin と動作確認のための j3d-examples-1_5_1-src.zipを取ってくる.ant はインストール済みとする (Debian の場合は apt で入ります).途中で,文字化けを防ぐために,適当な日本語 truetype font にシンボリックリンクを作ってます.
$ chmod +x src/jdk-6u5-linux-i586.bin $ ./src/jdk-6u5-linux-i586.bin $ chmod +x src/java3d-1_5_1-linux-i586.bin $ cd jdk1.6.0_05/jre/ ~/jdk1.6.0_05/jre$ ../../src/java3d-1_5_1-linux-i586.bin ~/jdk1.6.0_05/jre$ ls lib/ext j3dutils.jar j3dcore.jar vecmath.jar ... ~/jdk1.6.0_05/jre$ ls lib/i386/ libj3dcore-ogl-cg.so libj3dcore-ogl.so ... ~/jdk1.6.0_05/jre$ cd lib/fonts ~/jdk1.6.0_05/jre/lib/fonts$ mkdir fallback ~/jdk1.6.0_05/jre/lib/fonts$ ln -s /usr/share/fonts/truetype/kochi/kochi-* fallback/ ~/jdk1.6.0_05/jre/lib/fonts$ ls fallback/ kochi-gothic-subst.ttf kochi-mincho-subst.ttf kochi-gothic.ttf kochi-mincho.ttf ~/jdk1.6.0_05/jre$ cd ../../work/java/j3d/ ~/work/java/j3d$ unzip j3d-examples-1_5_1-src.zip ~/work/java/j3d$ cd j3d-examples ~/work/java/j3d/j3d-examples$ export JAVA_HOME=/home/aloha/jdk1.6.0_05/
~/work/java/j3d/j3d-examples$ ant Buildfile: build.xml
init:
init-compile:
compile: [javac] Compiling 148 source files to /home/aloha/work/java/j3d/j3d-examples/build/classes [javac] 注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。 [javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。 [javac] 注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあり ます。 [javac] 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。 [copy] Copying 48 files to /home/aloha/work/java/j3d/j3d-examples/build/classes/org/jdesktop/j3d/examples/resources [copy] Copying 44 files to /home/aloha/work/java/j3d/j3d-examples/build/classes/org/jdesktop/j3d/examples
jar: [mkdir] Created dir: /home/aloha/work/java/j3d/j3d-examples/dist [jar] Building jar: /home/aloha/work/java/j3d/j3d-examples/dist/j3d-examples.jar
BUILD SUCCESSFUL Total time: 7 seconds
~/work/java/j3d/j3d-examples$ ~/jdk1.6.0_05/bin/java -classpath build/classes org.jdesktop.j3d.examples.hello_universe.HelloUniverse
Java 3D WARNING : reported GLX version = 1.2 GLX version 1.3 or higher is required The reported version number may be incorrect. There is a known ATI driver bug in glXQueryVersion that incorrectly reports the GLX version as 1.2 when it really is 1.3, so Java 3D will attempt to run anyway. JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality
四角形がぐるぐる回ってるデモが出ればインストール成功です.ついでに JOGL も入れておきましょう (前回の記事を参考に,既に jogl-1.1.0-linux-i586.zip が ~/work/java/jogl に展開済みであったとします)
~/work/java/j3d$ cd ../jogl ~/work/java/jogl$ cp jogl-1.1.0-linux-i586/lib/* ~/jdk1.6.0_05/jre/lib/ext/ ~/work/java/jogl$ ls ~/jdk1.6.0_05/jre/lib/ext dnsns.jar jogl.jar libjogl_cg.so sunpkcs11.jar gluegen-rt.jar libgluegen-rt.so localedata.jar vecmath.jar j3dcore.jar libjogl.so meta-index j3dutils.jar libjogl_awt.so sunjce_provider.jar ~/work/java/jogl$ ~/jdk1.6.0_05/bin/java -classpath jogl-demos.jar demos.gears.Gears INIT GL IS: com.sun.opengl.impl.GLImpl Chosen GLCapabilities: GLCapabilities [DoubleBuffered: true, Stereo: false, HardwareAccelerated: true, DepthBits: 24, StencilBits: 8, Red: 8, Green: 8, Blue: 8, Alpha: 8, Red Accum: 0, Green Accum: 0, Blue Accum: 0, Alpha Accum: 0, Multisample: false ] GL_VENDOR: VIA Technology GL_RENDERER: Mesa DRI UniChrome (KM400) 20060710 x86/MMX+/3DNow!+/SSE GL_VERSION: 1.2 Mesa 7.0.3-rc2
もうかれこれ 5 年ぐらい前に買ったビデオカードがオンボードの PC なので,環境の貧弱さがモロバレ.とりあえずデモ程度ならば問題なく動きます.
|
JAVA/VM|TB:0|CM:0|
|

▲
| |
|
JOGL (Java bindings for OpenGL) を使ってみる
| 2008/03/15(土) 23:01:30
|
みなさんは 1996 年 12 月にアートディンクから発売された PlayStation の 「ToPoLo (トポロ)」 というゲームをご存知でしょうか ?
いや,私もついさっきまでタイトルすら忘却の彼方だったのですが,ふと思い出してしまって気になって wikipedia のプレイステーション全ゲームタイトルを最初から虱潰しに探して,ようやく思い出しました (当時は小学生〜ギリギリ中学ぐらいだったと思ったので,初期のゲーム,ということだけは記憶にあった) 完全にタイトル忘れていたうえ,漫然と膨大なリストを眺めていただけなのにピタッと目が止まるあたり,人間の脳のフィルタリング能力ってほんと凄いですね.
まぁ,このゲームにはすごい期待していて,発売日に気合い入れて購入したような気がするのですが,そんなに記憶に残ってないってことは,たぶんすぐに投げ出してしまったのでしょうね.なんかいろいろな意味で操作性が悪かった記憶があります.広告とかだけ見てると,ものすごく面白そうだったのに,当時ですら全然話題にならなかったもんなぁ…
# 現在では,Google 先生に聞いても,こことここの2件しかヒットしません.どんだけマイナーなんだ ! アートディンクって会社は,太陽のしっぽとか THE ATLAS とか,妙に子供心をくすぐり,後々まで記憶に残る変なゲームばかり作っていた気がします.
そんなこんなで,3 D プログラミングがやりたい病が発症したので,JOGL を何となく試してみました.
とりあえず,jdk が入っているのは前提として (私の環境の場合は ~/jdk1.5.0_11 が JAVA_HOME) JOGL のサイトから環境に合わせて jogl-1.1.0-linux-i586.zip などと jogl-demos.jar を取ってきて,展開して出てきた中身の lib 以下を JAVA_HOME/jre/lib/ext にコピーして,デモが動けば OK です.
~/work/jogl$ unzip jogl-1.1.0-linux-i586.zip ~/work/jogl$ ls jogl-1.1.0-linux-i586 CHANGELOG.txt LICENSE-JOGL-1.1.0.txt Userguide.html COPYRIGHT.txt README.txt lib ~/work/jogl$ cp jogl-1.1.0-linux-i586/lib/* ~/jdk1.5.0_11/jre/lib/ext/ ~/work/jogl$ ~/jdk1.5.0_11/bin/java -classpath jogl-demos.jar demos.gears.Gears
歯車が回っているのを,マウスでグリグリ動かせるはず.
この記事の続きを読む…
ここからは完全に余談です. 次は何か適当なプログラムをコンパイルして… と思ったら,なぜか javac が Exception in thread "main" java.lang.NoClassDefFoundError: sun/tools/javac/Main という非常に謎のエラーを吐いて,help の起動すらできなくなってしまいました.謎過ぎる.どうやら JAVA_HOME/lib/tools.jar とかいう重要なアレが消失している模様.致命的です. せっかくなので,java6 の jdk を install しようと思って SUN のサイトに行ったら,最悪なことにメンテナンス中でした.しかたがないので,昔のファイルを元に,jdk を再インストール.インストーラの日本語が化け化けなので,英語環境で. $ rm -rf netbeans-5.5/ $ rm -rf jdk1.5.0_11/ $ LANG=c ~/src/jdk-1_5_0_11-nb-5_5-linux-ml.bin
しかし,なぜかインストールが正常に終わらない.変なファイルができてるだけ.なんかいろいろマズかった ? $ ls ~/jdk1.5.0_11 _uninst jdk-1_5_0_11-fcs-bin-b03-linux-i586-15_dec_2006.bin
テキトーに実行してみたら,いろいろ展開されたので,それと差し替えて,同じ作業を. $ cd ~/jdk1.5.0_11/ $ ./jdk-1_5_0_11-fcs-bin-b03-linux-i586-15_dec_2006.bin $ ls ~/jdk1.5.0_11/ COPYRIGHT README.html bin include lib sample LICENSE THIRDPARTYLICENSEREADME.txt demo jre man src.zip $ .. $ mv ~/jdk1.5.0_11 ~/jdk1.5.0_11.old $ mv ~/jdk1.5.0_11.old/jdk1.5.0_11/ . $ cd ~/work/jogl ~/work/jogl$ cp jogl-1.1.0-linux-i586/lib/* ~/jdk1.5.0_11/jre/lib/ext/
とりあえず, ここのサンプルをファイルに保存してコンパイルして実行できたので,めでたしめでたし.無駄に時間を食ってしまったので,今回はここまで. ~/work/jogl$ ~/jdk1.5.0_11/bin/javac RotateOGL.java ~/work/jogl$ ~/jdk1.5.0_11/bin/java -classpath . RotateOGL
あまりにもテキトー過ぎる処置だったので,そのうち jdk 6 が安定してきたら (まだ linux 版は微妙みたい) ちゃんと SUN Java をインストールする. う〜ん,やっぱり Java は apt で入らないから面倒だなぁ.
|
JAVA/VM|TB:0|CM:0|
|

▲
| |
|
java 1.5 ランタイム環境で文字化け
| 2007/10/28(日) 01:05:52
|
とある java アプリケーションを実行したところ,文字が全部豆腐になってしまった.
どうやら,フォントが jre のデフォルトパスに無いのが原因らしい.
http://java.sun.com/j2se/1.5.0/ja/relnotes.html#linux
Linux 使用時の注意
Red Hat Linux のバージョンには JIS X 0201 用の TrueType フォントをデフォルトで持たないものがあり、フォント設定ファイルに JIS X 0201 の定義がありません。回避策として TrueType JIS X 0201 フォントを J2RE の lib/fonts/fallback ディレクトリにインストールしてください。
というわけで,とりあえずテキトーにそれらしいフォントを探してみると,うちの Debian の場合
$ mkdir -p ~/jdk1.5.0_11/lib/fonts/fallback $ ln -s /usr/share/fonts/truetype/kochi/kochi-mincho.ttf jdk1.5.0_ 11/jre/lib/fonts/fallback/ $ ln -s /usr/share/fonts/truetype/kochi/kochi-gothic.ttf jdk1.5.0_ 11/jre/lib/fonts/fallback/ $ jdk1.5.0_11/bin/java -jar mj.jar
てな感じに,フォントにシンボリックを張ったら直った.これでようやく東風荘ができる (笑)
しかし,せっかく起動したんだけど,やっぱり Java 版はイマイチ信頼できない感じ.Windows 版の方が良いね.
# あれれ,おかしいよね.僕は大学の研究室マシンしか Windows 機は持ってないはずなのに…
まぁ,alohakun っていう人を東風荘で見かけたら,おてやわらかにお願いします.
麻雀歴自体は,小学校の頃なんとなく親戚の人がやっていたのを見て興味を持って,蛭子能収さんのマンガ麻雀入門でルールを覚えて (良い本でした), 「哲也」 のマガジン連載をきっかけに中学時代の悪友たちも始めてそれなりに打ち初めたので,もう10年以上ですが,そんなにたくさんやってないので弱いです.もう 6 年ぐらいまともにやってないので,付計算もとっさにできないしなぁ.70 符 2 ハンって何点よ… さすがに google 電卓も答えてくれないね (当たり前.ちなみに,70符 は 2300/4500 点.3 ハンで満貫なので,2345 だけ覚えておけばおk.親は 3468)
戦術書や麻雀劇画は脳味噌が腐るほどたくさん読みましたが.たぶん,余裕で麻雀劇画は 100 冊以上読んでると思う.ちなみに,よく麻雀しに行った友人宅に,ジョジョや男塾が全巻あったのが,僕の人格形成に多大な影響を与えていると思います.抜け番の時,もう何回読んだかわかんないぐらい読んだな.
というか,僕は中学時代と高校時代,本当に麻雀しかやってないので.もう少し実りのある,青春らしい青春を送りたかったなぁと未だに後悔しております.あまりにも勉強しなさすぎて,高校受験も全然ダメで,近所のほどほどの進学校にさえ行けなかったし (大学からは,それなりに勉強しましたが.地方の小さな大学ですが,いちおう主席で出て,学長賞も貰いました.過去の栄光).
なんで急に麻雀がどうしたとか言っているかというと,さっき古本屋で 「根こそぎフランケン」 を立ち読みしてて,高校時代ぐらいの悪い血が騒いだというか (笑)
あと,たまたま札幌に,高校時代の同級生が 2 人いることが最近わかって,ちょくちょく打ったりしてたりというのも.まさか札幌で再開して,(当時は打ったこと無いメンツなのに) 麻雀して遊んでるとか,人生ってのはわかんないものです.
そういえば,なんか札幌には,レート 0.2 でゲーム代 300 円とかの店もあるそうですね.
僕は田舎者なんで雀荘って行ったこと無いんですが (田舎の雀荘ってのは… ねぇ,ホント (笑) 常連さんしかいないし,そのスジの御方もいる,おっかねーところですよ.おまけにリャンピンに赤5焼き鳥ご祝儀アリスだの),そのうち行ってみようかしらね.
朝の 9:00 〜 12:00 はゲーム代が安いらしい.なんと健康的で清潔な.時代も変わったものです. 明日早起きして行ってみるかな…
|
JAVA/VM|TB:0|CM:2|
|

▲
| |
|
時代は XML だよねっと
| 2007/08/15(水) 17:36:52
|
この間作った JVM のクラスファイルのコンスタントプールをダンプするプログラムを,DOM 経由で XML を吐くようにしてみた.
$ javac ClassFileDumper.java $ java ClassFileDumper ClassFileDumper.class > ClassFileDumper.xml
とかすると,こんな感じの XML ファイルが出力される.
なんか,JDK 1.5 だと DOM を変換する時に XML の整形が上手く行かない感じらしい.
// JDK 1.5 だと上手く行かないらしい… transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");
一回 DOM (木構造) を作ってるんだから,これをもうちょっとがんばれば,クラスファイルを編集する,jvm golf 用エディタとか作れるかも (まぁ,それ系のツールは既にたくさんありそうですが). XML から Java のクラスファイルを出すってのはそんなに難しく無いと思うし (面倒だけど).ちゃんと XML と Java のデータ型をマッピングするようにすれば凄く簡単になると思うけど,今のところ全部いいかげん.
というか,そもそも DOM の仕様を全然知らない.コンスタントプールの要素間のリンク構造とかって,どうやって表現すればいいんだろ ?
以下,いろいろ残念な感じのコード.
この記事の続きを読む…
追記 : ちょっと冗長なところをはぶいた
import java.io.*; import java.io.FileInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.DOMImplementation; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;
public class ClassFileDumper { public static void main(String[] args) throws Exception { try { // class ファイルを ByteBuffer に丸ごと読みこむ FileInputStream is = new FileInputStream(args[0]); FileChannel channel = is.getChannel(); ByteBuffer buffer = ByteBuffer.allocate((int)channel.size()); channel.read(buffer); is.close(); channel.close(); buffer.order(java.nio.ByteOrder.BIG_ENDIAN); buffer.rewind(); // DOM の初期化 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation domImpl = builder.getDOMImplementation(); Document document = domImpl.createDocument("", "ClassFile", null); TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer();
Element ClassFile = document.getDocumentElement();
int magic = buffer.getInt(); Element magicElm = document.createElement("magic"); magicElm.appendChild(document.createTextNode(Integer.toString(magic))); ClassFile.appendChild(magicElm);
short minor_version = buffer.getShort(); Element minorElm = document.createElement("minor_version"); minorElm.appendChild(document.createTextNode(Integer.toString(minor_version))); ClassFile.appendChild(minorElm);
short major_version = buffer.getShort(); Element majorElm = document.createElement("major_version"); majorElm.appendChild(document.createTextNode(Integer.toString(major_version))); ClassFile.appendChild(majorElm);
short constant_pool_count = buffer.getShort(); Element cpcElm = document.createElement("constant_pool_count"); cpcElm.appendChild(document.createTextNode(Integer.toString(constant_pool_count))); ClassFile.appendChild(cpcElm); Element constant_pool = document.createElement("constant_pool"); for(int i = 1; i < constant_pool_count; i++) { Element e = readConstantPoolEntry(buffer, document); e.setAttribute("constant_pool_index", Integer.toString(i)); constant_pool.appendChild(e); } ClassFile.appendChild(constant_pool);
// DOM を System.out に出力 transformer.setOutputProperty(javax.xml.transform.OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(document); transformer.transform(source, new StreamResult(System.out)); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("usage : java ClassFileDumper hoge.class"); } catch (FileNotFoundException e) { System.out.println("No such class file."); } catch (IOException e) { e.printStackTrace(); } } static Element readConstantPoolEntry(ByteBuffer buffer, Document document) { byte tag = buffer.get(); Element entry = document.createElement(CONSTANT_INFO_NAME[tag]); Element tagElm = document.createElement("tag"); tagElm.appendChild(document.createTextNode(Integer.toString(tag))); entry.appendChild(tagElm); switch(tag) { case CONSTANT_Utf8 :{ short length = buffer.getShort(); byte[] bytes = new byte[length]; buffer.get(bytes, 0, length); Element lengthElm = document.createElement("length"); lengthElm.appendChild(document.createTextNode(Integer.toString(length))); entry.appendChild(lengthElm); Element bytesElm = document.createElement("bytes"); bytesElm.appendChild(document.createTextNode(new String(bytes))); entry.appendChild(bytesElm); break; } case CONSTANT_Integer :{ int val = buffer.getInt(); Element valElm = document.createElement("int"); valElm.appendChild(document.createTextNode(Integer.toString(val))); entry.appendChild(valElm); break; } case CONSTANT_Float :{ float val = buffer.getFloat(); Element valElm = document.createElement("float"); valElm.appendChild(document.createTextNode(Float.toString(val))); entry.appendChild(valElm); break; } case CONSTANT_Long :{ long val = buffer.getLong(); Element valElm = document.createElement("long"); valElm.appendChild(document.createTextNode(Long.toString(val))); entry.appendChild(valElm); break; } case CONSTANT_Double :{ double val = buffer.getInt(); Element valElm = document.createElement("double"); valElm.appendChild(document.createTextNode(Double.toString(val))); entry.appendChild(valElm); break; } case CONSTANT_Class :{ short name_index = buffer.getShort(); Element name_indexElm = document.createElement("name_index"); name_indexElm.appendChild(document.createTextNode(Integer.toString(name_index))); entry.appendChild(name_indexElm); break; } case CONSTANT_String :{ short string_index = buffer.getShort(); Element string_indexElm = document.createElement("string_index"); string_indexElm.appendChild(document.createTextNode(Integer.toString(string_index))); entry.appendChild(string_indexElm); break; } case CONSTANT_Fieldref : case CONSTANT_Methodref : case CONSTANT_InterfaceMethodref :{ short class_index = buffer.getShort(); short name_and_type_index = buffer.getShort(); Element class_indexElm = document.createElement("class_index"); class_indexElm.appendChild(document.createTextNode(Integer.toString(class_index))); entry.appendChild(class_indexElm); Element name_and_type_indexElm = document.createElement("name_and_type_index"); name_and_type_indexElm.appendChild(document.createTextNode(Integer.toString(name_and_type_index))); entry.appendChild(name_and_type_indexElm); break; } case CONSTANT_NameAndType :{ short name_index = buffer.getShort(); short descriptor_index = buffer.getShort(); Element name_indexElm = document.createElement("name_index"); name_indexElm.appendChild(document.createTextNode(Integer.toString(name_index))); entry.appendChild(name_indexElm); Element descriptor_indexElm = document.createElement("descriptor_index"); descriptor_indexElm.appendChild(document.createTextNode(Integer.toString(descriptor_index))); entry.appendChild(descriptor_indexElm); break; } default : System.out.println("Invalid data tag : " + tag); System.exit(-1); } return entry; } private final static byte CONSTANT_Utf8 = 0x01; private final static byte CONSTANT_Integer = 0x03; private final static byte CONSTANT_Float = 0x04; private final static byte CONSTANT_Long = 0x05; private final static byte CONSTANT_Double = 0x06; private final static byte CONSTANT_Class = 0x07; private final static byte CONSTANT_String = 0x08; private final static byte CONSTANT_Fieldref = 0x09; private final static byte CONSTANT_Methodref = 0x0a; private final static byte CONSTANT_InterfaceMethodref = 0x0b; private final static byte CONSTANT_NameAndType = 0x0c; private final static String[] CONSTANT_INFO_NAME = { null, "CONSTANT_Utf8_info", null, "CONSTANT_Integer_info", "CONSTANT_Float_info", "CONSTANT_Long_info", "CONSTANT_Double_info", "CONSTANT_Class_info", "CONSTANT_String_info", "CONSTANT_Fieldref_info", "CONSTANT_Methodref_info", "CONSTANT_InterfaceMethodref_info", "CONSTANT_NameAndType_info" }; }
|
JAVA/VM|TB:0|CM:0|
|

▲
| |
| |
|
|
最近のコメント
| |
| リンク
| |
このブログをリンクに追加する
| 最近のトラックバック
| |
| 人生の残り日数
| |
日本人男性の平均寿命は 28700日.
| RSSフィード
| |
| カテゴリー
| |
|
|