Archive for the ‘Tcl/Java’ Category
-
Hello, Win32 API(Tcl/Java) World!
Posted on 1月 13th, 2013 by cx20
Win32 API(Tcl/Java)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Tcl/Java にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
package require java java::import org.eclipse.swt.internal.win32.OS java::import org.eclipse.swt.internal.win32.TCHAR set lpText [java::new {TCHAR int java.lang.String boolean} 0 "Hello, Win32 API World!" true] set lpCaption [java::new {TCHAR int java.lang.String boolean} 0 "Hello, World" true] java::call OS MessageBox 0 $lpText $lpCaption [java::field OS MB_OK]
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jaclsh Hello.tcl
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Java 3D(Tcl/Java) World!
Posted on 12月 18th, 2012 by cx20
Java 3D(Tcl/Java)
Java 3D は Java による 3D グラフィックライブラリである。
以下は Tcl/Java による Java 3D の使用例となっている。ソースコード
package require java java::import java.awt.BorderLayout java::import java.awt.GraphicsConfiguration java::import java.awt.Font java::import javax.media.j3d.Canvas3D java::import javax.media.j3d.BranchGroup java::import javax.media.j3d.Transform3D java::import javax.media.j3d.TransformGroup java::import javax.media.j3d.Appearance java::import javax.media.j3d.Material java::import javax.media.j3d.Font3D java::import javax.media.j3d.FontExtrusion java::import javax.media.j3d.Text3D java::import javax.media.j3d.Shape3D java::import javax.media.j3d.DirectionalLight java::import javax.media.j3d.RotationInterpolator java::import javax.media.j3d.Alpha java::import javax.media.j3d.BoundingSphere java::import javax.swing.JFrame java::import javax.vecmath.Vector3f java::import javax.vecmath.Color3f java::import com.sun.j3d.utils.universe.SimpleUniverse proc createCanvas3D { frame } { $frame setLayout [java::new BorderLayout] set config [java::call SimpleUniverse getPreferredConfiguration] set canvas3D [java::new Canvas3D $config] $frame add $canvas3D return $canvas3D } proc createSceneGraph {} { set objRoot [java::new BranchGroup] set mover [moveTextBack] set spinner [createSpinner] set rotator [java::new RotationInterpolator [java::new Alpha -1 4000] $spinner [java::new Transform3D] 0.0 [expr [java::field Math PI] * 2]] $rotator setSchedulingBounds [java::new BoundingSphere] $spinner addChild $rotator $objRoot addChild $mover $mover addChild $spinner $spinner addChild [createTextShape] setLighting $mover return $objRoot } proc createSpinner {} { set spinner [java::new TransformGroup] $spinner setCapability [java::field TransformGroup ALLOW_TRANSFORM_WRITE] return $spinner } proc moveTextBack {} { set transform3D [java::new Transform3D] $transform3D setTranslation [java::new Vector3f 0.0 0.0 -10.0] return [java::new TransformGroup $transform3D] } proc createTextShape {} { set textAppear [java::new Appearance] $textAppear setMaterial [java::new Material] set font3D [java::new Font3D [java::new Font "MS Pゴシック" [java::field Font PLAIN] 1] [java::new FontExtrusion]] set textGeom [java::new Text3D $font3D [java::new String "Hello, Java 3D World!"]] $textGeom setAlignment [java::field Text3D ALIGN_CENTER] set textShape [java::new Shape3D] $textShape setGeometry $textGeom $textShape setAppearance $textAppear return $textShape } proc setLighting { objMove } { set light [java::new DirectionalLight] $light setInfluencingBounds [java::new BoundingSphere] $light setDirection [java::new Vector3f 0.0 0.0 -1.0] $light setColor [java::new Color3f 1.0 1.0 1.0] $objMove addChild $light } proc connect { canvas3D scene } { set universe [java::new SimpleUniverse $canvas3D] set view [$universe getViewingPlatform] [$universe getViewingPlatform] setNominalViewingTransform $universe addBranchGraph $scene } set frame [java::new JFrame] $frame setDefaultCloseOperation [java::field JFrame EXIT_ON_CLOSE] $frame setTitle "Hello, World" $frame setSize 640 480 set canvas3D [createCanvas3D $frame] set scene [createSceneGraph] connect $canvas3D $scene $frame setVisible true vwait done
実行方法
C:¥> jaclsh hello.tcl
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 3D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, Java 2D(Tcl/Java) World!
Posted on 12月 17th, 2012 by cx20
Java 2D(Tcl/Java)
Java 2D は Java による 2D グラフィックライブラリである。
以下は Tcl/Java による Java 2D の使用例となっている。ソースコード
package require java java::import javax.swing.JFrame java::import java.awt.Canvas java::import java.awt.Graphics java::import java.awt.Graphics2D set frame [java::new JFrame] $frame setDefaultCloseOperation [java::field JFrame EXIT_ON_CLOSE] $frame setTitle "Hello, World" $frame setSize 640 480 set canvas [java::new Canvas] $frame add $canvas $frame setVisible true $canvas createBufferStrategy 2 set strategy [$canvas getBufferStrategy] set g [$strategy getDrawGraphics] while { true } { $g {drawString java.lang.String int int} "Hello, Java 2D World!" 0 16 $strategy show } vwait done
コンパイル&実行方法
C:¥> jaclsh hello.tcl
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 2D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, SWT(Tcl/Java) World!
Posted on 12月 15th, 2012 by cx20
SWT(Tcl/Java)
SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
IBM により AWT や Swing を置き換える目的で作成された。
以下は Tcl/Java による SWT の使用例となっている。ソースコード
package require java java::import org.eclipse.swt.SWT java::import org.eclipse.swt.widgets.Display java::import org.eclipse.swt.widgets.Shell java::import org.eclipse.swt.widgets.Label java::import org.eclipse.swt.layout.FillLayout set display [java::new Display] set shell [java::new Shell $display] $shell setText "Hello, World" set layout [java::new FillLayout [java::field SWT VERTICAL]] $shell setLayout $layout set label [java::new Label $shell [java::field SWT BORDER]] $label setText "Hello, SWT World!" $shell setSize 640 480 $shell open while { ![$shell isDisposed] } { if { ![$display readAndDispatch] } { $display sleep } } $display dispose
実行方法
C:¥> SET CLASSPATH=bsh-2.0b4.jar;org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jaclsh hello.bsh
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, SWT World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, Swing(Tcl/Java) World!
Posted on 12月 14th, 2012 by cx20
Swing(Tcl/Java)
Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
以下は Tcl/Java による Swing の使用例となっている。ソースコード
package require java java::import javax.swing.JFrame java::import javax.swing.JLabel set frame [java::new JFrame] $frame setDefaultCloseOperation [java::field JFrame EXIT_ON_CLOSE] $frame setTitle "Hello, World" $frame setSize 640 480 set label [java::new JLabel "Hello, Swing World!"] $label setVerticalAlignment [java::field JLabel TOP] $frame add $label $frame setVisible true vwait done
実行方法
C:¥> jaclsh Hello.tcl
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Swing World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, AWT(Tcl/Java) World!
Posted on 12月 13th, 2012 by cx20
AWT(Tcl/Java)
AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
以下は Tcl/Java による AWT の使用例となっている。ソースコード
package require java java::import java.awt.Frame java::import java.awt.Label java::import java.awt.FlowLayout set frame [java::new Frame] java::bind $frame windowClosing exit $frame setTitle "Hello, World" $frame setSize 640 480 $frame setLayout [java::new FlowLayout [java::field FlowLayout LEFT]] set label [java::new Label "Hello, AWT World!"] $frame add $label $frame setVisible true vwait done
実行方法
C:¥> jaclsh hello.tcl
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, AWT World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, JDBC Type4(Tcl/Java) World!
Posted on 10月 21st, 2012 by cx20
JDBC Type4
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type4 は DBMS のクライアントライブラリを使用しない Pure Java の DBMS ドライバである。
以下は Tcl/Java による JDBC ライブラリの使用例となっている。ソースコード(Tcl/Java + JDBC Type4 + SQL Server)
package require java java::import -package java.sql DriverManager java::call Class forName "com.microsoft.sqlserver.jdbc.SQLServerDriver" set conn [java::call DriverManager getConnection "jdbc:sqlserver://;serverName=localhost" "sa" "P@ssW0rd"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type4 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
実行方法(Tcl/Java + JDBC Type4 + SQL Server)
C:¥> SET CLASSPATH=sqljdbc4.jar;%CLASSPATH% C:¥> jaclsh Hello.tcl
ソースコード(Tcl/Java + JDBC Type4 + Oracle)
package require java java::import -package java.sql DriverManager java::call Class forName "oracle.jdbc.driver.OracleDriver" set conn [java::call DriverManager getConnection "jdbc:oracle:thin:@localhost:1521:orcl" "scott" "tiger"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
実行方法(Tcl/Java + JDBC Type4 + Oracle)
C:¥> SET CLASSPATH=ojdbc6.jar;%CLASSPATH% C:¥> jaclsh Hello.tcl
ソースコード(Tcl/Java + JDBC Type4 + MySQL)
package require java java::import -package java.sql DriverManager java::call Class forName "com.mysql.jdbc.Driver" set conn [java::call DriverManager getConnection "jdbc:mysql://localhost:3306" "root" "P@ssW0rd"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type4 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
実行方法(Tcl/Java + JDBC Type4 + MySQL)
C:¥> SET CLASSPATH=mysql-connector-java-5.1.22-bin.jar;%CLASSPAH% C:¥> jaclsh Hello.tcl
実行結果
Hello, JDBC Type4 World!
-
Hello, JDBC Type2(Tcl/Java) World!
Posted on 10月 20th, 2012 by cx20
JDBC Type2
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type2 は JDBC と DBMS クライアントの API をマップさせたブリッジドライバである。
例えば、Oracle であればクライアントライブラリとして OCI が使用される。
以下は Tcl/Java による JDBC ライブラリの使用例となっている。ソースコード(Tcl/Java + JDBC Type2 + Oracle)
package require java java::import -package java.sql DriverManager java::call Class forName "oracle.jdbc.driver.OracleDriver" set conn [java::call DriverManager getConnection "jdbc:oracle:oci:@orcl" "scott" "tiger"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
実行方法
C:¥> SET CLASSPATH=ojdbc6.jar;%CLASSPATH% C:¥> jaclsh Hello.tcl
実行結果
Hello, JDBC Type2 World!
-
Hello, JDBC Type1(Tcl/Java) World!
Posted on 10月 19th, 2012 by cx20
JDBC Type1
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type1 は JDBC と ODBC の API をマップさせたブリッジドライバである。
以下は Tcl/Java による JDBC ライブラリの使用例となっている。ソースコード(Tcl/Java + JDBC Type1 + ODBC + Jet データベース)
package require java java::import -package java.sql DriverManager java::call Class forName "sun.jdbc.odbc.JdbcOdbcDriver" set conn [java::call DriverManager getConnection "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=.\hello.mdb" "" ""] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type1 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
ソースコード(Tcl/Java + JDBC Type1 + ODBC + ACE データベース)
package require java java::import -package java.sql DriverManager java::call Class forName "sun.jdbc.odbc.JdbcOdbcDriver" set conn [java::call DriverManager getConnection "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb" "" ""] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type1 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
ソースコード(Tcl/Java + JDBC Type1 + ODBC + SQL Server)
package require java java::import -package java.sql DriverManager java::call Class forName "sun.jdbc.odbc.JdbcOdbcDriver" set conn [java::call DriverManager getConnection "jdbc:odbc:Driver={SQL Server};SERVER=(local)" "sa" "P@ssW0rd"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type1 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
ソースコード(Tcl/Java + JDBC Type1 + ODBC + Oracle)
package require java java::import -package java.sql DriverManager java::call Class forName "sun.jdbc.odbc.JdbcOdbcDriver" set conn [java::call DriverManager getConnection "jdbc:odbc:Driver={Oracle in OraDb11g_home1};DBQ=ORCL" "scott" "tiger"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type1 World!' AS Message FROM DUAL"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
ソースコード(Tcl/Java + JDBC Type1 + ODBC + MySQL)
package require java java::import -package java.sql DriverManager java::call Class forName "sun.jdbc.odbc.JdbcOdbcDriver" set conn [java::call DriverManager getConnection "bc:odbc:Driver={MySQL ODBC 5.1 Driver};Server=localhost" "root" "P@ssW0rd"] set stmt [$conn createStatement] set rs [$stmt executeQuery "SELECT 'Hello, JDBC Type1 World!' AS Message"] while { [$rs next] } { puts [$rs {getString int} 1] } $rs close $stmt close $conn close
実行方法
C:¥> jaclsh Hello.tcl
実行結果
Hello, JDBC Type1 World!
-
Hello, Tcl/Java World!
Posted on 1月 16th, 2012 by cx20
Tcl/Java
Tcl/Java は Java から Tcl コマンドを利用できる「Jacl( Java Command Language)」と、Tcl スクリプトから Java ライブラリが使用できる拡張ライブラリ「Tcl Blend」からなるプロジェクトである。
なお、Java ライブラリが使用できるスクリプト言語としては他に Groovy、JRuby、Jython などがある。
ソースコード
ソースコード(Java ライブラリを使用)
#!/usr/bin/env jaclsh package require java [java::field System out] println "Hello, Tcl/Java World!"
実行方法(スクリプトファイルを指定して実行)
$ jaclsh hello.tcl
実行方法(実行権限を付与して実行)
$ chmod +x hello.tcl $ ./hello.tcl
実行結果
Hello, Tcl/Java World!