トップページ > dsPIC入門 > Javaでハイパーターミナル(1)
これから、ハイパーターミナルを作っていきます。
とは言っても、普通のWindows(?)に付いている「ハイパーターミナル」というアプリケーションを
忠実に再現しよう…というのが目的ではありません。
これまでdsPIC側でシリアル通信のプログラムを書いて
実験する際に、デバッグ用ツールとして使っていたのが「ハイパーターミナル」でした。もしもアレに相当する
アプリケーションを作るノウハウがあれば、dsPICとPCが相互連携するシステムを構成するための
基礎知識として役立つと思います。
後から応用が利くように、1つ1つの要素について丁寧に見ていくことにします。
(※これから作成するアプリケーションの名前は“serial_canvas”となっています。 これは、元々の題材としてシリアル通信とJavaの“Canvas”コンポーネントを組み合わせて グラフ処理のようなことをやろうと考えていたからです。その後、テキスト処理の方がより基礎的だと思ったので 途中でアプリケーション内容を変更しました。でも、タイトルを変えるのが面倒だったので(爆) そのままになりました。つまり、深い意味はないよ…ということです)
ということで、作っていくことにします。
いままで何度もやってますが、もう一度イチからやります。まずは「フレーム」を作って表示。
ファイル名は“serial_canvas0.java”です。
//****************************************************************************** //Javaでハイパーターミナル(0) ウィンドウ表示まで //****************************************************************************** //awtライブラリのインポート import java.awt.*; import java.awt.event.*; //swingライブラリのインポート import javax.swing.*; import javax.swing.event.*; //ioライブラリのインポート import gnu.io.*; import java.io.*; //****************************************************************************** //メインクラス。メイン関数ではMainFrameクラスのインスタンスを作成するだけです。 public class serial_canvas0 { //============================================================================= //メイン関数 public static void main(String args[]) { //MainFrameクラスのインスタンス、frameを作ります。 MainFrame frame = new MainFrame(); //×ボタンを押した時は、アプリケーション終了。 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //ウィンドウの大きさを設定。 frame.setSize(500,500); //ウィンドウが見えるようにします。(これは最後にしたほうが良いみたいです) frame.setVisible(true); } } //****************************************************************************** //実際のコンポーネントとかは、このクラスで管理します。JFrameを継承・・・ class MainFrame extends JFrame { //============================================================================= //コンストラクタ MainFrame() { //JFrameクラスのコンストラクタを呼びます super("serial_canvas0"); } }
すでにシリアル通信のところで解説した内容が多いのですが、このserial_canvasの記事は 独立したモノとして扱いたいのでもう一度再確認という意味で見ていくことにします。 プログラムの内容としては、ただウィンドウを表示させるだけ・・・。まったく面白くないのですが、 今後の基礎ということで。
//awtライブラリのインポート import java.awt.*; import java.awt.event.*; //swingライブラリのインポート import javax.swing.*; import javax.swing.event.*; //ioライブラリのインポート import gnu.io.*; import java.io.*;
awt…で始まるのはawtライブラリのファイルです。swingを使う時はインポートしなくても済む場合がありますが、 何かの拍子に(?)swingではなくawtの方を使いたくなる可能性があるので常套句として記述されることが 多いです。ちなみに、今回のウィンドウを表示するだけのプログラムでは記述しなくても正常にコンパイルされます 。。。
swing…で始まるのはswingライブラリのファイルです。 当然のことながら、こっちは記述しないと正常にコンパイルされません。
gnu.io…はシリアル通信を行うためのRXTXライブラリを使うために記述しています。今回はシリアル通信の処理は 記述していないので、別にインポートする必要はないのですが今後イチイチ書き足すのは面倒なので、 後々使いそうなクラス・ライブラリは今からインポートしてしまおう…ということです。java.ioについても同じです。 こっちは後から入出力ストリームのために使います。
public class serial_canvas0 { //============================================================================= //メイン関数 public static void main(String args[]) { //MainFrameクラスのインスタンス、frameを作ります。 MainFrame frame = new MainFrame(); //×ボタンを押した時は、アプリケーション終了。 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //ウィンドウの大きさを設定。 frame.setSize(500,500); //ウィンドウが見えるようにします。(これは最後にしたほうが良いみたいです) frame.setVisible(true); } }
メインクラスにフィールドはありません。単にメイン関数(メイン・メソッド…と呼ぶのに慣れてません)内で 以下に述べるMainFrameクラスのインスタンスを生成して終わりです。MeinFrameクラスはJFrameを継承しているので 、ウィンドウの大きさ等を設定する関数(…ではなく、メソッド)を持っています。 ウィンドウの大きさや×ボタンを押した際の処理 (default close operation…ですね)は後から変更したくなるかもしれないので、 あえてMainFrameクラスのコンストラクタではなく、このMainメソッドから実行するようにしてます。
このMainメソッドは今後、一切手を加えません。ずっとこのままです。MainFrameクラスを完全にカプセル化 してしまって、Mainメソッド内ではそのインスタンスを生成するだけ…という感じにしてしまいましょう。 各クラスは別のファイルとして扱うことができるので、次のMainFrameクラス以降、すべてのクラスは 別個の.javaファイルとして管理できます。今回のソースコードでは1つのjavaファイルの中に複数のクラスを 記述していますが、コンパイル後は記述されているクラスの数だけ.classファイルが生成されているので 結局は同じことだとわかります。 もしクラスごとにファイルを分けるのであれば、ファイル名はそのクラスと同じ名前にしておきます。
class MainFrame extends JFrame { //============================================================================= //コンストラクタ MainFrame() { //JFrameクラスのコンストラクタを呼びます super("serial_canvas0"); } }
ウィンドウ、シリアル通信、その他のコンポーネントを総括管理するMainFrameクラスです。MainFrameという名前は そのまんまですね、Mainメソッドからこのクラスのインスタンスを作成すれば、あとはアプリケーションとして 成り立ちますよ…という感じです。
機能面で考えるならば実質のメイン・メソッドともいえるのが、MainFrameクラスのコンストラクタです。 今回は非常にさびしいですね。。。super()で親クラスであるJFrameクラスのコンストラクタを呼ぶだけです。 なお、今後このMainFrameクラスはどんどん内容が追加されていきます。それでも名前は“MainFrame”のまま なので、毎回コンパイルしないとどのバージョンのMainFrameクラスが使われているのかわからなくなるので 注意が必要です。(MainFrame1、MainFrame2…などと、いちいち名前を変える手もあります)