環境変数pathあるいはclasspathの問題

症状: コマンドプロンプトにてjavacが動かない。

原因:javacのある場所にpathが通っていない。

対処:自分のパソコンのjavacのあるところを探し、環境変数に登録する。

最新のjavaの場合

C:\Program Files\Java\jdk1.5.0_06\bin

を登録する。

classpathの場合は

C:\Program Files\Java\jdk1.5.0_06\lib\tools.jar

にするが、classpathの文字列の中に空白が入っていると不味いらしい。従ってダブルコーテーションでくくります。

set classpath="C:\Program Files\Java\jdk1.5.0_05\lib\tools.jar"

\はブラックボードの都合(UTF, unicode)で逆スラッシュに見えますが、windows上では半角の¥です。

文字化けする

コンパイル時に不可解なエラーが1行目から出る。ソースを見ても心当たりが無い場合はこれの可能性が高いでしょう。

原因:ブラックボードがunicodeを用いているためコピーなどをするとコード変換がされないか、正しく行なわれない。

予防法:秀丸でエンコード表示にする。

その他→動作環境→上級者向け設定にチェックを入れる

左側にある設定の対象のウィンドウをあけて→高度なウィンドウ

タイトルバーの表示のところのエンコードの種類を常に表示にする→OK

最新の秀丸は以下からダウンロードできます。

http://hide.maruo.co.jp/

対処法:秀丸で名前を付けて保存を選びエンコードの種類のところを「日本語(Shift-JIS)」にして保存する。

-----------------------------------------------------------------------------------------------------

C:\TINISDK\src\temp>・ソ@echo off
'・ソ@echo' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

はbuild.batがunicodeになっているためですから、Shift-JISで保存しなおしてください。

iTunesあるいはQuickTimeの問題

iTunesあるいはQuickTimeのインストーラ(アップデータも同じらしい)が勝手に環境変数classpathを書き換えてしまっているようです。(常識的には付け加える)

正常な値をコンパイルのバッチファイルに書き込むか、コマンドプロンプト用に作ったauto.batを書き換えてください。

別法:jdkを再インストールすると多分正しい環境変数がセットされると思うが、これは素人の方法。

iTunesが入っていて正しくコンパイルされている人はiTunesをインストールしてからJavaをインストールしたためと思われます。

温度センサーのコンパイル

java.lang.RuntimeException: Could not finish loading: java.lang.ClassNotFoundException: Could not find the class com/dalsemi/onewire/container/OneWireContainer28

Could not finish loading:いくつかのファイルを集めて一つのtini型のファイルを作るときに集めきれなかった。

というエラーは一番最後のOneWireContainer28に着目する。

ドキュメントを見てこれは何かと調べる。

これは温度センサーのクラスであることが分かる。

-add OneWireContainer28を付け加える。

ネットワークに接続できない

ファイアーウォールの設定あるいはウィルス対策ソフトでガチガチにしている場合。

または、ウィルス、スパイウェアに感染している場合などにネットワークに接続できなかったりしますので、これをチェックしてください。

現在のところ、IPv6でtelnet, ftpはできるが、server/clientのプログラムが動作しないという訳の分からないエラーが存在しています。これの対処方法は分かりませんので、パソコン自体を初期化するか、事務室から借りてきて毎回インストールするという方法しかありません。

TINIの日付時間がおかしい

温度センサーのプログラムで、表示される日付時間がおかしいのはTINI内部の時計が狂っているからです。

設定するには

4月29日14時41分の場合は次のように指定します。JSTは+9でもOKです。

date 04292006144100 JST

ipv6 install ができない

C:\TINISDK\src>ipv6 install
Installing...
Failed to complete the action.
Error 0x800704b8

というエラーが出て何もできない。

これは、windowsのOSの中のデータベースに関する部分が何らかの理由で破壊された時に出るようです。

これに対処するには、修復するかwindows自体の再インストールが必要になります。

修復する方法:

これは危険なコマンドなので、下手をするとwindowsが起動しなくなる場合もありますので、必要なデータなどはバックアップしておきましょう。

esentutl /p C:\WINDOWS\security\Database\secedit.sdb

これを実行すると以下のようになります。これは成功例です。

Microsoft(R) Windows(TM) Database Utilities
Version 5.1
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating REPAIR mode...
Database: C:\WINDOWS\security\Database\secedit.sdb
Temp. Database: TEMPREPAIR3412.EDB

Checking database integrity.

The database is not up-to-date. This operation may find that
this database is corrupt because data from the log files has
yet to be placed in the database.

To ensure the database is up-to-date please use the 'Recovery' operation.


Scanning Status (% complete)

0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|----|
...................................................


Integrity check successful.

Note:
It is recommended that you immediately perform a full backup
of this database. If you restore a backup made before the
repair, the database will be rolled back to the state
it was in at the time of that backup.

Operation completed successfully in 12.428 seconds.

お約束

  1. ひとつのプログラムは基本的に一つのフォルダで管理する。関連するプログラムだから同じフォルダに入れることはしないこと。(現実的には可能だが、そのようにするbuild.batを正しく書く自信のある方のみ)
  2. ひとつのプログラムに複数のクラス、従って複数のファイルがある場合はmainメソッドが複数あってはいけない。実行に必要なひとつのみである。

コマンドラインの約束事

build.batはバッチファイルで、いちいち手で入力していたら間違えてしまうほど多量のコマンドが必要になったときに用います。従ってバッチファイルはwindowsの(正確に言ったらMS-DOSの)シェルであるコマンドプロンプトへのコマンドの羅列です。つまり、バッチファイルの中味はコマンドラインで書くのと同じ規則で書かなければいけません、

windowsのコマンドには一貫性が無いのが問題ですが、大体はあります。

しかし、ここでの引数の約束はwindowsではなくて、javacあるいはjavaのコマンドの約束となります。

以下のコマンドはjavacあるいはjavaの意味で、-設定名1は例えば-classpathです。

コマンド -設定名1 設定データ1 -設定名2 設定データ2;設定データ3;設定データ4 -設定名3

のようになります。

つまり設定データ5を後ろに付け加えたければ、セミコロンで区切りそのデータを後ろに付けます。

コマンド -設定名1 設定データ1 -設定名2 設定データ2;設定データ3;設定データ4;設定データ5 -設定名3

NoClassDefFoundError

これはjavaのプログラムを実行しようとしたが、そんなプログラムは見つからなかったという意味です。

従って、classpathが正しく設定されていない場合に起こります。

java prog

とコマンドを実行するというのはclasspathの中にprog.classが無ければいけません。ほとんどの場合、

javac prog.javaを行い、その後java progと実行する訳であるが、忘れがちなのはカレントディレクトリをclasspathに入れていないことです。

auto.batの中で

set classpath=なにがし

の「なにがし」の中にカレントディレクトリ、つまり「.」ドット一つが入っていない場合です。

多くの場合この設定が抜けているためにこのエラーが出ます。

つまり、

set classpath=.;なにがし

となります。

普通の場合は上記の原因ですが、これを出したのはwindows側での実行のはずです。

そして、tini用のコンパイル用のbuild.batを用いてコンパイルしたとすれば、

動かなくて当然です。

ですから、windows用に普通にコンパイルすれば動作します。

一時的に出来るようにするには-cpオプションで動作させることが出来ることもあります。

java -cp . クラス名

Insufficient heap

Could not execute file: Insufficient heap

とエラーが出る。

原因: メモリーが足りなくなった。
対処法: 使わないファイルを消して、gcコマンドを投入してみる。

ServerSocket

(a)java.io.IOException: Unable to listen on ServerSocket
とエラーが出る。

原因: サーバーを二重起動させた。

または、
(b)java.io.IOException: Unable to connect to remote host
とエラーが出る。

原因: サーバーを起動せずにクライアントから接続しようとした。