★★Java質問・相談スレッド165★★
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/10/20(日) 19:30:39.35JavaScript, 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/
0554デフォルトの名無しさん
2013/11/11(月) 01:40:11.55あるクラスの内部クラスを、他のクラスで委譲することはできるのでしょうか
それとも委譲する場合は内部クラスではなくしっかりとクラスを作らないとだめなのでしょうか
よろしくお願いします
0555デフォルトの名無しさん
2013/11/11(月) 01:44:32.73できますん
0556デフォルトの名無しさん
2013/11/11(月) 01:56:07.81Objectしか継承してないような内部クラスなら渡しても使い道ないがな
0557デフォルトの名無しさん
2013/11/11(月) 02:03:30.110558デフォルトの名無しさん
2013/11/11(月) 02:07:46.70日本語でおk?
0559デフォルトの名無しさん
2013/11/11(月) 05:29:33.86StringBuilder使え
0560デフォルトの名無しさん
2013/11/11(月) 05:50:23.01例えば
Aメソッドの最初に「ここまで実行できてる」と書いてその後の処理でエラーが出る
Aメソッドの最後でBメソッドを呼び出し
Bメソッドで「Bメソッドまで実行できてる」と書く
この場合「Bメソッドまで実行できてる」というメッセージが出てるのはおかしいですか?
Aメソッドの処理でエラーが出ているはずなのにどうしてBメソッドが呼び出されてるのか分かりません
0561デフォルトの名無しさん
2013/11/11(月) 06:56:09.600562デフォルトの名無しさん
2013/11/11(月) 07:37:15.580563デフォルトの名無しさん
2013/11/11(月) 09:02:14.50それだとStringを作るためにappend,toString時にchar[]のコピーが2回必要になる。
文字列のパフォーマンスを考えるとStringに追加してもらうしかないし、解決するには+=, concatでなく、concat(...)が必須ってことが理解できるはず。
0564デフォルトの名無しさん
2013/11/11(月) 09:05:53.820565デフォルトの名無しさん
2013/11/11(月) 11:45:32.86結局おまえは何がしたいんだ
Stringは、アドレスを保持していて
concatした結果はStringのインスタンスに影響無く
戻り値で再度Stringのインスタンスで受けるしかねーだろ
0566デフォルトの名無しさん
2013/11/11(月) 12:02:31.29System.arraycopy, Arrays.copyOfのところですが、少なくともcharAtの呼び出しと評価も回避できます。
javaではパフォーマンスはあまり考えませんが、memory copy (java.awt)やStringについては少し気にしてもいいかなと思います。
0567デフォルトの名無しさん
2013/11/11(月) 12:56:58.60細かいところをいくら気にしてもその8割は労力の無駄
0568デフォルトの名無しさん
2013/11/11(月) 13:02:07.170569デフォルトの名無しさん
2013/11/11(月) 13:02:28.04んなもんAメソッドが投げるのがRuntimeExceptionか、Exception
か、Errorか、しらんが
AメソッドがExceptionを投げました。
Exceptionの詳細が表示される。
でBメソッドが実行されます。
それだけの話し。
0570デフォルトの名無しさん
2013/11/11(月) 15:10:36.87RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(2);
String s = raf.readLine();
System.out.println(s);
raf.close();
これで3文字目から改行まで文字列を表示しますが
3文字目から6文字目までと範囲を指定して読み込む書き方を教えてください
0571デフォルトの名無しさん
2013/11/11(月) 15:38:09.40byte 三文字目 = raf.readByte();
byte 四文字目 = raf.readByte();
byte 五文字目 = raf.readByte();
byte 六文字目 = raf.readByte();
byte[] b = { 三文字目, 四文字目, 五文字目, 六文字目 };
String s = new String(b);
System.out.println(s);
0572デフォルトの名無しさん
2013/11/11(月) 15:38:43.280573デフォルトの名無しさん
2013/11/11(月) 15:52:54.68なんか面倒くさいんですね
ありがとうございます
0574デフォルトの名無しさん
2013/11/11(月) 15:57:57.60もうちょっと便利メソッドがあるからRandomAccessFileのリファレンス見るよろし
0575デフォルトの名無しさん
2013/11/11(月) 16:22:59.06RandomAccessFileを使う理由は?
文字列を巻き戻したりせずに読み込むだけならReaderで十分だよ。
char[] buf = new char[4];
BufferedReader in = new BufferedReader(new FileReader("sample.txt"));
in.skip(2);
in.read(buf, 0, 4);
in.close();
String s = new String(buf);
0576デフォルトの名無しさん
2013/11/11(月) 17:43:57.81Readerを使うのが正しいな。
0577デフォルトの名無しさん
2013/11/11(月) 18:08:20.300578デフォルトの名無しさん
2013/11/11(月) 19:39:57.97あれはObjectInputStreamの下位的な位置付けで文字列の読み込みも
シリアライズとかで必要なものに特化してるからなぁ。
0579570
2013/11/11(月) 21:02:29.64これを使うものだと思ってました
BufferdReaderも使ってみます
>>574
read(new byte[10])こんな感じの書き方を覚えました
0580デフォルトの名無しさん
2013/11/11(月) 21:13:25.31とし、例外Exceptionのprintstacktraceの内容をファイルに書き込むことは
可能ですか?
試行錯誤しましたがわかりません。
0581デフォルトの名無しさん
2013/11/11(月) 21:15:06.96ファイルを読んでいる途中でファイルの先頭方向に戻るとかいう操作が必要で無い
場合はRandomAccessFile使う必要無いよ。こっちを使うのがむしろ特殊ケース。
大抵はInputStreamでskipを使って指定バイト数を読み飛ばすので用に足りると思う。
あとキャラクターエンコーディングとかを意識してバイト数ではなく文字数単位で
読み込んだり読み飛ばしたりする場合はReaderを使わないとダメ。
0582デフォルトの名無しさん
2013/11/11(月) 21:16:25.96http://docs.oracle.com/javase/jp/7/api/java/io/PushbackReader.html
0583デフォルトの名無しさん
2013/11/11(月) 21:18:23.92http://otn.oracle.co.jp/technology/global/jp/sdn/java/private/techtips/2001/tt0518.html
0584デフォルトの名無しさん
2013/11/11(月) 21:25:25.060585デフォルトの名無しさん
2013/11/11(月) 21:28:26.87http://muranoya.net/wordpress/?p=17
0586デフォルトの名無しさん
2013/11/11(月) 21:45:24.23ロガーを使うのが王道じゃないかな。
0587デフォルトの名無しさん
2013/11/11(月) 21:50:30.85全てのプロジェクトに対して、ビルドパスを通すことは賢いやり方とは思えないのですが
0588デフォルトの名無しさん
2013/11/11(月) 21:59:27.14そのような疑問を抱いた時こそMavenやGradleといった依存性管理ツールを学ぶ好機。
0589587
2013/11/11(月) 22:10:17.54あぁ、そうなっちゃうんですね
mavenすごく面倒なので、使わないようにて思ってたんですが
ありがとうございます
0590デフォルトの名無しさん
2013/11/11(月) 22:39:17.36すごく楽じゃん。規約に沿ってきれいにまとまる範囲までは。
今となって特殊な事情でも無い限りこの手の依存性管理を「使わないようにする」理由が薄い。
ライブラリやフレームワーク等も依存性管理ツールの利用を前提としてプロダクトを細かく
モジュールに分割して配布する(そしてfat jarが敬遠される)ようになったから、過去のjarを
手作業でコピって上書きしたら以降運任せではとうてい持続しない。
もう新規プロジェクトは規模にかかわらず依存性管理ツールの使用がデフォで良いと思う。
規模にかかわらず便利だし、特殊なことをしない小さなプロジェクトほど楽が出来る。
入門に際してもjavacでHello Worldが済んだら以降はMavenなりGradleといった今時のビルド
ツール強制で良いと思うけれどもね。
0591デフォルトの名無しさん
2013/11/11(月) 22:46:24.540592デフォルトの名無しさん
2013/11/11(月) 23:08:15.48Reader#skip(2)でエラー出なかったからといって、
ほんとに2文字スキップしたのかは戻り値確認するまで解らんぞ
0593デフォルトの名無しさん
2013/11/11(月) 23:12:34.540594デフォルトの名無しさん
2013/11/11(月) 23:15:30.330595デフォルトの名無しさん
2013/11/11(月) 23:17:12.15PrintWriterでないと無理。コンストラクタにWriter渡して作ればいい。
0596デフォルトの名無しさん
2013/11/11(月) 23:21:43.550597デフォルトの名無しさん
2013/11/12(火) 04:35:04.24mavenでさえ2以降でもすでに8年たっているし。
Jarを手作業で落としてコピれば動くので今時の依存性管理付きビルドツールは不要です
pomの類いも書きませんというのは、手作業で動作チェックすれば動くのでテストケースは
書きませんというようなもの。
0598デフォルトの名無しさん
2013/11/12(火) 09:21:08.14場合によってはジャバ9のモジュラリティーとかそのあたりで入ってくるかもしれない。
0599デフォルトの名無しさん
2013/11/12(火) 10:42:28.48「derby.jarはバラさなければならない」 とか馬鹿なレスも減るべ。
JREに無料で付いてくるクラスローダ実装引き合いに出して
「これがJavaだ!」みたいなことドヤ顔で言う人ってなんなの…
しかし 「このアプリの起動にはMavenが必要です」 な未来はイヤ。
Mavenスレ落ちて何年経つんだよ
0600デフォルトの名無しさん
2013/11/12(火) 10:44:14.620601デフォルトの名無しさん
2013/11/12(火) 11:05:15.850602デフォルトの名無しさん
2013/11/12(火) 11:06:31.09そりゃそーだろ
C#は、javaのいいとこ取りして
さらにこういう機能があったら良いのに
っていうものを追加したもんだもん
ちなみに俺はC#→java(android)って感じで勉強してきたけどね
0603デフォルトの名無しさん
2013/11/12(火) 11:16:57.36ubuntuでmonoを使う選択肢というのはmicrosoftの性質を鑑みてストールマンや他多数の著名人が禁止してるし。
microsoftもので動かしたいときがあればjs,ruby,phpとかのスクリプトだけ勉強しとけばいいのかもと思う。
0604デフォルトの名無しさん
2013/11/12(火) 11:23:22.250605デフォルトの名無しさん
2013/11/12(火) 11:26:52.050606デフォルトの名無しさん
2013/11/12(火) 11:45:34.51いつもよく分からないからコピペで済ませてるんですが、eclipseでこういう風に管理してるってのがあれば教えてください。
0607デフォルトの名無しさん
2013/11/12(火) 11:59:04.52独自クラスうんぬんじゃなくて
パッケージってのは名前の衝突を避けるため
分離化するのが目的
0608デフォルトの名無しさん
2013/11/12(火) 12:51:12.66自分がよく使う汎用クラスの管理はどうなさってます??
0609デフォルトの名無しさん
2013/11/12(火) 13:02:24.47旧SunMicroは、メアド文字列使って一意なjavaパッケージ名を求める手順を
提案すべきだったと思うんだが
0610デフォルトの名無しさん
2013/11/12(火) 14:14:09.34ライブラリ化。
0611デフォルトの名無しさん
2013/11/12(火) 15:01:24.51で、その外部jarライブラリを作るにあたって、結局パッケージ名も関わってはくると思う。
デフォルトパッケージ?
0612デフォルトの名無しさん
2013/11/12(火) 15:24:22.72>「クラスローダは自作するもの」と周知させれば
なしてわざわざ自作するの? どうしてあるものを使わないの?
>しかし 「このアプリの起動にはMavenが必要です」 な未来はイヤ。
頓珍漢な心配はまず実際にmaven使ってみてからにしてくれない?
All-in-oneなexecutable jarにせよ必要なjarがlibディレクトリ等に入ったtar.gz等に
せよ、配布用のパッケージをどうmavenで作成するかなんて世の中具体例に溢れている。
0613デフォルトの名無しさん
2013/11/12(火) 15:39:20.12>「derby.jarはバラさなければならない」 とか馬鹿なレスも減るべ。
そういうレスがいつあったのか、それとも単なる思い込みかよく分からんが、
「そのほうが楽なら」バラすしそれ全く手間じゃないし。
それこそpomにプラグイン指定すれば手作業ゼロで自動化できる話。
実行用のパッケージ作るのにオレオレなクラスローダー使ったりどこかの
Jar-in-Jarソリューション使うより、単にバラして動くならそっちの方が
シンプルだし確実。
0614デフォルトの名無しさん
2013/11/12(火) 15:50:32.580615デフォルトの名無しさん
2013/11/12(火) 17:00:43.73デフォルトパッケージは使っちゃダメ。
ちゃんと自分用のパッケージ名を適当に決めて、機能別にさらにパッケージに
分けて管理した方が良い。
自分でライブラリを作り始めるのであれば、まず既成のライブラリがどのように
パッケージを分けて管理しているのか観察してマネをしてみるところから始める
と良いと思うよ。
0616デフォルトの名無しさん
2013/11/12(火) 17:46:22.74それを言ったら、パッケージなしで書くのはhello worldまでになる。つまりパッケージ名は常に考えているので、ライブラリだからどうこうと言うことはない。
0617デフォルトの名無しさん
2013/11/12(火) 18:05:59.87これはこれでなかなか便利でな…
0618デフォルトの名無しさん
2013/11/12(火) 18:15:32.950619デフォルトの名無しさん
2013/11/12(火) 18:17:11.04static final Dimension DEFAULT_SIZE = new Dimension(400, 300) みたいにしたのですが、
このインスタンスってプリミティブ型と違って書き換えが可能なんですね・・・
こういう場合では縦横それぞれのプリミチブ型を記述するしかないのでしょうか?
せっかくDimensionというクラスがあるので使いたいと思うのですが
0620デフォルトの名無しさん
2013/11/12(火) 18:23:52.69すまん。自分もテスト走らせたり開発用のインスタンス起動するのにmavenつかうよ。
ただどうも便利なビルドツールとランタイムの区別がついていない人がいるようでつい。
0621デフォルトの名無しさん
2013/11/12(火) 18:39:56.50static final Dimension2D DEFAULT_SIZE = new UnmodifiedDimension(400,300);
setとか呼ばれたら、UnsupportedOperationExceptionを投げる。
Collections.html#unmodifiableListあたりを参考に。
クラス定義が面倒なら、キャストはしてはいけませんとコメントで書いといて、= new DImension。
Dimensionとして渡さないといけないような相手なら、簡便さとコストを優先しているのだろうから諦める。
0622デフォルトの名無しさん
2013/11/12(火) 19:13:42.76ありがとうございます、参考になります
単純にインスタンスをラップして、リードオンリーなメソッドのみ委譲して、
それ以外は例外を投げればいいんですね。
このあたり、自作のライブラリを作るときは参考にしようと思います。
繰り返しですが、だりがとうございました!
0623デフォルトの名無しさん
2013/11/12(火) 19:43:41.430624デフォルトの名無しさん
2013/11/12(火) 19:49:43.97Jframe.setSizeはDimension2Dでなくて、Dimensionでないとダメらしい。残念。
0625デフォルトの名無しさん
2013/11/12(火) 20:15:45.84デフォルトサイズ後から使わないでしょ?
0626デフォルトの名無しさん
2013/11/12(火) 21:02:46.430627デフォルトの名無しさん
2013/11/12(火) 21:07:10.910628デフォルトの名無しさん
2013/11/12(火) 21:36:03.83内部クラスの事を言っているのであれば外側のオブジェクトへの参照がいらないとき。
外側のオブジェクトへの参照が不要なときは可能な限りstaticにすべき。
0629デフォルトの名無しさん
2013/11/12(火) 21:51:18.210630デフォルトの名無しさん
2013/11/12(火) 22:22:40.16のでstaticが付いたら内部クラスとは呼ばない。
0631デフォルトの名無しさん
2013/11/12(火) 22:27:38.44static class Bar {} //???
class Hoge {
class Unko {} //内部クラス
static class Chinko {} //???
}
0632デフォルトの名無しさん
2013/11/12(火) 22:48:55.42別クラスにstaticメンバ見せたいけど
どうしてもメンバをprivateにしておきたい場合にstatic classを使う。
あるいはMap.Entryみたいに、成り行きでなんとなく使う
0633デフォルトの名無しさん
2013/11/13(水) 00:21:21.14JLabelに貼り付けて表示するプログラムを作りました。ですが*.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.240635デフォルトの名無しさん
2013/11/13(水) 09:57:32.520636デフォルトの名無しさん
2013/11/13(水) 11:14:17.67外に見せたい定数とかに定義してんだけど。
0637デフォルトの名無しさん
2013/11/13(水) 12:07:42.92複数のインスタンスで別個に持つ必要がない定数に使う
0638デフォルトの名無しさん
2013/11/13(水) 14:11:01.81なるほど、分かり易い。
あるクラスをインスタンス化したら、中のインスタンスが見えてしまうんだが、プライベートとかつけても消えてくれない。。。
0639デフォルトの名無しさん
2013/11/13(水) 14:48:13.11インスタンス化される側のクラスの中でメンバー変数をprivate宣言する必要がある。
0640デフォルトの名無しさん
2013/11/13(水) 14:58:59.23かったぱしからprivateつけてみてはいるんだけどなぁ。
勉強します。
0641デフォルトの名無しさん
2013/11/13(水) 16:22:25.800642デフォルトの名無しさん
2013/11/13(水) 16:29:44.93ソースコード見ないと何とも言えんなあ
0643デフォルトの名無しさん
2013/11/13(水) 16:34:32.110644デフォルトの名無しさん
2013/11/13(水) 16:58:07.27他のパッケージから隠したいのか
同一パッケージの他クラスから隠したいのか
同一ファイル内の他クラスから隠したいのか
0645デフォルトの名無しさん
2013/11/13(水) 17:11:36.94ログイン状態を維持したままウェブページにアクセスするのってどうやるんでしょうか?
HTTPURLConnection から InputStream を開いてページソースを取得するのはできるんですが
クッキーとかセッションの扱いがいまいちわかってない程度の知識です
0646デフォルトの名無しさん
2013/11/13(水) 17:17:48.090647デフォルトの名無しさん
2013/11/13(水) 17:19:08.560648デフォルトの名無しさん
2013/11/13(水) 17:24:45.910649デフォルトの名無しさん
2013/11/13(水) 17:25:12.80クッキーについてだけ勉強すればおk
0650デフォルトの名無しさん
2013/11/13(水) 17:25:27.920651デフォルトの名無しさん
2013/11/13(水) 17:26:17.94ここで訊かずともどのクラス使えばいいのかおのずと見えてくる
0652デフォルトの名無しさん
2013/11/13(水) 17:26:55.790653デフォルトの名無しさん
2013/11/13(水) 17:27:34.73■ このスレッドは過去ログ倉庫に格納されています