竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
Jamesがうまく動かない・・?
by rapuntuleru[rapuntuleru]
「Java+MySQL+Tomcatで作る掲示板とブログ」で勉強している者ですが、p148のjavaのファイル(SimpleEmail.java)のコンパイルで以下のようなエラーが出てしまい先に進めません。

*********

C:\jamyto2\classes\bbs\Q>javac -d /jamyto2/jsp/web-inf/classes -classpath /jamyt
o2/jsp/web-inf/classes;"C:/Program Files/Apache Software Foundation/Tomcat 5.5/c
ommon/lib/mail.jar" SimpleEmail.java
SimpleEmail.java:43: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0xff5e: sbReturn.append(Character.toChars(0
x301c));break;//〜
                                                                      ^
SimpleEmail.java:44: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0x2225: sbReturn.append(Character.toChars(0
x2016));break;//‖
                                                                      ^
SimpleEmail.java:45: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0xff0d: sbReturn.append(Character.toChars(0
x2212));break;//−
                                                                      ^
SimpleEmail.java:46: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0xffe0: sbReturn.append(Character.toChars(0
x00a2));break;//¢
                                                                      ^
SimpleEmail.java:47: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0xffe1: sbReturn.append(Character.toChars(0
x00a3));break;//£
                                                                      ^
SimpleEmail.java:48: シンボルを解決できません。
シンボル: メソッド toChars (int)
場所    : java.lang.Character の クラス
                                case 0xffe2: sbReturn.append(Character.toChars(0
x00ac));break;//¬
                                                                      ^
エラー 6 個

***************
よく分からないのですが、おそらくJamesがうまく動いていない(?)のかなと思っています。
というのも、p22のJamesからメールが送信できるかどうかの
テストで以下のようになってしまいメールが送信できないからです。

***************
helo localhost
250 (・・)PC Hello localhost (0:0:0:0:0:0:0:1 [0:0:0:0:0:0:0:1])
helo localhost
250 (・・)PC Hello localhost (0:0:0:0:0:0:0:1 [0:0:0:0:0:0:0:1])
mail from:<test@example.com>
250 Sender <test@example.com> OK
rcpt to:<(・・)@gmail.com>
550 - Requested action not taken: relaying denied

***************

もし、解決の方法に検討がつきましたらよろしくお願いします。
投稿:rapuntuleru[rapuntuleru]/2007年 04月 02日 03時 34分 /更新:2007年 04月 02日 03時 34分
Re:Jamesがうまく動かない・・?
by KILROY[KILROY]
 たぶん Java の開発環境( JDE )のバージョンが 1.4 だからです。
 Character.toChars()のサポートは 5.0 ( 1.5 )からなので、1.4 でコンパイルすると(クラスライブラリに存在しないので)エラーになります。 javac を使っているのなら、バージョンを確認しましょう。
 バージョン 5.x 以降の Tomcat を動作させるためには JRE 5.0 が入っていなければいけないはずですが、前から JDE 1.4 がインストールされている場合、それがそのまま使われてしまう場合があります。 Windows をお使いでしたら、コントロールパネルから「システム>詳細>環境変数」を選んで、ちゃんと JRE 5.0 が使われるようになっているか確かめてください。
 なお、 JRE のバージョンを上げたら、ついでに sbReturn も StringBuffer クラスではなく StringBuilder に変えてしまいましょう。スレッドセーフではない代わりに(一時使用のバッファとして使う場合、メソッドの外から参照されることがないので、スレッドセーフである必要はありません)、ちょっとだけ速くなるはずです。

投稿:KILROY[KILROY]/2007年 04月 02日 10時 27分 /更新:2007年 04月 02日 15時 59分
Re^2:Jamesがうまく動かない・・?
by KILROY[KILROY]
 ちなみにこれが「私ならこう書く」バージョン。
 もっともこれを印刷しちゃったら、長すぎて読者が怒るだろうが。(^_^!)
    /**
    * Windows-31J から iso-2022-jp への変換
    * 丸数字やローマ数字(いわゆる時計数字)など、
    * 機種依存文字の変換も行なっている。
    * @param str
    * @return
    */
    public static String beforeEmail(String str) {    //
        StringBuilder buf = new StringBuilder("");
        for (int pos = 0; pos < str.length(); pos += 1) {
            char ch = str.charAt(pos);
            switch (ch) {
            case 0x2015:  // '―':全角ダッシュ(コードポイントが並んで二つあるというのも妙な話だが)
                buf.append(java.lang.Character.toChars(0x2014));
                break;
            case 0x2116:
                buf.append("No.");
                break;    //
            case 0x2121:
                buf.append("TEL");
                break;    //
            case 0x2160:
                buf.append("I");
                break;    //T
            case 0x2161:
                buf.append("II");
                break;    //U
            case 0x2162:
                buf.append("III");
                break;    //V
            case 0x2163:
                buf.append("IV");
                break;    //W
            case 0x2164:
                buf.append("V");
                break;    //X
            case 0x2165:    //Y
                buf.append("VI");
                break;
            case 0x2166://Z
                buf.append("VII");
                break;
            case 0x2167:    //[
                buf.append("VIII");
                break;
            case 0x2168:    //\
                buf.append("IX");
                break;
            case 0x2169:    //]
                buf.append("X");
                break;
            case 0x2170:    //@
                buf.append("i");
                break;
            case 0x2171:    //A
                buf.append("ii");
                break;
            case 0x2172:    //B
                buf.append("iii");
                break;
            case 0x2173:    //C
                buf.append("iv");
                break;
            case 0x2174:    //D
                buf.append("v");
                break;
            case 0x2175:    //E
                buf.append("vi");
                break;
            case 0x2176:    //F
                buf.append("vii");
                break;
            case 0x2177:    //G
                buf.append("viii");
                break;
            case 0x2178:    //H
                buf.append("ix");
                break;
            case 0x2179:    //I
                buf.append("x");
                break;
            case 0x2211:  //
                buf.append("Σ");
                break;
            case 0x221f:  //
                buf.append("L");
                break;   
            case 0x2225:  // '‖':双柱
                buf.append(java.lang.Character.toChars(0x2016));
                break;
            case 0x2460:    //@
                buf.append("(1)");
                break;
            case 0x2461:    //A
                buf.append("(2)");
                break;
            case 0x2462:    //B
                buf.append("(3)");
                break;
            case 0x2463:    //C
                buf.append("(4)");
                break;
            case 0x2464:    //D
                buf.append("(5)");
                break;
            case 0x2465:    //E
                buf.append("(6)");
                break;
            case 0x2466:    //F
                buf.append("(7)");
                break;
            case 0x2467:    //G
                buf.append("(8)");
                break;
            case 0x2468:    //H
                buf.append("(9)");
                break;
            case 0x2469:    //I
                buf.append("(10)");
                break;
            case 0x246a:    //J
                buf.append("(11)");
                break;
            case 0x246b:    //K
                buf.append("(12)");
                break;
            case 0x246c://L
                buf.append("(13)");
                break;
            case 0x246d://M
                buf.append("(14)");
                break;
            case 0x246e://N
                buf.append("(15)");
                break;
            case 0x246f://O
                buf.append("(16)");
                break;
            case 0x2470://P
                buf.append("(17)");
                break;
            case 0x2471://Q
                buf.append("(18)");
                break;
            case 0x2472://R
                buf.append("(19)");
                break;
            case 0x2473://S
                buf.append("(20)");
                break;
            case 0x2d79:  //
                buf.append("Δ");
                break;
            case 0x301d:    //
                buf.append("“");
                break;
            case 0x301f:    //
                buf.append("”");
                break;
            case 0x3231:  // '':株式会社
                buf.append("(株)");
                break;
            case 0x3232:    //
                buf.append("(有)");
                break;
            case 0x3239:    //
                buf.append("(代)");
                break;
            case 0x32a4:    //
                buf.append("(上)");
                break;
            case 0x32a5:    //
                buf.append("(中)");
                break;
            case 0x32a6:    //
                buf.append("(下)");
                break;
            case 0x32a7:    //
                buf.append("(左)");
                break;
            case 0x32a8:    //
                buf.append("(右)");
                break;
            case 0x3303:    //e
                buf.append("アール");
                break;
            case 0x330d:    //i
                buf.append("カロリー");
                break;
            case 0x3314:    //`
                buf.append("キロ");
                break;
            case 0x3318:    //c
                buf.append("グラム");
                break;
            case 0x3322:    //a
                buf.append("センチ");
                break;
            case 0x3323:    //k
                buf.append("セント");
                break;
            case 0x3326:    //j
                buf.append("ドル");
                break;
            case 0x3327:  //d
                buf.append("トン");
                break;
            case 0x332b:    //l
                buf.append("パーセント");
                break;
            case 0x3336:    //f
                buf.append("ヘクタール");
                break;
            case 0x333b:    //n
                buf.append("ページ");
                break;
            case 0x3349:    //_
                buf.append("ミリ");
                break;
            case 0x334d:    //b
                buf.append("メートル");
                break;
            case 0x3351:    //g
                buf.append("リットル");
                break;
            case 0x3357:    //h
                buf.append("ワット");
                break;
            case 0x334a:    //m
                buf.append("ミリバール");
                break;
            case 0x337b:    //~
                buf.append("平成");
                break;
            case 0x337c:    //
                buf.append("昭和");
                break;
            case 0x337d:    //
                buf.append("大正");
                break;
            case 0x337e:    //
                buf.append("明治");
                break;
            case 0x338e:    //r
                buf.append("mg");
                break;
            case 0x338f:    //s
                buf.append("kg");
                break;
            case 0x339c:    //o
                buf.append("mm");
                break;
            case 0x339d:    //p
                buf.append("cm");
                break;
            case 0x339e:    //q
                buf.append("km");
                break;
            case 0x33a1:    //u
                buf.append("m2");
                break;
            case 0x33c4:    //t
                buf.append("cc");
                break;
            case 0x33cd:    //
                buf.append("K.K.");
                break;
            case 0xff0d:  // '−':全角マイナス
                buf.append(java.lang.Character.toChars(0x2212));
                break;
            case 0xff5e:  // '〜':全角チルダ
                buf.append(java.lang.Character.toChars(0x301c));
                break;
            case 0xffe0:  // '¢':全角通貨記号セント
                buf.append(java.lang.Character.toChars(0x00a2));
                break;
            case 0xffe1:  // '£':全角ポンドサイン
                buf.append(java.lang.Character.toChars(0x00a3));
                break;
            case 0xffe2:  // '¬':全角否定
                buf.append(java.lang.Character.toChars(0x00ac));
                break;
            default:
                buf.append(ch);
            }
        }
        return buf.toString();
    }
投稿:KILROY[KILROY]/2007年 04月 02日 20時 11分 /更新:2007年 04月 02日 20時 11分
RE:Jamesがうまく動かない・・?
by rapuntuleru[rapuntuleru]
回答ありがとうございます。とても助かりました。m(_ _)m
投稿:rapuntuleru[rapuntuleru]/2007年 04月 02日 20時 48分 /更新:2007年 04月 02日 20時 48分
Re^3:Jamesがうまく動かない・・?
by KILROY[KILROY]
> とても助かりました。m(_ _)m
 こういうときは「とても助かった」件について自分の「恥ずかしい体験」(大抵つまらないところで引っかかるのだ)について詳細に語ると、
ありがちな、陥りやすい失敗について後進が学ぶことができる。
自己開示によって好感度が挙がる。
結果、このサイトに常連がついてサイトが賑わう。
とかいった各種メリットがあるので、ぜひ語っていただきたい。
 漏れも他人事のように書いているが、大方は散々恥ずかしい体験をした結果得たものである。実際その気になれば何時間でも語っちゃえるのだが、素面(しらふ)で語るのは憚られるので、できれば酒でも呑みながら開帳に及びたいところではある。
 竹形さん>そのうち一杯やりましょう。自然言語処理ネタで盛り上がれれば幸いです。

投稿:KILROY[KILROY]/2007年 04月 02日 23時 01分 /更新:2007年 04月 02日 23時 02分
RE:Jamesがうまく動かない・・?
by 竹形 誠司[takegata]
どうも、いろいろありがとうございます & 放置したままで済みません。

竹形さん>そのうち一杯やりましょう。自然言語処理ネタで盛り上がれれば幸いです。

是非に!
KILROYさんのお住まいはどちらですか?
私は先月から沖縄住まいですが、4/8まで千葉の実家にいます。
よろしかったらtakegata@veltec.co.jpまでメールでご連絡ください。
投稿:竹形 誠司[takegata]/2007年 04月 03日 11時 03分 /更新:2007年 04月 03日 11時 03分