- - PR -
JNI経由のプリンタ情報検出
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-25 09:33
C言語の関数からJNIを経由してJavaのjava.awt.print.PrinterJobにある
lookupPrintServices() 、getPrintService() を使用すると メソッドがプリンタ情報を検索しにいったまま停止状態に なります(エラー情報も返ってきません)。 <Java側ソース抜粋> PrinterJob printer = PrinterJob.getPrinterJob() ; //下記2行はJNI経由で実行できない PrintService service = printer.getPrintService(); PrintService printername[] = PrinterJob.lookupPrintServices(); <トライしてみたこと> ・JNIを経由せずJavaで直接実行した場合には正常値が返ってきます。 ・JNIを使用した場合とそうでない場合でシステムプロパティを比較して みましたがJVMがServer版,Client版で異なるくらいでした (ちなみにServer,ClientどちらのJVMでもこの現象は発生しています) java.awt.print.PrinterJobにあるその他のメソッド(getJobName() 等)は 正常に実行できるのでjava.awt.print.PrinterJob自体が使用できないわけでは ありません。プリンタの情報はLinuxに登録している情報を検索させにいこう としています。 同じような現象にあわれた方、意見のあるかたがいらっしゃいましたら ご教授よろしくお願いします。 | ||||||||
|
投稿日時: 2004-08-25 12:42
直接的な回答ではありませんが、、、
AWTということなので、フレームバッファの設定は大丈夫ですか? | ||||||||
|
投稿日時: 2004-08-25 13:20
parolibreさん回答ありがとうございます。
フレームバッファの設定は特に意識した作りをしていませんが、 Javaのみの環境(JNIを使用していない場合)には正常に動作しているので 大丈夫ではないかと考えています。 メソッドが停止しているときの状態をnetstatで解析してみると、 ポート番号:515のスプールが通信を行っていないように見えました。 JNI経由でプリンタ関係のメソッドを使用するときには何か特別な設定が 必要なのでしょうか? | ||||||||
|
投稿日時: 2004-08-26 09:52
う〜ん、、、 「どういう環境で動作させている」というのがすっぽり抜け落ちているので把握しきれないのですが、 Java版はどういう環境で動作させているのでしょう? JNI版はどういう環境で動作させているのでしょう?
「コネクションは張っているけれど…」ということでしょうか? | ||||||||
|
投稿日時: 2004-08-26 10:31
返信ありがとうございます。
動作環境は下記になっています。 Java:j2sdk1.4.1_03 OS:RedHat ES2.1 Java版はJavaでmainを作成しlookupPrintServices() 、getPrintService() を 使用させているメソッドを動作させています。 JNI版はCでmainを作成しJNI経由でJavaのメソッドをコールしています。
いえ、lookupPrintServices() を動作してもコネクションすら張られていません。 | ||||||||
|
投稿日時: 2004-08-26 10:47
unibon です。こんにちわ。
C から Java VM を呼んでいるわけですよね。なんのために(そんな面倒な)、という疑問もわずかにあるのですが、もしかしたら、手軽な API がネイティブにはないけど、Java にたまたまあったので使おうとされているのでしょうか。 良くは分かりませんが、プロセスの owner が違うとかそういうアカウント絡みのことはないでしょうか。あるいは、なにかライブラリファイル(so っぽいもの)のロードがうまく行かないのかもしれません。 デバッガ上で動かして、止まっている個所を突き止めるということもできなくはないとは思いますが、大変ですよね。 | ||||||||
|
投稿日時: 2004-08-26 11:25
javaコマンド&javaプログラムは、どこで実行しているのですか? Xなどの上ですか? それとも、Xが動いていないコンソール/ターミナルの上ですか? 後者ならば、Xvfbとかがないと動かないのでは? ただ、使用しているJ2SDKが1.4.xなので、headlessオプション指定は正しく行っていますか?
「呼び出しても、動作していない」という訳ですね。 呼び出して戻ってこないので、Exceptionも捉えられていない…と言う感じなのでしょうか? | ||||||||
|
投稿日時: 2004-08-26 13:09
XでもXが動いていないところでも同様の動きをしています。
システムプロパティにjava.awt.headless=trueを設定しています。 呼び出したきり応答がなくExceptionもとれない状況です。 プロセスはuser指定の時も、rootの時も特に変化がないです。 何を調べたら良いかもつかめていないところが辛いところです・・・。 | ||||||||
