【初心者】Java質問・相談スレッド119【歓迎】at TECH
【初心者】Java質問・相談スレッド119【歓迎】 - 暇つぶし2ch2:デフォルトの名無しさん
08/09/03 05:56:04
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
スレリンク(tech板)l50
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
スレリンク(tech板)l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 65 ★★
スレリンク(tech板)l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
URLリンク(sdc.sun.co.jp)
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

3:デフォルトの名無しさん
08/09/03 06:27:30


4:デフォルトの名無しさん
08/09/03 09:00:19
前スレのきちがいへ
castはジェネリックで使うから意味があるわけで
ジェネリックが使えなければ意味がない。
動的と言ってる部分はあくまでジェネリック部分なのだから。
だからジェネリックのないところで同じようなことはできない。
だからみんな出来ないと答えてる。

まあキャストした後でどう使うのかをコードで示せれば、
それに応じた解決策はでるかも知れない。
といっても使い方が、言語自体拡張したりテンプレート的なもので使うとかでないと
java言語の範疇では無理だと思うけどね。


5:デフォルトの名無しさん
08/09/03 09:09:38
Javaは動的に見えて、あくまで静的な言語ですな。結局void *でしかないですけど・・・

6:デフォルトの名無しさん
08/09/03 10:20:35
前スレの988ですが質問の仕方が悪かったようなので再度お願いします
型の変換について質問なのですが
String型をint型として扱いたい場合Integer.parseInt(String)を使いますよね?
しかしこのStringは数字の文字列でなくてはいけないようで
数字以外の文字列が含まれている場合エラーが出ます(最初lengthでも返ってくるかな?と思ったのですが)
double型をint型として扱いたい場合Integer.parseInt()ではなく(int)doubleでキャストをしますよね?
同じ型変換のようですが両者には違いがあるようで
Stringの場合はintにキャストできないしdoubleの場合はInteger.parseInt()を使うことはできません
私はパースするという行為とキャストするという行為が型変換をするための行為だと思ってるのですが
これは間違った認識でしょうか?
もし両者とも型変換を行うものであるならば内部的にどのような違いがおきているのでしょうか?

自分で何か変な勘違いをしてるのかと思っているのですがよろしくお願いします

7:デフォルトの名無しさん
08/09/03 10:57:21
>>6
> 私はパースするという行為とキャストするという行為が型変換をするための行為だと思ってるのですが
> これは間違った認識でしょうか?

キャストは型変換だけど、パース(parseInt)なんかは、
型変換だとは考えないほうがいいと思うので、
間違った認識でしょうね。

8:6
08/09/03 11:24:10
>>7
どうもレスありがとうございます
キャストは型変換ときいてひとまず安心しました
パースは文字通りに考えると構文解析なのでしょうが
それが何を意味してるのかが正直わかりません
その辺も含めてもっといろいろ調べてきたいと思います

9:デフォルトの名無しさん
08/09/03 12:00:26
型がない言語から勉強をはじめるとそういう解釈にもなるんでしょう。

10:デフォルトの名無しさん
08/09/03 12:40:52
>>8
内部的(なイメージ)からだとキャストを型変換というのも微妙な気がするが。
変換というと元のものが別のものに変わるような気がしてする。

ある果物(メモリ上のオブジェクトイメージ)に「リンゴ」というラベル(変数a)が
付いていて、それにもう一つ「ふじ」というラベル(変数b)を付けるのがキャスト。
どっちも同じものを示しているし、オブジェクトイメージは変化しない。
この手法(?)は(変数が実質ラベルである)オブジェクトにしか出来ないので、
プリミティブが関係する場合はキャストのように見えるのは全てパースで、
つまり元から別のものを作り出している。

…ヘタだな、すまん。

11:デフォルトの名無しさん
08/09/03 12:59:02
1. 型変換のキャスト
double d = 3.14;
int i = (int)d;

2. >>10が書いているような型の解釈を替えるためのキャスト
リンゴ ap = ...;
ふじ fj = (ふじ)ap;

たぶんこの2種類があって、1の方は組み込み型でしか使えない。ので、
組み込み型ではないクラスで型変換のようなことがしたかったら
parseInt()のようなキャストではない実装が必要になるんでしょう。




12:デフォルトの名無しさん
08/09/03 13:48:29
そういう面倒臭いのはPerlとかでやっとけ

13:デフォルトの名無しさん
08/09/03 22:16:51
>>9
暗黙の型変換やってるだけで全部バリアントっていう言語は実際少ないでしょ。

14:デフォルトの名無しさん
08/09/03 22:35:26
>>4
ジェネリック無くても、オーバーライド関係でキャストは必要じゃね?

15:デフォルトの名無しさん
08/09/03 22:56:50
castってのはClass#castの話だろう


16:デフォルトの名無しさん
08/09/03 23:31:05
JSplitPaneやJScrollPaneを生成してから、
そのサイズを使って処理を行いたいんですけど、
生成時はサイズが 0 のままで、
repaint() が呼び出されないとサイズに有効な値が入りません。

pack() とか revalidate() とか適当に呼び出してるんですけど、
足りないんでしょうか?

(そもそも pack とか validate の使い方がよくわかってませんが。。)

17:デフォルトの名無しさん
08/09/04 00:28:25
そういうもんだから仕方ない

18:デフォルトの名無しさん
08/09/04 00:30:20
setVisible(true)しないと計算されないんだっけか?

そのサイズを使った処理ってのは何?

19:デフォルトの名無しさん
08/09/04 00:53:42
>>16
サイズで私の場合は、中に入れ込むコンポーネントの
setPreferredSize を使うと大体解決します。

とりあえず、api ドキュメントを読みましょう。
Swing の場合は "How to Use XXX" も読みましょう。

20:デフォルトの名無しさん
08/09/04 01:22:22
>>16
ComponentListener

21:デフォルトの名無しさん
08/09/04 01:45:58
JToolBarってデフォルトのままgetBackgroundを使うとrgb238,238,238が入ってる
みたいなのですが、ツールバーに加えるコンポネントの背景色に
setBackground(jtoolbar.getBackground())とか
setBackground(new Color(238,238,238))とかやってもツールバーに対して白っぽくなります。
で、toolbarの方にsetBackground(new Color(238,238,238))ってやると色が揃ったので、
どうやらJToolBarのデフォルトの色がおかしいみたいだったのですが
getBackgroundで返ってくるのじゃないこのデフォルトの色は何なんでしょうか?

22:デフォルトの名無しさん
08/09/04 04:36:00
>>21
どの JToolBar か分かんないが、1.6.0_07 のデフォルトのなんとかいうテーマのは、
グラデーションが掛かっているように見える。
JToolBar のレンダラ(?)が書いてるんだと思うが、Color はグラデなんか表現できないから、
一番明るい色かなにかを返してるとかじゃないか。
もし「ならば上に載せるコンポーネントの背景色をどうすればいいのか」という話なら、
透明にすればいいんだ。

23:デフォルトの名無しさん
08/09/04 05:20:28
>>22
ありがとうございます!
よく見ると確かにグラデーションなんですねこれ。
背景色透過ってどうするんだろうと調べたらそのものsetContentAreaFilledがあるんですね。
これfalseにすると透過になる代わりにマウスに対するフォーカスもなくなるみたいなので
マウスのリスナで切り替えるようにしたら上手く出来ました、情報感謝です!

24:デフォルトの名無しさん
08/09/04 09:42:47
調べてみましたが、確信が持てなかったので教えて下さい。
J2MEでTomcatって動作できませんよね?

25:デフォルトの名無しさん
08/09/04 10:03:20
自己解決しました。動作出来ないっぽいです。

26:デフォルトの名無しさん
08/09/04 12:58:56
>>23
JComponent#setOpaque

27:デフォルトの名無しさん
08/09/04 13:32:17
オパキュー

28:デフォルトの名無しさん
08/09/04 14:51:07
Thread thread = new Thread (){
  public void run(){
    while (true) {
      sleep(100);
    }
  }
};
thread.start();
thread = null;

こういうふうに、どこからも参照されなくなったスレッドは、
いつかGCに消されて処理が止まるんでしょうか?
それともずっと動き続けるんでしょうか?

29:デフォルトの名無しさん
08/09/04 15:01:15
動き続ける

30:デフォルトの名無しさん
08/09/04 15:10:16
>>28
ずっと動き続けます。
どこからも参照されない状態にはなっていません。

Thread.start() に、以下の行があります。
> group.add(this);


31:デフォルトの名無しさん
08/09/04 18:32:15
何でスレッドを安全に停止するスレッドってなくなっちゃったんですか?

32:デフォルトの名無しさん
08/09/04 18:52:14
>>31
なんだそれ

33:デフォルトの名無しさん
08/09/04 19:01:16
Thread.stop() が deprecated な事を言ってるんじゃ。
とりあえずAPIリファレンスみれば

34:デフォルトの名無しさん
08/09/04 19:42:45
安全に停止する方法がなくなったんじゃなくて、
元々安全じゃないから使うなになったんだろ


35:デフォルトの名無しさん
08/09/04 19:56:54
代替コードがjavadocに書いてあるだろ。

36:デフォルトの名無しさん
08/09/04 21:10:13
ロックオブジェクトはstaticで作るべきですか?


37:デフォルトの名無しさん
08/09/04 21:13:49
>>36
何が理由でロックしたいのかによる。

38:36
08/09/04 21:34:17
すいません。
質問を変えます。

どういう場合にstaticで作るべきでしょうか?





39:デフォルトの名無しさん
08/09/04 22:10:52
意味が分からん。
ロックしたい粒度、スコープをあらわすのにstaticオブジェクトがふさわしい場合


40:デフォルトの名無しさん
08/09/04 22:24:00
下記のようにmethodAとmethodBが同じクラス内にあったとき
methodA呼び出し中にmethodBを呼び出し、再度methodAを呼ぶと
デッドロックは起こりますか?

class A{

private Object lock = new Object();

void methodA(String str){

synchronized(lock){

try(){
    while(true){
Thread.sleep(1000);
System.out.println(str);
}
}catch(Exception e){
e.printStackTrace();
}

}

}

void methodB(){

lock = new Object();

}

}

41:デフォルトの名無しさん
08/09/04 22:35:44
あ、デッドロックじゃなくて、単なる処理待ちでした
要するに、ロックオブジェクトに別のインスタンスを代入すると、
同期中の処理は同期されなくなるんでしょうか?

42:デフォルトの名無しさん
08/09/04 22:45:25
>>41
同期っつーか、排他制御されると思う根拠は何?

43:デフォルトの名無しさん
08/09/04 22:46:34
いえ、予想としては排他制御されなくなると思ってるんですが
違うのですか?

44:デフォルトの名無しさん
08/09/04 23:18:39
>>40
ソースで説明できるのに、試していないのでしょうか。

それはさておき....
URLリンク(www.y-adagio.com)
ロックに使われているオブジェクト自体は、他のスレッドからアクセス可能。
ロックを獲得しているスレッドが、同じロックを獲得することは妨げられない。
等など。

45:デフォルトの名無しさん
08/09/05 02:43:43
あたまわる!

46:デフォルトの名無しさん
08/09/05 02:51:49
何が回ってるって?

47:デフォルトの名無しさん
08/09/05 07:40:11
×あた回る
〇あ賜る

48:デフォルトの名無しさん
08/09/05 10:39:35
ファイルを読み込み、修正し、書き込みなんですが、
1つが600MBとか1Gとかのファイルなので、全部をメモリで読み込めず、
また、作業ファイルも作れないのですが、直接修正個所を当該ファイルに書き戻したいです。

read(byte[])して、write(byte[])は無理なので、どうすればいいのでしょうか。


49:デフォルトの名無しさん
08/09/05 10:42:40
>>34
実はそう言われると思っていたんですがその方が分かりやすいと
思ったのでああ書きました。

結局停止するメソッドはないんですね。
本家サイトに書かれている方法も分かるんですが、あれだと
ぐるぐる回ってる処理でしか停止できないので気持ち悪いですね。
一つのシーケンスを途中で切る事ができないって言うか。

シーケンスの中に止まるかどうかを判定するコードを何個も
仕掛けておかないとダメって事ですか?

てか >>31 はメソッドとスレッドを間違えてますね。

50:デフォルトの名無しさん
08/09/05 10:59:54
>>48
修正内容による。
ファイル先頭で読み込んだ内容がファイル終端に書き込むべき内容に影響するとかだと面倒だし。

全てのデータの影響範囲が局所的なら、
RandomAccessFile とか FileChannel とかで read()、内容を修正、write() でOK。
場合によってはバッファリング必要になるけど。

51:デフォルトの名無しさん
08/09/05 11:10:06
regexなどつかって修正するので、ファイルの結果のサイズが可変なんですが、どうしましょう?
マッチ個所を'\0'で埋めるわけにもいかず、とくにマッチを切り取りすると間違いなく可変です。

アルゴリズムはすぐ浮かぶんで作れるんですが、
開いたファイルを修正してそのまま上書きするようなライブラリとかないでしょうか?

52:デフォルトの名無しさん
08/09/05 14:03:48
>>49
だからjavadoc読んでこい

53:デフォルトの名無しさん
08/09/05 16:18:21
ImageBufferから画素のいろをα,R,B,Gの値で取得したいんですがどうすればいいでしょうか
ピクセルという単位についても教えていただけたらと思います

54:デフォルトの名無しさん
08/09/05 16:21:15
BufferedImageじゃないの?
BufferedImage#getRGB(int x,int y) - int

55:デフォルトの名無しさん
08/09/05 19:59:46
getImageメソッドで1つ上のディレクトリに置いてある画像を読み込むにはどうしたら良いんですか?

img = getImage(getCodeBase(),"../画像.gif");

と書いて実行しても画像が表示されません。下のディレクトリにある画像の指定は出来るんですが。

56:デフォルトの名無しさん
08/09/05 21:30:01
>>55
Javadoc見ろよボケ

57:デフォルトの名無しさん
08/09/05 21:37:38
while(true){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
System.out.println(str);
br.close();
}

これを動かすと一回入力しただけで終了になってしまいます。
何か分からないのですが、br.close()を削除すると何回もちゃんとループ出来ます。
なんでこれって一回で終わっちゃうのでしょうか?

58:デフォルトの名無しさん
08/09/05 21:41:13
>>57
なんでって馬鹿なコーディングしてるから落ちるんだろ
絶対落としたくないなら例外処理ぐらいしろボケ

59:デフォルトの名無しさん
08/09/05 21:43:35
例外処理はこの外でしてるんですよ。
どこが馬鹿なのかを聞きたいわけでして。

60:デフォルトの名無しさん
08/09/05 21:44:27
>>57
br.close(); で連鎖的にSystem.inもクローズされる。

61:デフォルトの名無しさん
08/09/05 21:45:11
>>59
ループの中で例外処理しなきゃ意味ねーだろボケ

62:デフォルトの名無しさん
08/09/05 21:47:17
>>57
BufferedReader.close()
> ストリームを閉じます。

とありますが、この意味が分からない、と。
何処から説明した方が良いのでしょうね。

63:デフォルトの名無しさん
08/09/05 21:48:07
>>59
BufferedReader 閉じたら
その元になってる InputStreamReader
その元になってる System.in も連鎖的に閉じちゃうからね。

閉じた System.in から read() しようとすると IOException 食らうんだっけか?

64:デフォルトの名無しさん
08/09/05 21:50:08
頭悪すぎ

65:57
08/09/05 21:58:51
なるほど、ありがとうございます。
System.inは常に開かれてるのかと思ってました。
たしかに標準入力じゃなくて他のストリームから毎回開いて読み込むようにすると大丈夫みたいでした。
ちなみに標準入力のストリームって一回閉じちゃうと自分で開くことって出来ないんでしょうか?

66:デフォルトの名無しさん
08/09/05 22:06:16
無理。

67:デフォルトの名無しさん
08/09/05 22:34:40
>>66
そうですか、どうもありがとうございます。

68:デフォルトの名無しさん
08/09/05 23:22:50
いや、できる

69:デフォルトの名無しさん
08/09/05 23:23:40
>>63
実装上EOFExceptionだったりする事もある

70:デフォルトの名無しさん
08/09/05 23:31:41
何?このスレ
System.inを再度開くこともできない無能回答者しかいないの?
ププw

71:デフォルトの名無しさん
08/09/05 23:43:33
>>68
やり方ぷりーず

72:デフォルトの名無しさん
08/09/05 23:47:38
ググレカス

73:デフォルトの名無しさん
08/09/05 23:49:52
>>71
釣られるなって

74:デフォルトの名無しさん
08/09/05 23:58:57
環境変数のJAVA_HOMEを設定していないユーザ環境において、
JDKまたはJREのインストールディレクトリのパスを取得するには
自前でパス検索するしかないのでしょうか?
それともJavaのインストールパスを取得する簡単な方法はありますか?

75:デフォルトの名無しさん
08/09/06 00:09:47
>>74
WindowsでSunのJDK/JREをインストーラ経由で入れてるなら
レジストリ見るとかあるけど、確実でもないし簡単ともいえない

76:デフォルトの名無しさん
08/09/06 00:18:29
>>64
成長しましたね。

77:デフォルトの名無しさん
08/09/06 00:19:40
>>75
レスありがとうございます。書き忘れましたが、Windows環境での話です。
何故このような疑問を持ったかというと、
JNIでC言語からJavaを呼び出すプログラムを実行する際に、
JDK/JREのインストールディレクトリ下にあるjvm.dllを
読み込む必要があるためです。

通常であればJAVA_HOME、PATH、レジストリあたりを見るべきなんでしょうか。
複数のJDK/JREがインストールされていた場合はどうするべきでしょうか?

78:デフォルトの名無しさん
08/09/06 00:26:35
>>77
複数インストールされてる場合は、
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\CurrentVersion
あたりを見るとか、JDK/JRE関連レジストリ全部読み込んで一番バージョンが大きいやつ使うとか。

79:デフォルトの名無しさん
08/09/06 00:34:33
>>78
アプリケーションによって何を使うかは異なるわけですね。
何かサンプルになるものを探してたのですが、
意外と見つからないです。
もう少し考えてみます。

80:デフォルトの名無しさん
08/09/06 01:01:11
java使わないおれがあてかんで回答してやると
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\[バージョン]\RuntimeLib
が正解だろ


81:デフォルトの名無しさん
08/09/06 01:06:51
質問というより相談で申し訳ないのですが、
JAVAでチャットのサーバーサイドを作る場合、大きく分けて2種類あると思います。
1クライアントに1スレッドを作るやり方と、java.nioを使ってクライアント全員を並列処理する方法です。
そこで質問なのですが、大人数が参加するチャット(ルーム機能も付いています)では、
やはりノンブロッキングIOを使うほうがいいのでしょうか?


82:デフォルトの名無しさん
08/09/06 01:27:11
ノンブロッキングもスレッド使うのも、接続増えたら結局は鯖かえなくちゃいかんのじゃないか

83:デフォルトの名無しさん
08/09/06 02:03:27
javaのSetについて質問です

class Address{
public Address(String name, String address) {
this.name = name;
this.address = address;
}
public String toString() {
return "name : " + name + " address : " + address;
}
//getter setterは省略
public String name;
public String address;
}


84:デフォルトの名無しさん
08/09/06 02:04:47
上の続きです
public class Practice{
public static void main(String[] args) {
Set<Address> test = new HashSet<Address>();

test.add(new Address("hiroshi", "tokyo1") );
test.add(new Address("hiroshi", "tokyo2") );
test.add(new Address("hiroshi", "tokyo3") );
test.add(new Address("hiroshi", "tokyo4") );
test.add(new Address("sayoko", "tokyo1") );
test.add(new Address("sayoko", "tokyo3") );

Iterator<Address> iter = test.iterator();
//hiroshiの情報だけ取り出したい
while( iter.hasNext() ){
Address i = iter.next();
if( i.name.equals("hiroshi") ) {
System.out.println( i );
}
}
System.out.println("-------------");
//tokyo1の情報だけ取り出したい
iter = test.iterator();
while( iter.hasNext() ){
Address i = iter.next();
if( i.address.equals("tokyo1") ) {
System.out.println( i );
}
}
}
}

85:デフォルトの名無しさん
08/09/06 02:07:09
上の続きです

SetでAddressクラスのnameをキーとして情報を取り出したり
addressをキーとして情報を取り出したりしたいのですが,
上の実装だとset内の値の数が増えてくるとなんだか効率が悪いような気がします.
他に実装方法はありますでしょうか

86:デフォルトの名無しさん
08/09/06 02:14:45
class うんこ {
  Map name, addr;

  public void add(Addr addr) {
name.add(addr.getName,add);
addr.add(addr.getAddr,add);
}

public Addr getByName(Str name) {
return name.get(name)s;
}
}

これで我慢しとけハゲちゃびん

87:デフォルトの名無しさん
08/09/06 02:46:46
Mapじゃあかんの?

88:デフォルトの名無しさん
08/09/06 03:35:04
java.awtComponentのソース見てたら
setEnabled(boolean)のところで

Component.this.setEnabled(b);

って出てきたんだけど、このthisってどゆ意味?


89:85
08/09/06 03:58:02
>>87
Mapだとkeyの値が一つに限定されてしまいます
あと,valueからkeyを取得することができないです.

90:85
08/09/06 04:07:38
ごめんなさい
valueからkeyはbidimap使えばできますね(標準関数じゃないけど)
>>89 の下一行は無かったことで

keyの値を色々変えてSetの中身を検索したいです

91:デフォルトの名無しさん
08/09/06 04:17:55
>>88
限定this というものらしい。
URLリンク(www.y-adagio.com)

で、そのソースコード、JDK7ですか。

92:デフォルトの名無しさん
08/09/06 04:27:10
>>91
JDK6です。


93:デフォルトの名無しさん
08/09/06 04:28:07
>>90
Index用のMapを作るのはどうでしょう。
Map<String(name), List<Address>>
Map<String(address), List<Address>>

AddressはSetに追加してるから可変ではないと思いますが、
可変の場合は、変更シークエンスをキチンとチェックしてくださいまし。

94:デフォルトの名無しさん
08/09/06 04:30:23
>>91
そのサイト読んでみたけどよく分かんないっす……


95:デフォルトの名無しさん
08/09/06 04:32:11
>>90
とにかく突っ込んどけば簡単に検索できるっていうクラスは無いんじゃないかな。

>>89
keyの値が一つに限定って、"hirosi"→"tokyo1","tokyo2","tokyo3"…なら
Map<String,Set<String>> とか Map<String,List<String>> で表現できるでしょ。
逆もしたかったら "tokyo1"→"hirosi","sayoko" を同じ構造の別の Map に入れとく。
つまり(クラス名はともかく) >>86 みたいな感じってこと。

96:デフォルトの名無しさん
08/09/06 04:39:32
>>88
内部クラスからそれを含むクラスを参照してるってこと。

97:デフォルトの名無しさん
08/09/06 04:52:15
>>88
> Component.this.setEnabled(b);
が書かれているメソッドsetEnabled(boolean)はComponentクラスのメソッドではなく、
その内部クラスのメソッドじゃない? たぶんAccessibleAWTComponentクラス。
クラス名.thisという書き方はQualified thisと呼ばれていて、
URLリンク(java.sun.com)
内部クラスを囲う外側のクラスのthisを明示的に指定することができる。
質問の例では、内部クラスにもComponentクラスにもsetEnabled(boolean)が定義されているので、
内部クラスでthis.setEnabled(b)とか単にsetEnabled(b)と書くと、
内部クラスのsetEnabled(boolean)が呼ばれる。
Componentクラスの方のsetEnabled(boolean)を呼ぶためにそういう書き方をする。

98:デフォルトの名無しさん
08/09/06 08:51:40
htmlにJavaApletを組み込んで、新しいプログラムが動くか動かを実検したいです。
完成したら、皆も使える用にしたいが、<!--(?)の続きはどう書きますか。

99:デフォルトの名無しさん
08/09/06 09:24:12
それはここで回答をもらうより、
ググった方が理解し易いと思われる

一応sunのを貼っておく
URLリンク(sdc.sun.co.jp)

100:デフォルトの名無しさん
08/09/06 09:32:22
その聞きたいアプレットのことは、普通に本とかウェブの解説じゃないか?

101:デフォルトの名無しさん
08/09/06 10:01:51
>>81
その処理が滅茶苦茶リソースを食うなら java.nio で並列処理したほうがいい。
あと通信量がすんげー多いなら並列処理のほうがパフォーマンスが上がる。
このどちらでもないなら、どっち使っても大して変わらない。

102:デフォルトの名無しさん
08/09/06 10:09:17
いや、変わるだろ

103:デフォルトの名無しさん
08/09/06 10:11:59
>>101
プラシーボが期待できる場合も追加で。

104:101
08/09/06 12:00:59
>>102
スレッドの切り替えが重い OS なら変わるな。
で、たとえばどんな場合を想定してる?

>>103
忘れてた。

スレッドのコンテキストスイッチが重いんだろうなという妄想に取り付かれていたり
ほんの少しでも早ければそれで満足なら並列処理で。
プログラムが楽になればそれでいいならスレッドで。

105:デフォルトの名無しさん
08/09/06 13:04:45
両方作って比較して結果書き込んでくれ

106:85
08/09/06 14:59:54
>>93 >>95
了解です
どうもありがとうございました

107:デフォルトの名無しさん
08/09/06 16:52:24
eclipse3.3エウロパを使って開発しています。

そこで、antを使って独自のjarファイルを作成したいのですが、
うまくいきません。

build.xmlとかいうのを作成して、右クリックのantの実行ってやると、
---------------------------------------------------------------
Buildfile: D:\AppData\Eclipse\workspace3.3\Hoge\build.xml
directory:
compile:
[javac] Compiling 1 source file to D:\AppData\Eclipse\workspace3.3\Hoge\Classes

BUILD FAILED
D:\AppData\Eclipse\workspace3.3\Hoge\build.xml:18: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\@Development\Java\jdk1.6.0_03"

Total time: 297 milliseconds
---------------------------------------------------------------
こんな風にエラーになります。

何が原因でしょうか?


108:デフォルトの名無しさん
08/09/06 16:56:35
>>107
>Perhaps JAVA_HOME does not point to the JDK.
>It is currently set to "C:\@Development\Java\jdk1.6.0_03"


109:デフォルトの名無しさん
08/09/06 17:04:27
>>81
一般にスレッドは他の資源よりリソースを消費する。
したがって、大量のスレッドを用いると問題が発生する可能性がある。

ノンブロッキングIOでは、スレッドの数を抑えることができるので、
スケーラビリティに有利となる。つまり、
クライアント数の増加に対する性能の劣化をそれなりに抑えることができる。

一方、ノンブロッキングIOを使うと、処理を振り分けるところを
自前で書かなくてはならないため、プログラミングが複雑になる。

しがたって、最初はクライアント毎にスレッドを使うように書いておいて、
問題が出てきたら NIO を使うようにリファクタリングするのがいいんじゃまいか

とよく知らない俺が書いてみる

110:デフォルトの名無しさん
08/09/06 17:20:20
>>108
そこなんだけど、それって環境変数設定しろってこと?
自分、java_home設定しないでeclipse は動いてるんだけど。
antもいけないのかな?

111:デフォルトの名無しさん
08/09/06 17:25:26
今jcpad使ってるんだけどどうも不便で・・・・
アプレットを簡単に実行できて軽い奴って無いかな

112:デフォルトの名無しさん
08/09/06 17:25:27
>>109
おまえアホだなw
どこがおかしいのか分かんないんだろうけどww

113:デフォルトの名無しさん
08/09/06 17:27:49
>>81
2004年の記事

Servlet APIとNIO: ついにServlet APIとNIOが結合できる
URLリンク(www.ibm.com)

114:デフォルトの名無しさん
08/09/06 17:35:14
>>110
eclipse や ant が動いているのは、JREで実行しているのでは?
また、eclipseでのコンパイルは、eclipseに入っているIBMのコンパイラが
やっているので、環境設定は関係ない。と思う

115:デフォルトの名無しさん
08/09/06 17:36:02
appletviewer

116:デフォルトの名無しさん
08/09/06 17:43:37
antは腐ってるからな。
Java自体腐ってるけど。
Development\Java\jdk1.6.0_03\lib\tools.jarを
Development\Java\jdk1.6.0_03\jre\lib\ext\tools.jarに
こぴってやってみ。

117:デフォルトの名無しさん
08/09/06 17:51:16
jdk1.6.0_03をつかってるお前の脳みその方こそ腐ってないか?

118:デフォルトの名無しさん
08/09/06 19:29:48
>>117
それじゃだめなの?自分もそれが入ってた。

>>116
ちょっとやってみる

119:デフォルトの名無しさん
08/09/06 19:32:19
>>114
そうだったんだw
javaインストールしないでeclipseだけで動くからふしぎだったんだw

>>116
あと、やっぱりtools.jarが自分の中には入ってないや。
どっかのサイトにもそれをパスに通すとかって書いてあった。


120:デフォルトの名無しさん
08/09/06 20:15:39
マジレスすると、そんなもんを ext の下に入れるな

121:デフォルトの名無しさん
08/09/06 20:32:15
>>110
eclipse の Java 設定で、JRE じゃなくて JDK を使うように設定してみたら?
[ウィンドウ]→[Java]→[インストール済みのJRE] で JDK のパスを設定。

122:デフォルトの名無しさん
08/09/06 22:42:54
自作のJavaプログラムをWindowsのスタートアップにEXEファイルとして
登録して実行させたいのですが、どうすればよいでしょうか?

ちなみにバッチファイルにjava ~と記載して実行させる事はできました。

123:デフォルトの名無しさん
08/09/06 22:46:14
じゃあバッチをキックするexeを作ればいいんじゃね?
つかスタートアップにバッチファイルを登録しておくのは何でダメなの?

124:デフォルトの名無しさん
08/09/06 22:48:11
>>110
んー、そこにすでに書かれているのよ。


125:デフォルトの名無しさん
08/09/06 22:51:48
>>123
ただ単にEXEファイルからJavaのプログラムが呼び出せないかなと
思っただけです。もちろんバッチで事足りてますが…。

126:デフォルトの名無しさん
08/09/06 22:53:34
コマンドを実行するだけなら、わざわざバッチファイルにせんでも、ショートカットに記述するだけで十分だと思うが。

127:デフォルトの名無しさん
08/09/06 23:00:57
>>126
もちろんそれでも実行できますね…。

128:デフォルトの名無しさん
08/09/07 00:04:53
javaをexeにするって馬鹿の考えそうなことだな

129:デフォルトの名無しさん
08/09/07 00:20:46
>>128
そういうやり方あるの知らないの?

130:デフォルトの名無しさん
08/09/07 00:22:54
サービスに出来るとかいう機能もあるやつ、なんだっけな~

131:デフォルトの名無しさん
08/09/07 03:14:36
やり方も何もexeにする必要性あるのか?

132:デフォルトの名無しさん
08/09/07 03:25:57
exeにするとネイティブだから速くなるとか

133:デフォルトの名無しさん
08/09/07 03:34:10
GCJだと、大して変わらんね
まあ起動時間は短縮されるだろうけど
URLリンク(www.shudo.net)

134:デフォルトの名無しさん
08/09/07 03:42:58
以前にチャットの質問をしたものです。どちらも作ってみろトのことで、ノンブロッキングIOでのサーバーを作っているのですが
クライアント側で
String message
socket.getOutputStream().write(message.getBytes());
で文字列を送り、サーバー側で
private void doRead(SocketChannel channel) {
try {
ByteBuffer buf = ByteBuffer.allocate(BUF_SIZE);
if (channel.read(buf) > 0) {
buf.flip();

byte[] bytes = new byte[buf.limit()];
buf.get(bytes);
String line = new String(bytes, 0, buf.limit(), "UTF-8");
System.out.println(line);
}}}
とやると、おくった文字が、ひらがなや漢字の場合に文字が??にかわってしまいます。
bytesをStringに戻すにはどうしたらいいでしょう。。。

135:デフォルトの名無しさん
08/09/07 03:44:43
すいません。
BUF_SIZEは
int BUF_SIZE=1024;
です

136:デフォルトの名無しさん
08/09/07 03:55:12
UTF-8が悪かったみたいです。
くだらない質問すいませんでした。解決しましたor2


137:デフォルトの名無しさん
08/09/07 04:17:54
相変わらず糞スレだな


138:デフォルトの名無しさん
08/09/07 05:28:02
>>137
初心者歓迎のスレならこんなもんだろ。
輝くような質問とレスの応酬になったらキモいだろ。

139:デフォルトの名無しさん
08/09/07 05:39:08
>>138
君がその「糞の塊」なんじゃないの?

140:デフォルトの名無しさん
08/09/07 07:02:30
>>122
exewrap

141:138
08/09/07 10:39:12
>>139
だな。
末尾が「だろ」で両方終わってるし、低脳だよな。
よし逝ってくる。

142:デフォルトの名無しさん
08/09/07 11:01:10
exeにするなんてJavaの思想に反してるじゃん


143:デフォルトの名無しさん
08/09/07 11:05:20
>>142
糞は黙ってろ

144:デフォルトの名無しさん
08/09/07 11:14:24
ぬるぽ
ぬるぽ
ぬるぽ

145:デフォルトの名無しさん
08/09/07 11:17:49
>>142
Javaの思想とかおまえが偉そうに語らなくていいから、糞は黙ってろ

146:デフォルトの名無しさん
08/09/07 11:20:44
exeにしようなんてセンス無さ過ぎて笑うに笑えない

147:デフォルトの名無しさん
08/09/07 11:26:23
>>146
糞は黙ってろ 

148:デフォルトの名無しさん
08/09/07 11:32:06
>>142
Javaの思想を語ってもらえませんか?少しでいいんでお願いします!

149:デフォルトの名無しさん
08/09/07 11:40:01
Write once, Run anywhere

150:デフォルトの名無しさん
08/09/07 12:37:59
糞スレ街道まっしぐら!

151:デフォルトの名無しさん
08/09/07 14:32:42
糞連発してる奴は >>149 の発言で
言い返せなくて涙目www

152:デフォルトの名無しさん
08/09/07 15:08:59
Javaクラスファイルの難読化ソフトであるDonQuixote URLリンク(donquixote.cafebabe.jp)
を使っている人いますか?
Solaris10 for x86(5/08)上で使おうとしているのですが,BCELをとってきて
CLASSPATH=/PATH/TO/bcel-5.2.jar:... のように設定しても
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/bcel/util/Repository
Caused by: java.lang.ClassNotFoundException: org.apache.bcel.util.Repository
というエラーメッセージが出ます どのようにすれば動くのでしょうか?

153:デフォルトの名無しさん
08/09/07 16:06:05
>>151
いいかげんにおまえが糞ってことに気がついたらどうよ?

154:デフォルトの名無しさん
08/09/07 17:09:22
JSAPIの実装にFreeTTSがありますが、
日本語に対応したオープンソースのJava APIってありますでしょうか?
nativeライブラリだと見つかるので、JavaAPIがないようならJNI使って呼び出すか、
外部プロセス起動で実行させるかしかないですよね・・・


155:デフォルトの名無しさん
08/09/07 18:17:13
exeなんて古生代の形式に戻す必要あるのか

156:デフォルトの名無しさん
08/09/07 18:22:04
Javaのプログラムをjarファイルにしても
解凍ソフトでjarを解凍してクラスが抽出できるから
Jadとか使って逆コンパイルすると
ソースを見られてしまうのですが
これを防ぐ方法はありますか?


157:デフォルトの名無しさん
08/09/07 18:23:14
難読化でぐぐれ

158:デフォルトの名無しさん
08/09/07 18:23:23
javaを使用しない

159:デフォルトの名無しさん
08/09/07 18:23:46
難読化はできるが完全に読めなくすることは不可能
てか、ソースを見られてなにか困るのか?
どんなプログラムでも基本的に解析しようとすれば解析できる
少なくともコンピュータには理解できるわけだからな

160:デフォルトの名無しさん
08/09/07 18:25:01
完全に読めなくすることは可能

161:デフォルトの名無しさん
08/09/07 18:26:16
>>156
逆コンパイルする気にさえならないようなソフトは無敵

162:デフォルトの名無しさん
08/09/07 18:26:26
実行もできなくなるけどな

163:デフォルトの名無しさん
08/09/07 18:29:11
Javaのソースコードに暗号化をかけることはできますか

164:デフォルトの名無しさん
08/09/07 18:30:11
>>163
>>162

暗号化でなく署名なら出来る


165:デフォルトの名無しさん
08/09/07 18:41:46
>>163
古生代の暗号なら出来るんじゃねーの?

166:デフォルトの名無しさん
08/09/07 18:49:20
>>155
いつもスルーされて淋しいよな…

167:デフォルトの名無しさん
08/09/07 19:26:06
めちゃくちゃソースを分かり難く書いて、
解析する時間が無駄と思わせるようなソースにすればいいんじゃない?
部分的に流用可能なソースも難しいように、スパゲティ構造にしてw

難読化ソフトって使ったことないのだが、上記のようなソースに変換してくれるものとは違うのかな?

168:152
08/09/07 20:07:31
難読化ソフトの話題は多分 >>152 に端を発したということでどなたか私めにお答えを...

作者様のBLOG URLリンク(www.oikaze.jp) を見ると
「・DonQuixote 3.0 Java バイトコード操作フレームワークとして,DonQuixote 3.0 を公開しました.」
とあるのですが,パスワードがかかっていていただくことができません.
DonQuixote1.0を最新のJDK1.6.0-07に使っているのが悪いのでしょうか?
>>152 のエラーメッセージは信用できるように思えるのですが
maven2 を使ったのが初めてなので何か設定が足りないのかもしれません

なお URLリンク(proguard.sourceforge.net) の Alternatives にリンクが張られている
フリーの処理形をすべて試してみましたが期待通り動くものはほとんどありませんでした
他に良い難読化ソフトがありましたらお教えくださいませませ

169:デフォルトの名無しさん
08/09/07 20:27:00
解読しても価値のないプログラムを書けばOK

170:デフォルトの名無しさん
08/09/07 20:29:32
【コミュニティーサイト作成有志募集!】

現在コミュニティーサイトGaccoで有志を募集しています。
詳しい概要等は
URLリンク(www36.atwiki.jp)
こちらをご覧下さい。

・プログラミングができる方
(現在技術陣は6名です)
・ウェブデザイン・画像編集能力がある方
(現在デザイン陣は2名です)
・宣伝能力のある方
(人員募集やサイト完成後の宣伝等。動画編集ができると○。)

を募集しています。
気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。

スレッド:URLリンク(ex14.vip2ch.com)

171:デフォルトの名無しさん
08/09/07 21:08:52
難読化?HSPで書いたら完ぺきだな。
自分でも読む気失せるぞあれは。

172:デフォルトの名無しさん
08/09/07 21:22:12
言語がJavaでなくていいなら、intercalかAPLが最強で最凶で最狂でしょ。

173:デフォルトの名無しさん
08/09/07 21:35:44
バイナリエディタでマシン語じか打ちだろ。
ソースコード?存在しません。

174:デフォルトの名無しさん
08/09/07 21:50:01
逆アセンブルでソースになっちゃう

175:デフォルトの名無しさん
08/09/08 00:36:37
それは目的と手段を間違えている

176:デフォルトの名無しさん
08/09/08 01:12:45
UbuntuでJavaできないんですけど。。。
ちなみに8.04です

177:デフォルトの名無しさん
08/09/08 01:40:29
int []a=new int[5];
a[ZERO]=0:
a[ONE]=1;

こんな感じで配列を定数で置き換えたいときってどういう方法がメジャでしょうか?
interface NUM{int ZERO=0;int ONE=1;…}
class Hoge implements NUM{}

class Hoge{
private final int ZERO=0;
private final int ONE=1;
…}

enum NUM{ZERO,ONE,…}

int []a=new int[5];
a[NUM.ZERO.ordinal()]=7;


列挙で扱いたい気がするけれど、javaの場合整数値と直接結びつかないから
ordinalを呼ばないといけないし、理由は忘れましたがordinalを使うようなやり方は
止めるべきという話を以前見聞きした気がします。

178:デフォルトの名無しさん
08/09/08 03:03:20
なんでそんなことしたいの??


179:デフォルトの名無しさん
08/09/08 04:10:47
良く分からんが、とりあえず、EnumMap

180:デフォルトの名無しさん
08/09/08 06:08:38
普通に
final int ZEEL=-1;

181:デフォルトの名無しさん
08/09/08 06:35:01
>>176
Synaptic で JRE 入れれば動くはず。
あとは gcj とかぶってないか確認しろ。

182:デフォルトの名無しさん
08/09/08 11:55:39
>>177
ZEROでa[0]にアクセス、ONEでa[1]にアクセス、…てことなら、
配列そのものをクラスに包んでアクセサ作るのが言語的に”メジャ”っぽいと思う。
class Foo {
enum Num { ZERO, ONE, … };
private int[] a = new int[~];
int get(Num num) {
switch(num) {
case ZERO: return a[0];
case ONE: return a[1];
:
}}
void set(Num num, int value) {
switch(num) {
case ZERO: a[0]=value;
case ONE: a[1]=value;
:
}}}

183:デフォルトの名無しさん
08/09/08 15:04:00
なんでスイッチ…


184:182
08/09/08 16:36:16
すまん、EnumMap使ったことないもんだから。
こう?
class Foo {
enum Num { ZERO, ONE, … };
private Map<Num,Integer> a = new EnumMap<Num,Integer>(Num.class);
int get(Num num) { return (a.containsKey(num) ? a.get(num) : 0); }
void set(Num num, int value) { a.put(num, value); }
}

185:デフォルトの名無しさん
08/09/08 17:11:39
効率悪い

186:167
08/09/08 17:35:46
enum Mum
{
ZERO
{
public int getValue()
{
return 0;
}
}
,
ONE
{
public int getValue()
{
return 1;
}
}
,
;

public abstract int getValue();
}


187:186
08/09/08 17:36:37
ごめそ167というのは間違い。

188:デフォルトの名無しさん
08/09/08 17:53:16
>>185
効率を心配するほどのもの?

189:デフォルトの名無しさん
08/09/08 17:54:07
URLリンク(www.atmarkit.co.jp)
ここ見て勉強しているのですけど、
メモリを使用するタイミングはどのタイミングなのでしょうか?
変数やメソッドの呼び出しなどがあったときにメモリを消費しているのか、
それとも変数やメソッドを呼ばなくても、定義してるだけで消費するのか。
どちらなのでしょう?
後者なら継承を繰り返すたびにメモリ使用量の多いプログラムになると思うので、
前者だとは思うのですが。

190:デフォルトの名無しさん
08/09/08 18:40:44
なんで素人がやたらメモリとか気にするわけ?


191:デフォルトの名無しさん
08/09/08 18:47:36
参照してる記事がメモリうんぬんと書いてるから、気になったんだろうな。
全く気にしないのも問題だが、それで勉強してるレベルなら、まだ早いよ。

192:デフォルトの名無しさん
08/09/08 18:50:08
>>190
素人だからこそ気にするべきなんだろ
そんなのもわからない阿呆はやめちまえ

193:デフォルトの名無しさん
08/09/08 18:52:44
メモリもそうだけど、配列アクセスの方がCPUに大きく影響するよ。
あまり記事になってないけど、arr[k]は範囲チェックが必ず入るから、arr[k]を一回アクセスするだけで、
JVM内では(隠れて) if (0<=k && k<arr.length) が呼び出されてる。

だからメモリを気にしながら設計するのも大事だけど、byte[1000*32]とか良く作るんだし、配列アクセスの方を気にしたほうがいいよ。

194:デフォルトの名無しさん
08/09/08 18:56:34
メモリの方は、PCだけの人は気にならないんだろうけど、携帯とかアプレットとかあるし。
アプレットはまだ携帯とか小型端末じゃみれないけど、そういう小型機器はメモリが極小64kbとかだから、
メモリの方も気にしなければいけない。

195:デフォルトの名無しさん
08/09/08 18:58:28
性能に頼ってプログラミングしている気でいる現代の若者を見てると
おじさん悲しくなってくるよ

196:189
08/09/08 19:01:45
みなさんレスありがとうございます。
それで結局のところどちらなのでしょう・・?
おかしな質問だとは自覚しているのですが、気になって仕方がありません。
どうかよろしくお願いします。

>>193
配列って使うんですか?
コレクションフレームワークのほうが高機能なので配列よりそちらを使うようなことを書いてましたが。

197:デフォルトの名無しさん
08/09/08 19:12:53
素人が気にし出すとろくなことにならんよ
ちゃんと理解出来ないんだから勘違いの嵐

198:デフォルトの名無しさん
08/09/08 19:15:53
>>196
変数やメソッドの種類と、JVMによる。

199:189
08/09/08 19:37:23
>>197
そうは言いますが、素人向けの説明でメモリの話が出てきてるのだから、
やはり重要だと思うのですが・・・
たとえ今は理解できないとしても、ステップとして踏んでおくべきだというのが私の考えです。
書籍やWebからの情報でも、100%ちゃんとした説明できる人のほうが少ないと思うので、
勘違いがあるのは当然だと思います。
そういうのは後々間違いに気づいていくので、
はじめの段階では特に問題視する必要はないと思います。

お答えいただけないようなので別のとこで質問しなおしたいと思います。
というわけで質問しめます。

200:デフォルトの名無しさん
08/09/08 19:43:46
配列はね、CharBufferとかでよく使うよ。
素人向けの解説だとStringBuilderとかなのかもしれないけど…
初心者の壁を越えられるかどうかは、java.nioの解説やAPIを熟読して理解できたかどうかだろうけど、ネイティブのファイル・アクセスとメモリ(ポインタなど)は難しいからな…

201:デフォルトの名無しさん
08/09/08 19:47:18
>お答えいただけないようなので別のとこで質問しなおしたいと思います。 

こういうのは生意気だし、「ばくちゃん、まだ身の程をわかってません!」って感じww

202:189
08/09/08 19:50:30
>>200
ありがとうございます。
あとでそのクラスを調べてみます。

>>201
私は自分のことを客観的に見ることができるんです。
あなたとは違うんです。

203:デフォルトの名無しさん
08/09/08 20:00:03
なんだ釣りか

204:デフォルトの名無しさん
08/09/08 20:01:09
スレに張り付いてまでいちいち煽るくらいなら
少しのヒントを出すぐらいすれば
まだ自分の優位性をアピールできるだろうに。
気持ち悪いやつだ

205:189
08/09/08 20:17:22
>>203
ちょっと生意気な閉め方したら食いついてくる人がいると思って、
最近はやりだったから言ってみたかったんです。すみません。
変な質問だとは自覚してましたが、本当に聞きたかったことなので、
またで直します。

206:デフォルトの名無しさん
08/09/08 20:33:24
質問をお願いします.

java.awt.event.KeyEvent
を使用してキーの同時押しを持ってきたいのですが、
スペース 押下時に、 上 と 左 の同時押し(結果的に3つ)
を取ろうとすると、 KeyEvent.VK_UP と KeyEvent.VK_LEFT が帰ってきません。

順番を逆にし、上左押下時のスペースは持ってこれます。

他の組み合わせ(スペース + 上右、下左、下右)はどれも正常に動作します。


KeyEventについて詳しくないのですが、これはどういうことなのでしょうか?

207:デフォルトの名無しさん
08/09/08 20:38:38
コーディングが悪いんでないの?
if文の順番が変とか。
ソース晒してみ

208:206
08/09/08 20:39:22
すみません訂正です

>順番を逆にし、上左押下時のスペースは持ってこれます。
これも KeyEvent.VK_SPACE がもってこれません

209:デフォルトの名無しさん
08/09/08 20:39:24
>>206
スレリンク(tech板:640番)

210:206
08/09/08 20:51:54
>>209
なるほど、ありがとうございました。
スレ違ったようですみません

>>207
おかげさまで原因がわかりました
ありがとうございました。

211:デフォルトの名無しさん
08/09/08 20:57:03
>>205
ここにはもう来ないで欲しい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch