トップページ⇒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/
0581デフォルトの名無しさん2013/11/11(月) 21:15:06.96
>>579
ファイルを読んでいる途中でファイルの先頭方向に戻るとかいう操作が必要で無い
場合はRandomAccessFile使う必要無いよ。こっちを使うのがむしろ特殊ケース。
大抵はInputStreamでskipを使って指定バイト数を読み飛ばすので用に足りると思う。

あとキャラクターエンコーディングとかを意識してバイト数ではなく文字数単位で
読み込んだり読み飛ばしたりする場合はReaderを使わないとダメ。
0582デフォルトの名無しさん2013/11/11(月) 21:16:25.96
PushbackReader (Java Platform SE 7 )
http://docs.oracle.com/javase/jp/7/api/java/io/PushbackReader.html
0583デフォルトの名無しさん2013/11/11(月) 21:18:23.92
Sun Developer Connection - 2001
http://otn.oracle.co.jp/technology/global/jp/sdn/java/private/techtips/2001/tt0518.html
0584デフォルトの名無しさん2013/11/11(月) 21:25:25.06
うんこすれ乙
0585デフォルトの名無しさん2013/11/11(月) 21:28:26.87
てきとうメモ ≫ Blog Archive ≫ PushbackReaderで迂闊にunreadすると危ない
http://muranoya.net/wordpress/?p=17
0586デフォルトの名無しさん2013/11/11(月) 21:45:24.23
>>580
ロガーを使うのが王道じゃないかな。
0587デフォルトの名無しさん2013/11/11(月) 21:50:30.85
複数のプロジェクトによってシステムが構成されている場合、jarファイルの参照設定はどのようにしてますか?
全てのプロジェクトに対して、ビルドパスを通すことは賢いやり方とは思えないのですが
0588デフォルトの名無しさん2013/11/11(月) 21:59:27.14
悪評高きMavenは例えばそのためにある。
そのような疑問を抱いた時こそMavenやGradleといった依存性管理ツールを学ぶ好機。
05895872013/11/11(月) 22:10:17.54
>> 588
あぁ、そうなっちゃうんですね
mavenすごく面倒なので、使わないようにて思ってたんですが
ありがとうございます
0590デフォルトの名無しさん2013/11/11(月) 22:39:17.36
Mavenが面倒?

すごく楽じゃん。規約に沿ってきれいにまとまる範囲までは。

今となって特殊な事情でも無い限りこの手の依存性管理を「使わないようにする」理由が薄い。
ライブラリやフレームワーク等も依存性管理ツールの利用を前提としてプロダクトを細かく
モジュールに分割して配布する(そしてfat jarが敬遠される)ようになったから、過去のjarを
手作業でコピって上書きしたら以降運任せではとうてい持続しない。

もう新規プロジェクトは規模にかかわらず依存性管理ツールの使用がデフォで良いと思う。
規模にかかわらず便利だし、特殊なことをしない小さなプロジェクトほど楽が出来る。

入門に際してもjavacでHello Worldが済んだら以降はMavenなりGradleといった今時のビルド
ツール強制で良いと思うけれどもね。
0591デフォルトの名無しさん2013/11/11(月) 22:46:24.54
java.util.logginのようにjavaseに組み込まれるならあって当然として利用してライブラリの設計もするけど、そうでないなら一過性の流行りものでしかない。
0592デフォルトの名無しさん2013/11/11(月) 23:08:15.48
>>575
Reader#skip(2)でエラー出なかったからといって、
ほんとに2文字スキップしたのかは戻り値確認するまで解らんぞ
0593デフォルトの名無しさん2013/11/11(月) 23:12:34.54
サンプルだから省略したんだろ馬鹿は黙ってろ
0594デフォルトの名無しさん2013/11/11(月) 23:15:30.33
うんこすれ乙
0595デフォルトの名無しさん2013/11/11(月) 23:17:12.15
>>580
PrintWriterでないと無理。コンストラクタにWriter渡して作ればいい。
0596デフォルトの名無しさん2013/11/11(月) 23:21:43.55
ネット系InputStream.skip()の気まぐれには泣かされた
0597デフォルトの名無しさん2013/11/12(火) 04:35:04.24
依存性管理が一過性の流行ということは無いと思うけれどもなぁ。
mavenでさえ2以降でもすでに8年たっているし。

Jarを手作業で落としてコピれば動くので今時の依存性管理付きビルドツールは不要です
pomの類いも書きませんというのは、手作業で動作チェックすれば動くのでテストケースは
書きませんというようなもの。
0598デフォルトの名無しさん2013/11/12(火) 09:21:08.14
8年経つならやっと取り扱ってもらえるんじゃないか。
場合によってはジャバ9のモジュラリティーとかそのあたりで入ってくるかもしれない。
0599デフォルトの名無しさん2013/11/12(火) 10:42:28.48
「クラスローダは自作するもの」と周知させれば
「derby.jarはバラさなければならない」 とか馬鹿なレスも減るべ。

JREに無料で付いてくるクラスローダ実装引き合いに出して
「これがJavaだ!」みたいなことドヤ顔で言う人ってなんなの…


しかし 「このアプリの起動にはMavenが必要です」 な未来はイヤ。
Mavenスレ落ちて何年経つんだよ
0600デフォルトの名無しさん2013/11/12(火) 10:44:14.62
C#やるとJavaが面倒くさい
0601デフォルトの名無しさん2013/11/12(火) 11:05:15.85
jarはそのままでも展開しても差異はないし問題もない。
0602デフォルトの名無しさん2013/11/12(火) 11:06:31.09
>>600
そりゃそーだろ
C#は、javaのいいとこ取りして
さらにこういう機能があったら良いのに
っていうものを追加したもんだもん
ちなみに俺はC#→java(android)って感じで勉強してきたけどね
0603デフォルトの名無しさん2013/11/12(火) 11:16:57.36
c#勉強してもwindowsとかmicrosoft製品でしか動かないでしょ。
ubuntuでmonoを使う選択肢というのはmicrosoftの性質を鑑みてストールマンや他多数の著名人が禁止してるし。
microsoftもので動かしたいときがあればjs,ruby,phpとかのスクリプトだけ勉強しとけばいいのかもと思う。
0604デフォルトの名無しさん2013/11/12(火) 11:23:22.25
>>172
0605デフォルトの名無しさん2013/11/12(火) 11:26:52.05
GithubはC#に移行
0606デフォルトの名無しさん2013/11/12(火) 11:45:34.51
自分がよく使いそうな独自クラスを管理するにはパッケージを使うのですか?

いつもよく分からないからコピペで済ませてるんですが、eclipseでこういう風に管理してるってのがあれば教えてください。
0607デフォルトの名無しさん2013/11/12(火) 11:59:04.52
>>606
独自クラスうんぬんじゃなくて
パッケージってのは名前の衝突を避けるため
分離化するのが目的
0608デフォルトの名無しさん2013/11/12(火) 12:51:12.66
>>607
自分がよく使う汎用クラスの管理はどうなさってます??
0609デフォルトの名無しさん2013/11/12(火) 13:02:24.47
サブドメインくれる無料ブログ作って、パッケージ名に使えばいいんじゃないの。

旧SunMicroは、メアド文字列使って一意なjavaパッケージ名を求める手順を
提案すべきだったと思うんだが
0610デフォルトの名無しさん2013/11/12(火) 14:14:09.34
>>606
ライブラリ化。
0611デフォルトの名無しさん2013/11/12(火) 15:01:24.51
>>610
で、その外部jarライブラリを作るにあたって、結局パッケージ名も関わってはくると思う。

デフォルトパッケージ?
0612デフォルトの名無しさん2013/11/12(火) 15:24:22.72
>>599
>「クラスローダは自作するもの」と周知させれば

なしてわざわざ自作するの? どうしてあるものを使わないの?


>しかし 「このアプリの起動にはMavenが必要です」 な未来はイヤ。

頓珍漢な心配はまず実際にmaven使ってみてからにしてくれない?
All-in-oneなexecutable jarにせよ必要なjarがlibディレクトリ等に入ったtar.gz等に
せよ、配布用のパッケージをどうmavenで作成するかなんて世の中具体例に溢れている。
0613デフォルトの名無しさん2013/11/12(火) 15:39:20.12
>>599
>「derby.jarはバラさなければならない」 とか馬鹿なレスも減るべ。

そういうレスがいつあったのか、それとも単なる思い込みかよく分からんが、
「そのほうが楽なら」バラすしそれ全く手間じゃないし。
それこそpomにプラグイン指定すれば手作業ゼロで自動化できる話。

実行用のパッケージ作るのにオレオレなクラスローダー使ったりどこかの
Jar-in-Jarソリューション使うより、単にバラして動くならそっちの方が
シンプルだし確実。
0614デフォルトの名無しさん2013/11/12(火) 15:50:32.58
可愛い子ちゃんなんだからあまりいじめるなよ
0615デフォルトの名無しさん2013/11/12(火) 17:00:43.73
>>611
デフォルトパッケージは使っちゃダメ。

ちゃんと自分用のパッケージ名を適当に決めて、機能別にさらにパッケージに
分けて管理した方が良い。
自分でライブラリを作り始めるのであれば、まず既成のライブラリがどのように
パッケージを分けて管理しているのか観察してマネをしてみるところから始める
と良いと思うよ。
0616デフォルトの名無しさん2013/11/12(火) 17:46:22.74
>>611
それを言ったら、パッケージなしで書くのはhello worldまでになる。つまりパッケージ名は常に考えているので、ライブラリだからどうこうと言うことはない。
0617デフォルトの名無しさん2013/11/12(火) 18:05:59.87
すまん。ランチャーがわりにmaven使ってるのオレだわー。
これはこれでなかなか便利でな…
0618デフォルトの名無しさん2013/11/12(火) 18:15:32.95
自己解決しました
0619デフォルトの名無しさん2013/11/12(火) 18:17:11.04
質問です。SwingでJFrameのデフォルトの大きさを決めておこうと思って
static final Dimension DEFAULT_SIZE = new Dimension(400, 300) みたいにしたのですが、
このインスタンスってプリミティブ型と違って書き換えが可能なんですね・・・
こういう場合では縦横それぞれのプリミチブ型を記述するしかないのでしょうか?
せっかくDimensionというクラスがあるので使いたいと思うのですが
0620デフォルトの名無しさん2013/11/12(火) 18:23:52.69
>>617
すまん。自分もテスト走らせたり開発用のインスタンス起動するのにmavenつかうよ。

ただどうも便利なビルドツールとランタイムの区別がついていない人がいるようでつい。
0621デフォルトの名無しさん2013/11/12(火) 18:39:56.50
>>619
static final Dimension2D DEFAULT_SIZE = new UnmodifiedDimension(400,300);
setとか呼ばれたら、UnsupportedOperationExceptionを投げる。
Collections.html#unmodifiableListあたりを参考に。

クラス定義が面倒なら、キャストはしてはいけませんとコメントで書いといて、= new DImension。
Dimensionとして渡さないといけないような相手なら、簡便さとコストを優先しているのだろうから諦める。
0622デフォルトの名無しさん2013/11/12(火) 19:13:42.76
>>621
ありがとうございます、参考になります
単純にインスタンスをラップして、リードオンリーなメソッドのみ委譲して、
それ以外は例外を投げればいいんですね。
このあたり、自作のライブラリを作るときは参考にしようと思います。
繰り返しですが、だりがとうございました!
0623デフォルトの名無しさん2013/11/12(火) 19:43:41.43
こちらこそだりがとう。
0624デフォルトの名無しさん2013/11/12(火) 19:49:43.97
だりがやねん。

Jframe.setSizeはDimension2Dでなくて、Dimensionでないとダメらしい。残念。
0625デフォルトの名無しさん2013/11/12(火) 20:15:45.84
初期化するときに1回しか使わないから直接書けばよくね?
デフォルトサイズ後から使わないでしょ?
0626デフォルトの名無しさん2013/11/12(火) 21:02:46.43
簡単に書けることをわざわざややこしく書きたい人もいる
0627デフォルトの名無しさん2013/11/12(火) 21:07:10.91
スタティッククラスってどういうときに使うの?
0628デフォルトの名無しさん2013/11/12(火) 21:36:03.83
>>627
内部クラスの事を言っているのであれば外側のオブジェクトへの参照がいらないとき。
外側のオブジェクトへの参照が不要なときは可能な限りstaticにすべき。
0629デフォルトの名無しさん2013/11/12(火) 21:51:18.21
つまりクラス定義に付けるstaticは内部クラス用ってことか
0630デフォルトの名無しさん2013/11/12(火) 22:22:40.16
言語仕様の用語的にはstaticが付かない外側のクラスへの参照を持ってる奴だけを内部クラスと呼ぶ
のでstaticが付いたら内部クラスとは呼ばない。
0631デフォルトの名無しさん2013/11/12(火) 22:27:38.44
class Foo {} // 普通のクラス
static class Bar {} //???

class Hoge {
  class Unko {} //内部クラス
  static class Chinko {} //???
}
0632デフォルトの名無しさん2013/11/12(火) 22:48:55.42
>>627
別クラスにstaticメンバ見せたいけど
どうしてもメンバをprivateにしておきたい場合にstatic classを使う。

あるいはMap.Entryみたいに、成り行きでなんとなく使う
0633デフォルトの名無しさん2013/11/13(水) 00:21:21.14
swingを勉強しています。JFrameを作ってマウスクリックしたら*.pngファイルを読み込み
JLabelに貼り付けて表示するプログラムを作りました。ですが*.pngファイルが表示されないのです。
何が原因でしょうか?pngファイルをJFrameのコンストラクタで読み込んでJLabelに貼り付けると
うまく行きます。またmouseClicked()にブレークポイントを設定すると、そこで停止します。
アドバイスよろしくお願いします。
public class sample01_38a
{
public static void main(String[] args)
{
my_frame frame = new my_frame() ;
frame.setBounds(0,0,500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
<略>
public class my_frame extends JFrame implements WindowListener,MouseListener
{
public void mouseClicked(MouseEvent e)
{
icon = new ImageIcon( "images/anomalocaris.png" ) ;
label = new JLabel("test label",icon,SwingConstants.CENTER);
getContentPane().add(label) ;
<略>
0634デフォルトの名無しさん2013/11/13(水) 00:24:22.24
その質問何回目
0635デフォルトの名無しさん2013/11/13(水) 09:57:32.52
すいません、自己解決しました。
0636デフォルトの名無しさん2013/11/13(水) 11:14:17.67
static finalとか良く分からん。
外に見せたい定数とかに定義してんだけど。
0637デフォルトの名無しさん2013/11/13(水) 12:07:42.92
>>636
複数のインスタンスで別個に持つ必要がない定数に使う
0638デフォルトの名無しさん2013/11/13(水) 14:11:01.81
>>637
なるほど、分かり易い。

あるクラスをインスタンス化したら、中のインスタンスが見えてしまうんだが、プライベートとかつけても消えてくれない。。。
0639デフォルトの名無しさん2013/11/13(水) 14:48:13.11
>>638
インスタンス化される側のクラスの中でメンバー変数をprivate宣言する必要がある。
0640デフォルトの名無しさん2013/11/13(水) 14:58:59.23
>>639
かったぱしからprivateつけてみてはいるんだけどなぁ。
勉強します。
0641デフォルトの名無しさん2013/11/13(水) 16:22:25.80
同じクラスの中からだと見えちゃうよ > private
0642デフォルトの名無しさん2013/11/13(水) 16:29:44.93
どういうことやってるのか
ソースコード見ないと何とも言えんなあ
0643デフォルトの名無しさん2013/11/13(水) 16:34:32.11
実はデバッガで見てるのでは
0644デフォルトの名無しさん2013/11/13(水) 16:58:07.27
インスタンスをどこから隠したいのかが不明瞭
他のパッケージから隠したいのか
同一パッケージの他クラスから隠したいのか
同一ファイル内の他クラスから隠したいのか
0645デフォルトの名無しさん2013/11/13(水) 17:11:36.94
ウェブページと対話するようなプログラムをかきたいんですけど
ログイン状態を維持したままウェブページにアクセスするのってどうやるんでしょうか?

HTTPURLConnection から InputStream を開いてページソースを取得するのはできるんですが
クッキーとかセッションの扱いがいまいちわかってない程度の知識です
0646デフォルトの名無しさん2013/11/13(水) 17:17:48.09
プログラミングよりも先にネットワークの仕組みを勉強すればいいんじゃね?
0647デフォルトの名無しさん2013/11/13(水) 17:19:08.56
だなw
0648デフォルトの名無しさん2013/11/13(水) 17:24:45.91
サーバーサイドJavaの本を買えばのってるぞ
0649デフォルトの名無しさん2013/11/13(水) 17:25:12.80
ネットワークの仕組みなんて要らないよ
クッキーについてだけ勉強すればおk
0650デフォルトの名無しさん2013/11/13(水) 17:25:27.92
そういわずにせめてどのクラス使えばいいとかヒントになるページとか教えてください!
0651デフォルトの名無しさん2013/11/13(水) 17:26:17.94
ウェブの仕組みについて勉強すれば
ここで訊かずともどのクラス使えばいいのかおのずと見えてくる
0652デフォルトの名無しさん2013/11/13(水) 17:26:55.79
バカにはムリムリww
0653デフォルトの名無しさん2013/11/13(水) 17:27:34.73
java cookieでググレばおk
0654デフォルトの名無しさん2013/11/13(水) 17:27:35.24
「Java セッション」でググればいくらでも出てくるレベルの質問とか、釣り質問か

Javaの道:Servlet(6.セッション管理)
http://www.javaroad.jp/servletjsp/sj_servlet6.htm

Java Solution FAQ:セッションの開始・継続・終了
http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html

セッションを使ったデータの書き込みと読み込み - セッション管理 - サーブレット入門
http://www.javadrive.jp/servlet/session/index2.html
0655デフォルトの名無しさん2013/11/13(水) 17:29:15.42
わざと古すぎる記事を紹介とか
0656デフォルトの名無しさん2013/11/13(水) 17:33:17.10
>>654
そーうーのはブログでやって
0657デフォルトの名無しさん2013/11/13(水) 17:40:33.60
>>654
軽くよんでみたんですけどこれってサーバー側で動的ページを表示させる方法にみえるんですけど
クライアント側でもHttpServletっていうクラスを使えばできるんですか?

まだServretの中身よんでないんですけど
方針がまちがってなければちゃんと調べてみます
0658デフォルトの名無しさん2013/11/13(水) 17:42:50.89
Java技術最前線 - 「Java SE 6完全攻略」第42回 Cookieを扱う その3:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070831/280847/

Lesson: Working With Cookies (The Java? Tutorials > Custom Networking)
http://docs.oracle.com/javase/tutorial/networking/cookies/
0659デフォルトの名無しさん2013/11/13(水) 17:50:42.67
ゆとりは手取り足取り教えてもらわないと何もしないのな
0660デフォルトの名無しさん2013/11/13(水) 17:51:54.22
ゆとり乙w
0661デフォルトの名無しさん2013/11/13(水) 17:54:56.68
自己解決しました
0662デフォルトの名無しさん2013/11/13(水) 17:59:36.13
うぅ;; ゆとりですいません…
というかそもそも読むだけしかできなくて
パスとIDをポストして結果をクッキーにためる処理もできないことに気づきました;;

Cookie = new Cookie();
url.post("id=...&pass=..., cookie); とかすれば勝手にクッキーに情報がたまって
url.openStream(cookie); みたいに引数でわたしたら勝手にクライアント認識してくれるようなクラスがあると思ってました;;

もうちょっと勉強しないと自分には無理っぽいです><
どうもおさわがせしました…
0663デフォルトの名無しさん2013/11/13(水) 18:01:23.29
涙目wwwゆとり乙wwww
0664デフォルトの名無しさん2013/11/13(水) 18:02:51.54
相変わらず役にたたねえスレだなw
0665デフォルトの名無しさん2013/11/13(水) 18:03:52.58
バカにはムリw
0666デフォルトの名無しさん2013/11/13(水) 18:05:54.88
Javaでのクライアント側のクッキー管理なんてデフォルトのクッキーマネージャを使ってりゃ十分だろJK
0667デフォルトの名無しさん2013/11/13(水) 18:11:32.08
CookieManager manager = (CookieManager)CookieHandler.getDefault(); //でデフォルトのクッキーマネージャ取り出して
CookieStore store = getCookieStore(); //クッキーのデフォルト保存先(メモリ)へのアクセス取り出して

CookieStoreのadd get removeを使ってファイルに書き出すなりファイルから読み込むなりして管理すれば十分だろJK
0668デフォルトの名無しさん2013/11/13(水) 18:18:47.63
相変わらず役にたたねえレスだなw
0669デフォルトの名無しさん2013/11/13(水) 18:22:11.12
自己解決しました
0670デフォルトの名無しさん2013/11/13(水) 18:27:50.31
質問です。
まず、Javaのクラスは常にヒープを使用するというのが気になったので、
配列などにあらかじめインスタンスをたくさんnewして格納しておき、必要なときにその配列から
未使用のインスタンスを検索して取り出して、不要になったら配列に返す、という方法で
擬似的にスタックを再現しようと思いました。

叩き台としては、十分なreserve数を用意したArrayListにインスタンスをnewして詰め込んだあと、
インスタンスを使用するときにpop、返却するときにpush、という方法で作りました。
しかしながら、テストをしてみるとインスタンス化するクラスがよほど大きなクラスでない限りは
newしたまま放置するのとほとんど差がありませんでした(むしろ遅いときの方が多かった)

ここで質問なのですが、実際のところ、このような方法で素のnewやGCの機能を使うよりも
高速化を図ることはできるのでしょうか?
0671デフォルトの名無しさん2013/11/13(水) 18:29:10.80
疑似スタックに何の意味が
0672デフォルトの名無しさん2013/11/13(水) 18:30:11.23
疑似スタックがヒープ上に作られるので何の効果もありませんでした
0673デフォルトの名無しさん2013/11/13(水) 18:30:24.54
それスタック関係なくてインスタンス化の時間を省きたいだけだろ
0674デフォルトの名無しさん2013/11/13(水) 18:30:48.99
>高速化を図る

Javaを使うことを諦める
0675デフォルトの名無しさん2013/11/13(水) 18:34:30.15
>>674
でも宿題だから仕方ない
0676デフォルトの名無しさん2013/11/13(水) 18:38:40.65
>>675

★★ Java の宿題ここで答えます Part 72 ★★
http://toro.2ch.net/test/read.cgi/tech/1337692704/
0677デフォルトの名無しさん2013/11/13(水) 18:42:55.68
全体的にコードがぐちゃぐちゃで遅いだけじゃね
特にコンストラクタが
0678デフォルトの名無しさん2013/11/13(水) 18:43:00.11
「よほど大きなクラスでない限り」素でGCが発生しないからpushで戻す時間遅くなってるんじゃ?
GCが発生しそうなプログラムなら速くなると思いますけどね
new って実際メモリ確保する時間はほぼ一瞬なのでインスタンス化の時間は変わらないと思います
0679デフォルトの名無しさん2013/11/13(水) 18:48:28.61
>>670
http://www.ibm.com/developerworks/jp/java/library/j-jtp01274/#3.1
0680デフォルトの名無しさん2013/11/13(水) 19:09:17.52
>>383
荒らすな雑魚
■ このスレッドは過去ログ倉庫に格納されています