★★Java質問・相談スレッド142★★

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2011/01/22(土) 13:40:12
} else {
WITH_PLATFORM_STRING(env, path, _ps) {
h = CreateFile(_ps, access, sharing, NULL, disposition,
flagsAndAttributes, NULL);
} END_PLATFORM_STRING(env, _ps);
}
if (h == INVALID_HANDLE_VALUE) {
int error = GetLastError();
if (error == ERROR_TOO_MANY_OPEN_FILES) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "IOException",
"Too many open files");
return -1;
}
throwFileNotFoundException(env, path);
return -1;
}
return (jlong) h;
}
953デフォルトの名無しさん:2011/01/22(土) 17:09:39
>>944
バッファサイズ1024は小さすぎると思う。
【ファイル入力バッファ】
昔バッファサイズを変えてまったく同じファイルを繰り返しコピーする
プログラムを作って、処理時間をグラフにしてみたことがあるんだが、
そのときはバッファサイズが小さいと極端に遅くなり、大きすぎても
それほど効果が無いという結果だった。4096〜8192くらいが理想っ
ぽかった。(ただ再起動してないのでファイルキャッシュが効いている状態のテスト)
【Servlet出力バッファ】
Servletの場合出力先はTCP/IPソケットなので、ファイルI/Oとは
ちょっと違うはず。ちゃんと調べたことは無いが、俺は64KB(65536)
位のデカいバッファを使ってる。
TomcatのHTTPコネクタを使って大きなファイルをダウンロードす
るときの通信をwiresharkでキャプチャしてみた経験では、バッファ
が小さいと無駄に小さいTCPデータパケットが頻繁に出て行く現象
が見えたため。

以上から、(間違ってるかもしれないが)俺のお勧めはこんなかんじ
InputStream in = null;
OutputStream out = null;
try {
  in = new FileInputStream(xxxxx);
  byte[] iobuf = new byte[8192];
  out = response.getOutputStream();
  out = new GZipOutputStream(out, 65536);
  int len;
  while ( (len = in.read(iobuf)) != -1 ) {
    out.write(iobuf, 0, len);
  }
  out.flush();
}finally {・・・ストリームclose();}
954デフォルトの名無しさん:2011/01/22(土) 17:28:18
あんまりAPIの詳細はしらないが適当にカンで答えてみる
Windowsの仮想ページサイズは4096Byteなので読みこみではそのサイズを使い
ネットワーク通信はMSS依存の値
例えば一般的なイーサネット(1500)-IPとTCPのヘッダ(20+20)=1460にして
RWINを65536/MSS*MSSに設定すればいいんじゃなかろうか
GZipOutputStream(out, RWIN)
955デフォルトの名無しさん:2011/01/22(土) 17:52:25
HttpServletRequest#getContextPathの値を
HttpServletRequestを使用せずに取得する方法は無いでしょうか?

何がしたいかというと、HttpServlet#initで別スレッドを立ち上げて
そこでコンテキストパスを取得して使用したいのです

どなたかよろしくお願いします。
956デフォルトの名無しさん:2011/01/22(土) 18:57:34
>>949
うーん、いまいちネイティブコード側とVM側の違いがピンと来てません。

>>950
ありがとうございます。
io_util_md.c にありました。おかげ様で無事見つかりました。
957デフォルトの名無しさん:2011/01/22(土) 19:28:07
>>955
ServletConfigのgetServletContext()。
ひょっとするとJ2EEの古いバージョンには無かったかも。
958デフォルトの名無しさん:2011/01/22(土) 21:06:59
ファイル書込で1回しかwriteしない場合って、Buffered〜でラップする必要なし?
959デフォルトの名無しさん:2011/01/22(土) 21:07:57
以下のコードでなぜかresultの出力はマルチバイト文字だけ文字化けして、
"あいうえお"は正常に出力されます。
ソースコードは全てUTF-8で統一しています。
どのような可能性が考えられますか?
sourceにはShift_JISで半角数字・英字とマルチバイト文字まで含んだものが入ります。

ByteArrayOutputStream source = new ByteArrayOutputStream();
//urlからsourceをセット
String result = "";
try {
result = source.toString("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(result);
System.out.println("あいうえお");
960959:2011/01/22(土) 21:16:19
自己解決しました
result = source.toString("UTF-8");
これsourceの文字コードを指定するんですね
result = source.toString("Shift_JIS");
でうまくいきました
961デフォルトの名無しさん:2011/01/23(日) 00:10:49
★★ Java の宿題ここで答えます Part 69 ★★
(p)http://pc12.2ch.net/test/read.cgi/tech/1267796762/
>>827で課題をお願いしたのですが、やっていただけるか分からないので自分でももう一度挑戦しようと思います
この課題をやるにはどのサイトで勉強するのが効果的でしょうか
962デフォルトの名無しさん:2011/01/23(日) 00:13:59
>>961
学校で使っている教科書
963デフォルトの名無しさん:2011/01/23(日) 00:20:33
>>961
「applet 画像の表示」とかでぐぐればいんじゃね。
まあランダムとか選択肢とかは置いといて、「画像1→正解!→画像2→正解!→画像2→正解!→・・」と表示する画像ビューワを先に作って、
最悪それを提出すれば点は貰えるんじゃないか。
964デフォルトの名無しさん:2011/01/23(日) 04:47:49
hsqldbを使ったアプリケーション作ろうとしたのですが、
hsqldbをServerモードで起動しても、Eclipseから繋げません。
逆にEclipseから繋いでいると、hsqldbを起動できません。
Eclipseがlockしてしまうようなのですが、どうすればいいでしょうか。
別サーバーのpostgresqlには多重に接続できるのですが。
965デフォルトの名無しさん:2011/01/23(日) 04:49:06
すみません、hsqldbはローカルで起動しています。
java -cp hsqldb.jar org.hsqldb.Server -database testで動かしてます。
966デフォルトの名無しさん:2011/01/23(日) 17:48:33
japplet上にjpanelを置き、その上に絵を出力させる方法がわかりません。お願いします
967デフォルトの名無しさん:2011/01/23(日) 17:53:12
いつも思うんだが「わかりません。お願いします」って日本語として問題ありだよな
968デフォルトの名無しさん:2011/01/23(日) 19:13:08
丁寧な雰囲気を出すために、文章の最後にお願いしますを書いとけばいいという風潮。
お願いします。
969デフォルトの名無しさん:2011/01/23(日) 19:49:12
package main;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import java.awt.*;
import java.awt.event.*;
と書き換えることはできますか?
970デフォルトの名無しさん:2011/01/23(日) 19:53:58
無理
971デフォルトの名無しさん:2011/01/23(日) 19:54:47
俺初心者だからよく分かんないけど
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
はどこ行ったの?
972デフォルトの名無しさん:2011/01/23(日) 19:58:52
>>971
出てくる箇所全部限定名で書くんじゃね?
973デフォルトの名無しさん:2011/01/23(日) 20:25:24
いっそもう
import java.*;
974デフォルトの名無しさん:2011/01/23(日) 20:45:05
いっそもう
import *;
975デフォルトの名無しさん:2011/01/23(日) 21:10:19
名前空間なんてなかったんや
976デフォルトの名無しさん:2011/01/23(日) 21:17:23
javaにnamespaceってないだろ
977デフォルトの名無しさん:2011/01/23(日) 21:25:02
用法としてほぼ同じという認識だったんだけど、
差異としてはどんなものがあるの?
978デフォルトの名無しさん:2011/01/23(日) 21:34:20
ほとんど同じかと
あえて挙げればパッケージプライベートという可視制御が存在する
979デフォルトの名無しさん:2011/01/23(日) 21:37:34
>>977
ディレクトリ構造を強要される/されない
980デフォルトの名無しさん:2011/01/23(日) 21:40:31
あえていうなら
package…アクセス制御の単位として機能する
namespace…名前だけ
981デフォルトの名無しさん:2011/01/23(日) 21:46:38
C#だと両方あったりする
namespaceは名前の飾りとしての意味しかなくて
名前空間とは無関係にパッケージスコープ相当のinternalアクセスレベルが別にある
982デフォルトの名無しさん:2011/01/23(日) 22:11:58
そういやそうか。用語は正しく使わなきゃな。スマンカッタ
983デフォルトの名無しさん:2011/01/23(日) 23:49:29
import java.*;じゃ孫階層はダメじゃね
984デフォルトの名無しさん:2011/01/24(月) 00:04:22
C#からJavaに来たのですが、フィールドの扱いについて質問です。
メソッド A内でしか使われないような変数は、フィールドではなく、
メソッド内で定義していいですよね?

今度の案件のソース見てたら、メソッド内のローカル変数でいいようなものでも、フィールドで
String something = null;
のように初期化していたのでJavaではもしやそういう流儀なのかと思ってしまいましたが、
そんな訳ないですよね。
985デフォルトの名無しさん:2011/01/24(月) 00:10:05
>>984
まず意味ないと思うが。
DIが流行って以降勘違いしてる人が増えたせいじゃね。

nullとかでなく初期化がされてる場合は、JUnitでその変数をある指定値で動作させたい時とかにありえる。
986984:2011/01/24(月) 01:45:15
>>985
ああ、間違いなくDIの影響ですね。
今回はDIを使ってないとの事ですので、
書いた人は何でもかんでもフィールドで初期化すればいいと思ってそうです。
ありがとうございます。
987えーきち:2011/01/24(月) 02:38:19
助けてください。
以下のような実行できるのですがエラー?が出てきます。意味がわかりません
exception in thread "awt-eventqueue-0" java.lang.unsupportedoperationexception


java.awt.image.BufferedImage offset_img = new BufferedImage( width, height, java.awt.image.BufferedImage.TYPE_INT_ARGB);
offset_img.setRGB( 0,0, width, height, pixel, 0, width);
graphics = image.getGraphics();
graphics.drawImage(offset_img,0,0,width,height,this);
988デフォルトの名無しさん:2011/01/24(月) 02:45:46
サポートされてないメソッドか何かを使ってるんだろう
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/UnsupportedOperationException.html
989えーきち:2011/01/24(月) 03:21:27
import java.awt.*;
import java.awt.event.*;
import java.awt.Image.*;
import java.awt.image.PixelGrabber;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Font;
990えーきち:2011/01/24(月) 03:25:11
class gframe extends Frame implements ActionListener
{
TextField infilename; //ファイル名を入力するフィールド
Button gazou;
Button hist;
Image image; //オフスクリーンで使うためのimageクラス
Graphics graphics; //オフスクリーンに描画するためのgraphicsクラス
String filename; //テキストフィールドからの文字列の取得
boolean buttonpush1 = false; //ボタンが押されたかどうかの判定
boolean buttonpush2 = false;
BufferedImage readImage = null;
int width,height;
int w=0,b=0,j=0,z=0;
int pixel[];
gframe()
{
setLayout(new FlowLayout(FlowLayout.LEFT)); //レイアウトの設定

infilename = new TextField(20);
add(infilename);
gazou = new Button("画像決定");
add(gazou);
gazou.addActionListener(this);
hist = new Button("ヒストグラム");
add(hist);
hist.addActionListener(this);
}
991えーきち:2011/01/24(月) 03:27:34
public void paint(Graphics g)
{
if(image == null) image = createImage(1200,1000);
if(graphics == null) graphics = image.getGraphics();
g.drawImage(image,20,80,1000,700,this);
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == gazou){
readImage();
System.out.println("@1");
}else if(e.getSource() == hist){
cahanger();
System.out.println("@2");
}
repaint();
}
992デフォルトの名無しさん:2011/01/24(月) 06:04:44
ho
993デフォルトの名無しさん:2011/01/24(月) 06:39:00
なんだこの芋臭いコードは。
スレに臭いがうつるだろ、シッシッ。
994デフォルトの名無しさん:2011/01/24(月) 19:53:03
995デフォルトの名無しさん:2011/01/24(月) 22:25:52
設定の扱いってみなさんどうされてますか?
50〜60個位の設定が必要なんですが。
最初、Digesterを使ってxmlからBeanにマップしてMapに詰めたんですが、
結局keyがStringとかになる訳で、そうするとkeyはハードコーディングせざるを得ないですよね。
理想はkeyがenumみたいに候補が出る形です。
propertiesでは1対1の対応しか出来ないので、2つ3つ関係させたい時は
ダメそうです。
996デフォルトの名無しさん:2011/01/24(月) 22:32:06
設定食わせてコードを自動生成
997デフォルトの名無しさん:2011/01/24(月) 22:56:26
Javaでxmlの解析したかったらxercesというのを使っておけばいいですか?
998デフォルトの名無しさん:2011/01/24(月) 23:54:20
標準のJAXPが不満ならxercesでもなんでも要件にあったものを。
突っ込んだことしなければ十分なはずだけど。
999デフォルトの名無しさん:2011/01/25(火) 00:27:26
誰かこれをjpanelにつっこめるようswingで書いて下さい

void offPaint() {
int i,j;

gOff.setColor(Color.white);
gOff.fillRect(0,0,dim.width,dim.height);

if (dispMode==0) {

gOff.setColor(Color.black);
for(j=0; j<NNy; j += 4) {
for (i=0; i<NNx; i += 4) {
gOff.setColor(Color.getHSBColor( (float)cr[i][j],
(float)(0.3+0.6/(30.0*sg[i][j]+1.0)),(float)(0.5+0.25*Ez[i][j])));
gOff.fillRect(i+50,j+50,4,4);
}
}
}
}
1000デフォルトの名無しさん:2011/01/25(火) 01:06:19
 V V
(´・ω・`) うさちゃんピース
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。