トップページ⇒tech
1001コメント273KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/20(日) 19:30:39.35
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0705デフォルトの名無しさん2013/11/14(木) 02:25:57.18
Java総称型メモ(Hishidama's Java Generics Memo)
http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html
0706デフォルトの名無しさん2013/11/14(木) 02:54:54.39
出来なくなかった!
ありがとうございます
職場で試します
0707デフォルトの名無しさん2013/11/14(木) 03:08:07.63
http://ideone.com/gXkKQz

こうか?
0708デフォルトの名無しさん2013/11/14(木) 03:41:47.94
>>698-700
レスありがとうございました

>>700 さんの方法がうまくいけば簡単そうなので試そうとしたんですが
パッケージ内のクラスに DefaultRedirectStrategy ってクラスがないみたいで
HttpClient に setRedirectStrategy ってメンバーメソッドもないみたいだし
4.3.1 をおとしたんですけどこの記事とバージョンが違ったのかな…

@Override っていう書き方はじめてみたんですけど
匿名クラスを自分で定義する感じなんでしょうか…

>>698,699
Location って HTTP ヘッダよむ方法がようやくわかってなんとかリダイレクト先のURL取得できたので
明日また手動でリダイレクト先を取得しにいこうと思います
いろいろアドバイスありがとうございました
0709デフォルトの名無しさん2013/11/14(木) 07:37:19.12
>>708
あとの細かい試行錯誤はブログでやって
0710デフォルトの名無しさん2013/11/14(木) 08:17:21.87
ジェネリクスで、なんでint型はintegerを指定しなきゃいけないんだよ。
Stringはそのまま使えるのに。
統一しろや。
0711デフォルトの名無しさん2013/11/14(木) 08:22:53.63
>>708
httpclient-4.3.1.jar
httpcore-4.3.jar
が適切にクラスパスに追加されてれば以下のコードが動くはず
http://ideone.com/Ukqu1n
俺の環境で実行に成功したコードをそのままコピーしてきたから、
これがエラーで動かない場合はクラスパスの設定がおかしいってこと
0712デフォルトの名無しさん2013/11/14(木) 08:35:34.79
>>710
プリミティブ型もクラスとして扱う考え方は後付けで色々ほころびがあるのはやむを得ない。
文句を言わず我慢しろ。
0713デフォルトの名無しさん2013/11/14(木) 08:44:24.69
List<int> と書いたら自動的に List<java.lang.Integer> のことだと解釈してくれれば便利なのに
0714デフォルトの名無しさん2013/11/14(木) 08:46:56.68
Stringはプリミティブ型じゃねーだろ
0715デフォルトの名無しさん2013/11/14(木) 09:11:14.85
>>711
LaxRedirectStrategy使うんじゃダメなん?
0716デフォルトの名無しさん2013/11/14(木) 09:13:03.52
いうなればお前の顔が不自由なのは仕方なくそれなりに生きていけ、ということであり。
優性交配した次世代はもっとイケメンだから。
0717デフォルトの名無しさん2013/11/14(木) 09:17:04.20
なんだこの場所的にも生物学用語の用法的にも頓珍漢な誤爆は。
0718デフォルトの名無しさん2013/11/14(木) 09:23:22.58
>>716
日本語でおけ
0719デフォルトの名無しさん2013/11/14(木) 18:04:31.47
ようやくやりたいことができました
昨日からいろいろレスくれたみなさんありがとうございました

とくに HttpClient と Location を教えてくれた >>687,699 さん本当に助かりました!
HTTP や クッキーの実装意識しなくてもソーステキストレベルでウェブトラバースするだけで
クッキーの処理1文字もかかずにすんだんですけど
最初 HTTP とクッキー勉強しないと無理っていわれてすごい困ってました

普段UIや画像処理系のプログラムしかかかないので
ネットワークプログラミングがこんなに大変とは…
手動なら30秒とかでできることをプロgyラムにさせるのに丸一日かかっちゃいました;;
ブラウザってすごいことやってたんですね…

>>711 さんわざわざ動作確認までしていただいたのにすいません
たぶん httpclient だけ落としてて core の方をおとしてなかったせいだと思います
ただ POST した時点でログイン処理は成立してて
リダイレクト無視していきたいページ GET するだけで
普通にログイン状態維持できてたので自分的にはこれでOKでした
0720デフォルトの名無しさん2013/11/14(木) 18:08:28.90
ゆとり乙
0721デフォルトの名無しさん2013/11/14(木) 18:19:04.74
つぎはいつかな?
0722デフォルトの名無しさん2013/11/14(木) 18:29:50.33
期限切れの時にまた来そうだ。
標準のCookieManagerの実装の問題って直ってるのかな。
0723デフォルトの名無しさん2013/11/14(木) 19:22:56.54
>>704
>>705
>>707
ちゃんと出来ました
ありがとうございました
0724デフォルトの名無しさん2013/11/14(木) 19:27:52.98
久しぶりにbsh触ってみたけど、全然変わってないな。
あれ使えたら、ちょっとしたコード試すとき便利なのに。
0725デフォルトの名無しさん2013/11/14(木) 19:39:18.71
>>722
java7では直ってないので俺は1から作りなおしたけどな。
0726デフォルトの名無しさん2013/11/14(木) 20:56:19.92
Cookie日付をパースできるAPIがJava8からまた復活するんだっけ。
DeprecatedなDateコンストラクタでもいいんだけどさ。
0727デフォルトの名無しさん2013/11/14(木) 21:45:24.63
あれれ;; さっそく動かしてみたらしばらくすると
java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.util.Asserts.check(Asserts.java:34)
ってエラーが出始めて1回でるとずっと GET に失敗する…

やってることは
HttpClient client = new DefaultHttpClient();
for(;;) {
if(!login) {
HttpPost post = new HttpPost(ログインページ);
params.add(...) // ID PASS セット
HttpResponse response = client.execute(post);
post.abort();
login = true;
}

HttpGet get = new HttpGet(みたいページ);
HttpResponse response = client.execute(get); // ここでエラー
if(response.getStatusLine().getStatusCode() == 403) {
login = false; continue;
}
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
以下読み込み
get.abort();
}

っていう感じなんですけどループの中の GET execute でエラーがでる;;
なんかもう Java とは関係ないセッションのステートの話だと思うんですけど
もし詳しい人いたら原因わかりませんか?

アサートの中でエラーがでてるのでネットワークの状況というよりローカルでの使い方の問題な気もするんですが…
0728デフォルトの名無しさん2013/11/14(木) 21:52:59.08
例外だけから判断するとちゃんとクローズしてないのが原因じゃね?
0729デフォルトの名無しさん2013/11/14(木) 21:55:45.25
>>728
最後の br.close() はやってるんですけど…
0730デフォルトの名無しさん2013/11/14(木) 22:12:19.70
HttpClient使ったことないから自信ないけど
client.getHttpConnectionManager().closeIdleConnections(1);
とやってコネクション閉じたら直るかも。
というかそもそもclientをPOSTとGETで使いまわしているけど
それぞれ別のHttpClientを使ったらどうよ?
0731デフォルトの名無しさん2013/11/14(木) 22:20:22.11
>>727 >>729
DefaultHttpClientのインスタンスを使いまわす場合は注意が必要
例えばこういうコードはダメ。実行すればそれと同じエラーがでる

【エラーが起きるコード】
HttpClient client = new DefaultHttpClient();
while (true) {
  HttpGet get = new HttpGet("http://example.com";);
  HttpResponse response = client.execute(get);
  Thread.sleep(1000);
}

【問題ないコード1】
HttpClient client = new DefaultHttpClient();
while (true) {
  HttpGet get = new HttpGet("http://example.com";);
  HttpResponse response = client.execute(get);
  EntityUtils.consume(response.getEntity()); // これでDefaultHttpClientは再利用可能になる
  Thread.sleep(1000);
}

【問題ないコード2】
while (true) {
  HttpClient client = new DefaultHttpClient(); // ←client.execute()を実行するたびにDefaultHttpClientを作り直す
  HttpGet get = new HttpGet("http://example.com";);
  HttpResponse response = client.execute(get);
  Thread.sleep(1000);
}
0732デフォルトの名無しさん2013/11/14(木) 22:23:09.65
このレベルでつまづくようならPythonなどスクリプト言語のネットワークライブラリ使った方がいいと思う
使い方も簡単だしインスタンス使いまわしのエラーなど妙なハマりどころがないから
0733デフォルトの名無しさん2013/11/14(木) 22:25:51.21
いきなり他言語に飛躍する脳もどうかしているぞw
0734デフォルトの名無しさん2013/11/14(木) 22:30:36.75
相変わらずアホなスレですな
0735デフォルトの名無しさん2013/11/14(木) 22:31:58.05
>>730,731
おおお ありがとうございます

>>731 とかまさにやっちゃダメなコードになってる気がします
さっそく書き換えてみます
0736デフォルトの名無しさん2013/11/14(木) 22:32:05.22
>>733
話を聞く限り単純なネットワークプログラミングが目的でJavaに拘る理由はないし、
Pythonのコードの方がよほど簡単
http://d.hatena.ne.jp/yatt/20110503/1304403694
0737デフォルトの名無しさん2013/11/14(木) 22:44:04.64
>>736
一応 C java perl PHP ぐらいは使ったことあるんですけど Python はないかも…
GUI扱えるのが C++ と Java だけなんですよね…
今回やりたかったのはピクシブってサイトでおきにりの絵師さんが絵投稿したら
ポップアップだして絵を表示するみたいなことをしたかったのでGUIが使える言語でJava選びました

というかスクリプト言語って変数宣言の自由度が高すぎて
知らないうちに名前空間が被ったりしてデバッグ大変そうで…
0738デフォルトの名無しさん2013/11/14(木) 23:04:59.70
代わりにやってもらうスレ立てたほうがいいんじゃないか。
0739デフォルトの名無しさん2013/11/14(木) 23:11:56.89
PHPでもQtやGtkとかでGUI作れるんじゃないの?
0740デフォルトの名無しさん2013/11/14(木) 23:11:58.58
>>731
レスポンスをクローズするのじゃダメなの?
0741デフォルトの名無しさん2013/11/14(木) 23:16:18.08
PerlならGtkとQtに加えtkも使える!
0742デフォルトの名無しさん2013/11/14(木) 23:16:49.29
PerlやPHPでGUIが出来るならJavaはオワコン
0743デフォルトの名無しさん2013/11/14(木) 23:24:05.13
大学の知人でperl信者がいたけど、
他人に解からない難解なものがカッコいいというのが彼のポリシーだったようで。
再利用性皆無なコードだったな。
0744デフォルトの名無しさん2013/11/14(木) 23:26:10.86
再利用する価値もないコードならどんな汚く書いてもOK
0745デフォルトの名無しさん2013/11/14(木) 23:29:57.91
ある出版社の携帯アプリのjavaコードも他人にわからないようにハゲが工夫をこらして難解にしてたなw
そのハゲにとって他人に簡単に理解されたら辞めさせられておまんま食い上げだからしょうがないが。
0746デフォルトの名無しさん2013/11/14(木) 23:31:19.56
proguardとは違うのか
0747デフォルトの名無しさん2013/11/14(木) 23:33:39.76
うー;; だめだー;;

>>731 のがまさにこれだったのでうまくいくかと思ったのに
EntityUtils.consume(response.getEntity());
を加えても同じエラーでちゃいます…

3つめの HttpClient を毎回生成するのはセッションまで新しくなっちゃうみたいで
エラーはでないんですけどログイン状態が維持されない…

>>730 さんの試してみたんですけど
getHttpConnectionManager がみつからないっていわれるんですよね…
軽く調べたら 3.x 系のサンプルがでてきたんですけど 4 系と違うのかな…
0748デフォルトの名無しさん2013/11/14(木) 23:33:50.18
難読化ツールとかそういうんじゃなくて、無意味にスレッドを増やして同期をとっておらずミリ秒差で処理の流れが変化するような難解コード
0749デフォルトの名無しさん2013/11/14(木) 23:37:07.86
もうJavaは諦めてPHPとcurlとphp-qtで作ればいいじゃない
0750デフォルトの名無しさん2013/11/14(木) 23:52:50.22
初歩的な質問をさせてください。よろしくお願いします。

環境はTomcatで、JSP/Servletで簡単なページを2−3つぐらい作成するのですが、
これで、Webサーバ(Apache)を使う必要(メリット)はあるのでしょうか?

(クライアントからのリクエストは、特に多いといわけでもありません)
0751デフォルトの名無しさん2013/11/14(木) 23:55:21.09
>>750
無い。
0752デフォルトの名無しさん2013/11/14(木) 23:55:41.90
tomcatにapacheの代用をさせることもできるが
画像表示はapacheの方が圧倒的に早い。
0753デフォルトの名無しさん2013/11/15(金) 00:47:44.20
>>750
httpのログは?
0754デフォルトの名無しさん2013/11/15(金) 01:26:35.14
>>727 の件で
ときどき 503 がでてるみたいでその後に GET したときに必ずエラーが出てるみたいです

根本的な解決方法がわからないけど
とりあえず例外はいたら HttpClient のインスタンスを作り直して
ログインからやり直すって感じの応急処置にしてみました

若干解決方法が気持ち悪いけど現状安定してるみたいです…

アドバイスくれた方々ありがとうございました!
0755デフォルトの名無しさん2013/11/15(金) 07:14:27.22
次はいつかな
0756デフォルトの名無しさん2013/11/15(金) 08:54:29.06
>>383
荒らすなゆとり
0757デフォルトの名無しさん2013/11/15(金) 09:58:50.12
>>754
ちょっと>>727を見ていて思ったのだけれども、for(;;)で無限ループを回すのは
良いとして、一回GETリクエストをしたら次のGETをする前にちゃんと数秒間の
スリープは入れているよね?
0758デフォルトの名無しさん2013/11/15(金) 09:59:18.75
あらすな馬鹿とあらしがいう
0759デフォルトの名無しさん2013/11/15(金) 11:49:49.48
GCC開発者「Javaはオワコン。GCJをやめてGoをやろうぜ」
http://engawa.2ch.net/test/read.cgi/poverty/1384481613/
0760デフォルトの名無しさん2013/11/15(金) 11:53:27.41
>>759
すれち
0761デフォルトの名無しさん2013/11/15(金) 18:53:51.84
PNaClがAppletを反面教師として堅牢なプラットフォームに育ちますように…
0762デフォルトの名無しさん2013/11/15(金) 19:09:06.23
ネットで拾ったソース実行しようとしたらjava.until.vectorがないって言われたんですけど
どっかでダウンロードすることはできますか?可変長配列を使えれば別のものでも大丈夫とは思うのですが
0763デフォルトの名無しさん2013/11/15(金) 19:10:04.62
utilとuntilのタイプミスでは
0764デフォルトの名無しさん2013/11/15(金) 19:14:01.01
utilでした。すいません
java.utilはあるのですがそこから予想で挙げられてるクラスがネットに書かれているのよりずっと少ない…
07657642013/11/15(金) 19:34:25.49
すいません、自己解決しました
0766デフォルトの名無しさん2013/11/15(金) 22:26:45.64
>>757
はい! いれてます!
実際に使うときは1時間に1回ぐらいみにいくだけで十分なんですけど
デバッグのために一時的に1分に1回とかにしてました
0767デフォルトの名無しさん2013/11/16(土) 20:51:36.07
ご質問させてください
現在javaの資格について調べているのですが
オラクルjava認定資格アソシエイツ(OCJ-A)とjavaプログラマbronzeはなにか違いがあるのでしょうか
今は駆け出しなので初歩から取得しようと思って調べたのですがいまいちよくわかりません
どなたか返信お願いします
0768デフォルトの名無しさん2013/11/16(土) 21:18:51.69
すきにすれば
0769デフォルトの名無しさん2013/11/17(日) 00:18:24.64
mavenで親子関係のあるプロジェクトを作りたいのですが、親のパッケージングはpomなんですか?
親プロジェクトはmaven専用のプロジェクトになる気がするのですが、気のせいでしょうか
0770デフォルトの名無しさん2013/11/17(日) 07:21:45.14
>>767
アソシエイツって何か知らないけど、java プログラマー bronze
は、日本だけの資格だから取るならsilverをお勧めします。
ちなみに、silverの問題は、「こんなコード誰が書くか!」とか
「問題文が曖昧すぎるんだよ!」みたいな問題ばっかりで
俺の場合、silverの公認教科書を100%解けるレベルで
試験結果は、80%後半だった。
0771デフォルトの名無しさん2013/11/17(日) 10:31:55.87
Sevletでwebアプリ作ってるんですが、
アプリ稼働中はログインしたユーザー情報を個別にMapに突っ込んでおきたいのです。
そこで、認証が済んだユーザ情報をコントローラから

public class LoginUtil{
 private static Map loginUserSubInfo = new Map();
 public static void setLoginUserSubInfo(){};
 public static User getLoginUserSubInfo(){};
}

みたいなpublicクラスのクラス変数にstaticメソッド経由で入れようと
思ってるんですが、これだとloginUserSubInfoはスレッドセーフにはならず
同時アクセスがあった場合は意図しない値がセットされたりするんでしょうか?

そもそもこういう実装にはせず、sessionオブジェクトとかで
ユーザー情報を管理したほうがいいですか?
0772デフォルトの名無しさん2013/11/17(日) 10:51:06.45
>>771
最初のうちはstaticつけようが何しようが
動くものを作る。
その後で、「あっ、これをこうすればstaticいらないや」
とか後から改変したら良し。
0773デフォルトの名無しさん2013/11/17(日) 11:19:02.91
>sessionオブジェクトとかでユーザー情報を管理したほうがいいですか?
YES
0774デフォルトの名無しさん2013/11/17(日) 11:20:33.92
あとsessionだと範囲が狭いならservlet context(applicationスコープ)で管理すべきです。
07757712013/11/17(日) 16:49:07.93
>>772-774
ありがとうございました。
HttpServletクラスのgetServletContextで
applicationスコープ使うことにしました。
0776デフォルトの名無しさん2013/11/17(日) 17:00:07.81
てとりあしとり、みんなしんせつだね
0777デフォルトの名無しさん2013/11/17(日) 19:26:40.38
後継者を育てる楽しみ
0778デフォルトの名無しさん2013/11/17(日) 19:49:06.95
布教しないと終了だからね。
GCCがJava見捨てるとか検討だって。
もちろんc#とかMicrosoft関連は崖っぷち。
ハーメルンの笛吹きに踊らされた連中のデスマーチだけどさ。

未来は意外と最古の言語Lispかも。
0779デフォルトの名無しさん2013/11/17(日) 19:53:56.58
OpenJDKがあるからGCJいらなくね?って話を「Javaが不人気だから見捨てられた」と読み替えるネガキャンはもっとレベルの低いスレでやらないと意味ないよ

> OpenJDKという活発な開発コミュニティが存在していること、
> OpenJDKの活動を引き出すというGCJの当初の目的はすでに果たせたこと、などが理由としてあげられている。
0780デフォルトの名無しさん2013/11/17(日) 19:56:30.49
>>172
0781デフォルトの名無しさん2013/11/17(日) 19:59:03.79
>>759
0782デフォルトの名無しさん2013/11/17(日) 20:23:48.22
>>172と>>759はオワコン
0783デフォルトの名無しさん2013/11/17(日) 20:33:48.13
GoよりもDartのほうが普及しそう

動的型付け言語は使っててストレスが溜まる
やっぱり静的型付け言語のほうがいい
0784デフォルトの名無しさん2013/11/17(日) 20:37:35.99
>>296
0785デフォルトの名無しさん2013/11/17(日) 20:41:23.58
>>296はオワコン
0786デフォルトの名無しさん2013/11/18(月) 00:42:36.52
javaって自由すぎて、難しいよね
フレームワークが沢山あるくせに古かったり・まともに動かなかったりする所が
もう、.リソース分散しないで欲しい
0787デフォルトの名無しさん2013/11/18(月) 00:57:16.91
本来なら規格化された電子部品の様に中身を知らずに何処でも使えるソフトウェアの部品化だったはず。

所が現実はどの部品も信用ならずだし、他の言語に比べ異常に長い名前を知らなきゃ何も出来ない。

大昔にGOTO文の多用で分岐するFORTRANがスパゲッティプログラムと揶揄されたがJavaは店じゅうにスパゲッティをブチまけて隣りテーブルと繋がってる様な惨状だ。
0788デフォルトの名無しさん2013/11/18(月) 10:48:08.48
惨状ってほどでもねぇな。ゴミゴミした街並みを記憶できる程度には整理されている。
0789デフォルトの名無しさん2013/11/18(月) 10:50:08.16
普段生活してない他所の街について汚ねぇ街並みだと言うことはできるが、同時それはおまえがまるで余所者(プログラマに向いてない者)である事を意味している。
0790デフォルトの名無しさん2013/11/18(月) 11:38:16.34
Javaが主に扱ってる領域って
同名やバージョン別で区別とか平気で出てくるぞ

そういう分野何でもかんでもグローバル空間にぶちまける言語使うと
すぐスパゲッティになる
0791デフォルトの名無しさん2013/11/18(月) 12:31:15.04
コンストラクタ呼び出す前って、newをつけるけど、つけないで呼び出す場合はあるんですか?
0792デフォルトの名無しさん2013/11/18(月) 12:39:28.41
認識がおかしい
newが本体でコンストラクタはオマケ
0793デフォルトの名無しさん2013/11/18(月) 12:42:41.79
newだけで勝手に呼び出してくれるんですか?
0794デフォルトの名無しさん2013/11/18(月) 12:50:14.09
>>791
自分自身のコンストラクタ呼ぶときには付けない。
別クラスが呼び出すなら、まずない。
他はリフレクションでのnewInstanceぐらい。
0795デフォルトの名無しさん2013/11/18(月) 17:30:29.48
スーパークラスのコンストラクタって明示的に呼び出さないとダメなんすか
0796デフォルトの名無しさん2013/11/18(月) 17:34:04.72
>>795
引数なしのデフォルトのコンストラクタでよければいらない
0797デフォルトの名無しさん2013/11/19(火) 01:22:23.74
Smatraってどうよ?
0798デフォルトの名無しさん2013/11/19(火) 03:12:54.36
ArrayList list

list.get(0);
list.remove(0);

これを同時に処理はできるような方法はありますか?
0799デフォルトの名無しさん2013/11/19(火) 03:16:15.59
>>798
釣りなの?removeの戻り値って何か知ってる?
0800デフォルトの名無しさん2013/11/19(火) 03:44:23.53
自己解決しました
0801デフォルトの名無しさん2013/11/19(火) 06:23:14.29
自己解決じゃねえw
0802デフォルトの名無しさん2013/11/19(火) 13:11:30.08
俺も知らなかったw
0803デフォルトの名無しさん2013/11/19(火) 13:19:40.26
スタックから削除と同時に要素も取得とか普通の発想だろ…
0804デフォルトの名無しさん2013/11/19(火) 13:31:51.29
>>803
それはJavaでの常識でしょ
■ このスレッドは過去ログ倉庫に格納されています