ひでっぷの技術メモ

はてなダイアリーから移行しました

Java

Stringの作り方に注意

ちょっとはまったのでメモ 知ってる人にとっては当たり前かもしれませんが char[] chars = new char[1024]; chars[0] = 't'; chars[1] = 'e'; chars[2] = 's'; chars[3] = 't'; String s1 = new String(chars); String s2 = "test"; System.out.println(s1.e…

Armadillo-460でRXTXCommを使用する

Armadillo-460のSDカードにDebian lennyをのっけて動かしてます。 aptitude search rxtx ってやってみると p librxtx-java - Full Java CommAPI implementation って出てくるので「おお!Armadillo-460でRXTXCommが使えるぞ!」って大喜びしてさっそくapt-ge…

Armadillo-460でJavaを使う

Armadillo-9のCPUメーカー(シーラス社)がCPUから撤退するらしく、供給保証は2013年3月までとのこと。 で、後継機種としてArmadillo-460が発売されていたので購入しテストしてみました。 Armadillo-9の時はCFカードが使えましたが今回はSDカードになってま…

java.lang.InternalError:HTHEME is null

すでに長いこと動いている客先システムで表題のエラーが出ることがあると連絡を受ける。 聞いたことも見たこともないのでぐぐるさんに聞いてみると掲示板にこんなことが書いてあった A way to reproduce: on Windows XP, with XP style, and a java swing ap…

TopLink EssentialsのEntityManagerFactoryで接続先が切り替わらない

O/RマッピングにTopLinkを使用しています。 とある仕事で5箇所ほどのDBを順次接続していってデータ取得をしようとしています。 接続URL、ユーザー、パスワード、JDBCドライバの情報はPersistence#createEntityManagerFactoryの引数にHashMapで渡してます。 …

Ubuntu10.10でUSBシリアルケーブルのデバイス制御がおかしい?

armadillo-9を使ったシリアル通信プログラム(Javaで作成)の仕事で、 導入前の現地テストを行うためにノートPC(Ubuntu10.10)にテスト環境を作っていたところ Ubuntu10.10のUSB-シリアルとの通信での不具合らしきものを発見しました。 Javaプログラムではシ…

Stringクラスのsplitメソッド

ある文字列を指定文字や正規表現で分けたい場合に重宝するのがStringクラスのsplitメソッド。 ただ、ちょっと落とし穴があります。 String string = "hoge\rhoge\rhoge\r\r\r"; String strings = string.split("\r"); stringsの中身は "hoge" "hoge" "hoge" …

Javaでシリアルポートを制御するDebian(lenny)編[2009.11.16追記あり]

Javaでシリアルポートを使用する場合はRXTXComm.jarを使用しますが、Debianの場合、なんとapt-getできてしまう! apt-get install librxtx-java Debian(lenny)ならばこれでRXTXComm.jarは/usr/share/java/の中に、librxtxSerial.soその他もろもろは/usr/lib/…

mysqlでもStatement,PreparedStatement,ResultSetのclose()は必要

mysql5.0の接続テストをするためにmysqlのJDBCコネクタを2.0.14から5.0.8に変更しました。 その後既存のシステムのテストをしていると、なんとOutOfMemoryErrorで落ちてしまうようになった。 どうやら2.0.14の頃はStatement,PreparedStatement,ResultSetのcl…

Runtime.exec()にてprocess.getInputStream().close()だけではだめ?

Javaで外部スレッドを起動する時はProcessの標準入力、標準出力とエラー出力のstreamをclose()してあげないと「Too many open files」というIOExceptionが出てしまう。 また、標準出力やエラー出力が多くてstreamのバッファ容量を超えるとProcessがデッドロ…

phoneMEでスレッドダンプを取得する

LinuxでJavaを動かしている場合、各スレッドのスレッドダンプを取得することができる。 Javaの親スレッドを pstree -p | grep java*1 で探し出して、 kill -3 プロセス番号 とするとJavaの標準出力に各スレッドのスレッドダンプが表示される。phoneMEではデ…

phoneMEのコンパイルオプションとCPU負荷

makeのオプションにCVM_DEBUG=trueをつけると詳細なデバッグ情報を見ることができる。 Exceptionの発生行数とか、もっと細かいところだとエラーが出たCVMのソースの行数までわかる。 GDBと組み合わせるとCVMのデバッグもできるみたいだ。 ただし、CPU負荷が…

phoneMEのバグ?

Armadillo-9+phoneMEを使用して定期的に複数スレッドでpingをうつプログラムをずっと動かしているとOSからsignal 11を受けてプログラムが止まってしまうという現象に悩まされている。 現象発生は不定期。どうもスレッド数が多くて複数スレッドで同時にping…

Runtime.exec()でLinuxのパイプ使用(追記)

以前Runtime.exec()を使用してのLinuxでのパイプ使用について書いたが、どうもRuntime.exec(String command)だとうまくパイプ使用ができないようだ。 試したのはgrepだけど、パイプ以降が無効になってるかのようにgrepせずにすべての結果を出してくる。 悩ん…

Armadillo-9で使用するphoneMEのコンパイル方法

phoneMEのコンパイル方法を書いておこうと思いながらずっとほったらかしていました。 phoneMEのコンパイルで検索してここにたどりついた方もいるようなので残しておきます。 ただし、Armadillo-9で使用するphoneMEのコンパイル方法です。 コンパイルにはATDE…

DebianでJBuilder2006を動かす

以前DebianをインストールしたDynabookにちまちまと開発環境をいれている。 うちのJava開発用IDEはJBuilder2006なのでJBuilder2006をインストールする。 事前にインストールを試した先輩からCDのインストーラーは動かないと教えてもらっていたので以下の方法…

Runtime.exec()でLinuxのパイプやリダイレクト使用

RuntimeクラスのRuntime.getRuntime().exec(String command)にてLinuxのパイプやリダイレクトを使用する場合はシェルスクリプト経由にしないとうまく動かない。 × Runtime.getRuntime().exec("ps -A | grep syslogd"); ○ Runtime.getRuntime().exec("/bin/sh…

Jakarta Commons Net FtpClientのタイムアウト設定

FtpClientの接続タイムアウト設定はsetDefaultTimeout(int timeout)メソッドで行う。timeoutの単位は(ms)。 これをやっておかないとftp接続時にネットが切断されたりした場合ずーっと待ってる気がする。 ちなみに接続後のタイムアウト設定はsetSoTimeout(int…

SableVM1.13のバグ?

どうもSableVM1.13のGCにはバグがあるようです。 public class ThreadTest { public ThreadTest() { super(); } public static void main(String args) { ThreadTest threadtest = new ThreadTest(); threadtest.start(); } public void start(){ int no = 0…

phoneME使用上の注意メモ

Armadillo-9+Javaで開発をしています。 最初はオープンソースのSableVM1.13を使用しようと思っていましたが、致命的なバグがあり使用を断念しました。 (バグについては後日落ち着いてから記事にしたいと思います。) SableVMの代わりに使用するのがphoneME…

FTPクライアントの作成(Jakarta Commons Net編)

前回のFTPクライアントの作成(Socket編)だとユーザー/パスワードが間違っていたりFTPサーバー自体が動いていなかったりした場合のエラー処理が全くしてありません。 FTPサーバーからの受信内容を解析して処理をすればいいんですが面倒くさい。 で、そんなこ…

FTPクライアントの作成(Socket編)

JavaでのFTPクライアントの作成方法。 まずはべたなSocketを使った方法。参考にしたのはFTPの仕組みとJavaでHello World FTP編 private Socket ctrlSocket; private OutputStream ctrlOutput; private InputStream ctrlInput; /** * FTPへuploadする * @para…

Armadillo-9でメール送信の落とし穴

以前、Armadillo-9でメール送信について書きましたが今日試してみて気づいたことが。メール送信をするJavaプログラムを作成、起動して何げにTopコマンドを眺めていると・・・ メモリめっちゃ食ってる!Swapしまくり! どうやらオプションの-Dgnu.classpath.n…

SimpleDateFormatクラスparseメソッドのLocaleに注意

SimpleDateFormatクラスのJavaDocに以下の例が書いてあります。 次の例に、U.S. ロケールで日付/時刻パターンがどのように解釈されるかを示します。指定された日付と時刻は U.S. Pacific Time タイムゾーンのローカルタイム 2001 年 7 月 4 日 12 時 8 分 56…

文キャッシュの使用方法

ある客先で作成したアプリがメモリ・リークするとのことで色々調べていると以下のような情報があった。 Oracle JDBC Drivers README 大きいCHAR列またはVARCHAR列を含む表でPreparedStatementを使用すると、 メモリー・リークが発生します。 この問題は、文…

ojdbc14.jarはJ2SE1.4のためのもの

J2SE5.0はサポート外だそうで・・・。 J2SE5.0の場合はojdbc5.jar J2SE6.0の場合はojdbc6.jar を使用するようにとのことでした。 1.4で使えるんだから5.0でも当然・・・と思ってました。 実際ほとんど問題なく使えてるんですが、致命的なバグがあるみたいで…

Armadillo-9でメール送信

PCと一緒でJavaMailを使用するだけ。 mail.jarとactivation.jarを/usr/lib/sablevm/jre/lib/extにコピー。 ただし"iso-2022-jp"のエンコードを使用するためにjavaのオプションで java -Dgnu.classpath.nio.charset.provider.iconv -jar hogehoge.jar が必要。…

SableVMで日本語エンコーディング(Shift-JIS,Windows-31J,EUC-JP)を使用する

Armadillo-9へあるJavaアプリケーションの移植をしています。 このアプリケーションの機能としてcsvファイルの読込があるのですが、Armadillo-9上で読込をすると Charset MS932 not found と表示されてうまく読み込めない。 どうやら日本語のエンコーディン…

Armadillo-9のシリアルポートをJavaで制御

やっとArmadillo-9のシリアルポートをJavaで制御できるようになりました。最初はSunもしくはRXTXのcommunication APIを使用しようと思っていました。 当然のことながら(?)どちらもARM用はなかったのですがRXTXにソースコードがあり、gccでコンパイルすれ…

Armadillo-9でvncとSwingアプリその2

今回はArmadillo-9でvncServerを立ち上げ、開発PC(TurboLinux)のKDEについているリモートデスクトップ接続でリモート接続しました。 そんでもって前回作ったSwingアプリを起動。 こんな感じ。 まあ問題なし。 次はpanelのlayoutをflowlayoutからgridbaglayou…