【初心者】Java質問・相談スレッド118【歓迎】at TECH
 【初心者】Java質問・相談スレッド118【歓迎】 - 暇つぶし2ch753:デフォルトの名無しさん
08/08/30 15:32:44
JScrollPaneのJTableについて質問です。

例えば、あるボタンを押したらJScrollPaneがJTableの1行分だけ
下または上にスクロールする、というようなことは可能でしょうか。

JTable内で選択されている行を、そのボタンを押せば自動的に
ひとつ次or前の行に選択を移動させるようにしようと考えているのですが、
ScrollPaneに表示されている行内の終わりからボタンでさらに選択を奥に移動させると、
選択行は変わりますが、スクロールはしてくれないので、どうしたものかと悩んでいます。

754:デフォルトの名無しさん
08/08/30 15:42:13
>>752
> KeyTypedの中でgetKeyCharを使って入力をコンソールに表示しようとしても0としか表示されません。
のgetKeyCharはgetKeyCodeの書き間違い?
なら、
> KEY_TYPED イベントの場合、keyCode は VK_UNDEFINED
なのでVK_UNDEFINED(=0)が返る。
矢印キーなどのキーコードが取りたければ、
keyTypedでなくkeyPressedやkeyReleasedでイベントを捕まえる。

755:752
08/08/30 15:50:11
>>754
その通りCharじゃなくてCodeでした。

756:デフォルトの名無しさん
08/08/30 16:12:37
>>753
これは使えないかな?
URLリンク(java-house.jp)

757:デフォルトの名無しさん
08/08/30 16:58:51
String str = "ABCDE";
という文字列があって、この文字列を逆にして表示させたいです。
最終的に、System.out.println(str); で、画面には
EDCBA と表示させたいです。
文字列を引数にとって、それを反転して返すメソッドがあるのは
分かったのですが、そういうのを使わないで、配列やforをうまく使って
自力で反転させたいのです。
charAt(int index)やfor辺りで試行錯誤したのですが、どうも辿り着きません。
方法を教えてもらえませんでしょうか?

758:デフォルトの名無しさん
08/08/30 17:03:41
>>757
無駄なコードを書くことに、うまい方法なんて無いのでは?

759:デフォルトの名無しさん
08/08/30 17:06:24
>>749
>>750
>>751
ぬるぽ
ぬるぽ
ぬるぽ
ぬるぽ


760:デフォルトの名無しさん
08/08/30 17:06:38
>745
申し訳ありません。724 や 748 の話を良く聞いてください。
お詫びに、関係しそうな記事を置いていきます。

Javaの理論と実践: Generics、了解!
URLリンク(www.ibm.com)


761:デフォルトの名無しさん
08/08/30 17:13:23
>>756
どうもありがとうございます。その先に記述されているのをヒントとして、
ほぼ完成というところまでたどり着けました。
ただ、スクロールバーの▼・▲のボタンや、バーで移動させた際に、
その移動をさせたことを検出させて、かつ移動した距離を知りたいのですが、
どうにか知る術はないものでしょうか?たびたびすいません。

762:デフォルトの名無しさん
08/08/30 17:17:03
>757
Stringオブジェクトは、作成後、状態を変更できません。
ということは、反転した Stringオブジェクトを作成する時点で、
既に反転した状態を持つ「何か」を用意する必要があります。

「何か」は、char配列でも良いですが、単に追加するだけなら
java.lang.StringBuilder/Buffer が良いと思います。

763:デフォルトの名無しさん
08/08/30 17:19:30
URLリンク(www.apple.com)

このページの最上部のメニューバーみたいなのをウェブサイトに実装したいのでですが
何かオススメのスクリプトありませんか?

カテゴリ(ジャンル)が20個ぐらいありそれを1つのページに表示させたいです。



764:デフォルトの名無しさん
08/08/30 17:57:51
相変わらずひねくれてる奴多いな。
>>757はそりゃアルゴリズムの問題でjavaとはあまり関係ないない。

str2=new StringBuffer().append(str).reverse().toString();

これがjava流。良くAPIを読むとサロゲートはreverseしないとかがまたいい!

765:757
08/08/30 18:13:46
>>758
確かにうまくはないですね、言い方が悪くてすいません。
ただ、専用のメソッドを使うより、他のやり方を考えたら
プログラムの理解度も高まるかなーと思いまして。まだ初心者なんです。
>>762
配列を反転する方法がわからなかったので、
結局配列もStringBuilder/Bufferも使わないアナログなやり方で完成しました(´・ω・`)
ありがとうございます。
>>764
ひねくれものですかね?ヽ(´ー`)ノ

766:デフォルトの名無しさん
08/08/30 18:46:46
>>765
理解したいなら、reverseのソース読むべきじゃね?

767:デフォルトの名無しさん
08/08/30 18:53:12 BE:511027586-2BP(5957)
ボタンを押すと定められた波形・音程で音が鳴る、という簡単なアプレットをMac OS X上で作りました。
当然Mac上では問題なく動くのですが、Windowsではうまく動きません。
音意外の部分は問題ない挙動なのですが、どうにも音だけが出ません。(サンプルレート8000、ビットレート16、モノラル)
Javaのバージョンも最新です。
何か心当たりのある方、教えて頂けると助かります。お願いします。

768:デフォルトの名無しさん
08/08/30 19:15:02
テーブルで常に一行だけしか選択できないようにする方法ってあります?


769:デフォルトの名無しさん
08/08/30 19:32:00
>>702
じゃあ、これから正直になりますので、友達になってください。

770:デフォルトの名無しさん
08/08/30 19:45:00
>>768
APIドキュメント見てもいないのか?
JTable#setSelectionMode 辺りを探れ

771:デフォルトの名無しさん
08/08/30 19:49:13
>>765
どんな方法にしろ、目的を達成するプログラムが書けたのならOKだ。
後は 766 の言うように他の同じことをするプログラムを見て、違いを観察するんだ。
自分で書き、他人のを読み、違いを吸収して次に生かせばいい。

772:デフォルトの名無しさん
08/08/30 20:29:55
>>761
AdjustmentListenerは?
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){
int oldValue = 0;
public void adjustmentValueChanged(AdjustmentEvent e){
if(e.getValueIsAdjusting()) return;
System.out.println("Adjusted: " + (oldValue - e.getValue()));
oldValue = e.getValue();
}
});
とかで

773:デフォルトの名無しさん
08/08/30 21:00:41
java初心者です。お聞きしたいことがあります。
javaからPHPにバイナリデータを渡したいのですがデータの中に0x00が
含まれていると2byteの0x5c,0x30に置き換わってしまいます。
どなたかご教授おねがいします。

String postParams = "p1=";
byte[] byteBuf new byte[1024];
OutputStream oStream = null;
:
con = (HttpConnection)Connector.open("URLリンク(localhost)", Connector.READ_WRITE, true);
con.setRequestMethod(HttpConnection.POST);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

oStream = con.openOutputStream();
oStream.write(postParams.getBytes());
oStream.write(byteBuf); //←ここのDATAに0x00が含まれていると
oStream.close();

con.connect();
:

774:デフォルトの名無しさん
08/08/30 22:45:54
>>773
>byte[] byteBuf new byte[1024];
コンパイル通ってるコード?
byteBufに実際は何を入れてるのか。

775:デフォルトの名無しさん
08/08/30 22:54:34
HTTP POST でベタにバイナリなんて送れたっけ?

776:デフォルトの名無しさん
08/08/30 23:00:20
JTableでアクティブな行は青色になりますよよね?
それに加えて行の中でクリックしたセルだけ青い囲みがかかるんですけど
このセルの囲いをなくすことってどうやったらできるんでしょうか?
検索してもちょっとわからないので、、、ご教授ください。

777:デフォルトの名無しさん
08/08/30 23:02:31
>>772
おお、ありがとうございますm(_ _)m
無事にできました。

778:デフォルトの名無しさん
08/08/30 23:12:07
>>776
setCellSelectionEnabled(boolean)とかなかったっけ?

779:デフォルトの名無しさん
08/08/30 23:16:39
>774,775さん

上記例では部分抜き出しで書きましたがコンパイルは通ってます。
データは仮に
[0xff,0x10,0x00,0xff]だとしたらPHPで受け取って
そのまま送り返して調べた結果では、
[0xff,0x10,0x5c,0x30,0xff]となってます。
画像データなども送りたいと考えているのですが。

宜しくお願いします。


780:デフォルトの名無しさん
08/08/30 23:55:40
データの持ち方について質問です。
プリミティブ型はスタックにデータを持ってて、ヒープ領域は使わないと認識してますが合ってますでしょうか。
それと、プリミティブ型の配列はヒープ領域を使ってて、要素0のデータへのアドレスをスタックに格納して、ヒープ領域では連続した領域に格納されているという認識で合ってますでしょうか。
あと、オブジェクト型の配列でも同様に、ヒープ領域では連続した領域に保持されているのでしょうか?

781:デフォルトの名無しさん
08/08/31 00:04:13
>>778
うーむ、それだとセルのみ選択したときに色がつくようになっちゃうんですよね・・・。
逆のことをしたいんですが、何かないでしょうかね。

782:デフォルトの名無しさん
08/08/31 00:11:39
>>779
>byte[] byteBuf new byte[1024];
なんて、コンパイル通る訳無いだろ。
コンパイルも通らないコードなんか載せられても何も答えられんわ

783:デフォルトの名無しさん
08/08/31 02:01:47
>>780
jvm.dllの実装上の問題です。普通はそのように実装するんですけど、あなたにピッタシのAPIはByteBuffer.allocateDirectですかね。

784:デフォルトの名無しさん
08/08/31 02:42:37
>>782さん

あああ!、申し訳ないです。'='←書くの抜けてました。
プログラム上ではちゃんと書いてます><

byte[] byteBuf = new byte[1024];
何度もすみません。

785:デフォルトの名無しさん
08/08/31 03:11:15
>>779
コード 0x00 (NUL) が 0x5C 0x30 (\0) に変換される、と。

773 では、Content-Type に application/x-www-form-urlencoded を指定しています。
この指定自体は、form を送信する際の一般的な設定だと思います。

しかし、この指定によって、クライアントかサーバか、どちらか分かりませんが、
変換が行われてると、私は思います。

つ【パケットキャプチャ】かな?

786:デフォルトの名無しさん
08/08/31 03:33:00
>>781
TableCellRenderer を見れ。

787:デフォルトの名無しさん
08/08/31 03:40:28
>>779
>そのまま送り返して調べた結果では、

PHP が受け取ったモノをチェックしろよ。
送り返して調べたって、送り返す時にヘマしてたら分かんなくなるだろ。

788:デフォルトの名無しさん
08/08/31 10:26:08
URLリンク(www12.plala.or.jp)
これの真ん中あたりにあるアプレット動く?
うちのXPだとIEでもFirefoxでも動かん。

789:デフォルトの名無しさん
08/08/31 11:31:32
x-www-form-urlencodedの意味を考えろってことで。


790:デフォルトの名無しさん
08/08/31 11:34:44
>785,787さん
PHP側では
<?php
$p1 = isset($_REQUEST['p1']) ? $_REQUEST['p1']: '';
$p2 = isset($_REQUEST['p2']) ? $_REQUEST['p2']: '';
if ( $p1 ){
echo ($p1);
}
?>
としているのですが。

PHP側でも調べてみます。

791:デフォルトの名無しさん
08/08/31 11:43:07
>>773
お前の書いたsetRequestMethodとsetRequestPropertyを一万回読み返せ
BASE64でエンコード/デコードするか、URLにエンコードするか、
Content-Typeをimage/jpegにするか、バラバラすぎる。
あと受け側がどう処理するかによって異なる。

792:デフォルトの名無しさん
08/08/31 13:31:24
酷い流れデツネ

793:717
08/08/31 15:31:20
>>747 >>748
すんません。
実際に返されるインスタンスの型が問題であって
返り値の型をBaseクラスにしても全然解決になってないですね。
質問に答えてくださった先輩方ありがとう。

794:デフォルトの名無しさん
08/08/31 15:39:43
JPanel上でImageIOつかいたい
どうしたら良い?

795:デフォルトの名無しさん
08/08/31 16:04:53
というかHTTPすらろくに理解してないんじゃないのか?
x-www-form-urlencodedでバイナリ送るとか吹いたぞw

796:デフォルトの名無しさん
08/08/31 16:13:39
ホームページのフォームからJava servletでMySQLに複数の名前と番号のセットを
入力したいのですが参考になるホームページが見つかりません。
参考になるサイトやブログを教えていただけないでしょうか。

797:デフォルトの名無しさん
08/08/31 16:38:00
795のように書けばあたかも知ってるように見えるが大概は知らない場合が多い

798:デフォルトの名無しさん
08/08/31 16:55:19
コンソールで入力した文字列から、特定の文字が何文字含まれているか
表示するプログラムを作りたいのですが(例えば「javaprogram」と入力したら
「aは3個含まれています」と表示されるような感じです。
どうすればできるでしょうか?相当考えたのですが…
何の構文やメソッドを使うのか…どうかヒントをば…

799:デフォルトの名無しさん
08/08/31 17:00:25
>>798

ヒント:配列

800:デフォルトの名無しさん
08/08/31 17:13:04
String#indexOf

801:デフォルトの名無しさん
08/08/31 17:41:51
>>794
BufferedImage と ImageIcon の合わせ技。

802:デフォルトの名無しさん
08/08/31 17:44:52
BufferedImage bi = jPanel1.getComponent(0).getGraphicsConfiguration()
.createCompatibleImage(10,10);
これでいいのかな

803:デフォルトの名無しさん
08/08/31 17:48:50
>>796
1個のデータは登録できるのか?
できてないなら、無理すんな。
まずは単一で考えなよ

804:デフォルトの名無しさん
08/08/31 17:50:12
>>798
・char[] にしてまわす
・StrigBufferにしてまわす
どちらでも好きな方を


805:デフォルトの名無しさん
08/08/31 18:54:53
または、特定の文字をすべて削除した文字列を作って長さを比べる
自分も質問なんだけど、テキストエリアの後ろに画像を入れるにはどうしたら良いのかな。

806:デフォルトの名無しさん
08/08/31 18:59:19
正確にはJScrollPaneだった・・

807:デフォルトの名無しさん
08/08/31 18:59:44
HTMLDocument使うとか、画像に対応したDocumentとViewを作ればいいんでない?

808:デフォルトの名無しさん
08/08/31 19:00:48
ん?やりたいことがいまいち分からない・・
背景に画像?
JScrollPaneのViewportに画像描画してJTextAreaを透明にってこと?

809:デフォルトの名無しさん
08/08/31 19:27:46
>>786
すんません、調べてみたんですがどうしてもわからない・・・
CellRendererの中にクリックでアクティブになったセルに関する設定項目が見つからないっす。
説明が下手なんですが、わかりやすく言うと、クリックされたセルのある行は薄青になりますよね?
それとは別に、その薄青の行の中でクリックしたセルだけボーダーラインが太くなりますよね。
あの太いボーダラインをなくしたいんです。

setRowSelectionIntervalを利用すると行が薄青になるだけなので、テーブルのMouseListenerに

1 int rowIndex = jTable.getSelectedRow();
2 jTable.removeRowSelectionInterval(rowIndex, rowIndex);
3 jTable.setRowSelectionInterval(rowIndex, rowIndex);

とやってみたのですが、これだと2の部分では薄青だけ消えて、太いボーダーラインが残ってしまいます。
どうすりゃ消えるんでしょうか、、、

810:デフォルトの名無しさん
08/08/31 19:48:48
>>
vewportでやってみたのですが、イメージがやけに暗く表示されてしまいました。
バッファしてる間に暗くなるとかあるのかな・・・

811:デフォルトの名無しさん
08/08/31 19:56:39
ないない。
もうちょっと詳細を教えてくれないと何とも言えないよ

812:デフォルトの名無しさん
08/08/31 20:00:09
すいません。
出かけ先にいるので帰って見直してみます。
ありがとうございました。

813:796
08/08/31 20:12:47
>>803
単一では出来ます。
URLリンク(www.atmarkit.co.jp)
を参考にコンパイル、MySQLの設定及びデータベースとテーブルも設定しております。
問題は、同じようなデータがありそれを複数同時に入力できないところです。

814:デフォルトの名無しさん
08/08/31 20:21:40
>>813
最大10件とかならば、name-1, value-1 のように固定でHTMLに埋めてしまえ
完全可変にするならば、動的にJavaScriptでinputを作っていけばいい

815:デフォルトの名無しさん
08/08/31 20:23:18
>>805
Swingの話かHTMLの話か解らない
SwingだったらTextAreaとLabelを配置したパネルを作って、それを配置する方が楽だし、再利用しやすい形になると思う

816:796
08/08/31 20:52:25
>>814
すみません説明不足がありました。
仰るとおりHTMLのフォームはname[1],name[2]...のようにフォームに番号を付けています。
servletの方ではこれをループでMySQLに入力するようにしています。
また、名前(漢字)と数字なので先にループで配列に入力するといった方法も出来ませんでした。
JavaScriptによる入力ですが技術的に難しいです。

817:796
08/08/31 21:02:33
肝心なことを忘れてました。
もし、フォームに名前はあっても番号はない場合は登録せず
次のフォームを読み取らせ、ループは名前が無くなったら出るというシステムです。

長々となってしまいまして申し訳ありません。

818:デフォルトの名無しさん
08/08/31 21:05:26
ネイティブ言語や .NET 言語で実現できることは、Java でも実現できますか?

819:デフォルトの名無しさん
08/08/31 21:06:14
無理。

820:デフォルトの名無しさん
08/08/31 21:08:23
こんな感じでできるだろ
for(int i = 1; i < n; i++) {
 getParameter("name[" + i  + "]");
 getParameter("value[" + i  + "]");
}

821:796
08/08/31 21:13:43
>>820
データは取得できるとは思うのですが、
データを保存またはMySQLに連続して登録するときはどのようにすればよろしいでしょうか。

822:デフォルトの名無しさん
08/08/31 21:24:00
>>821
Valuesをつなげるか、何回もUpdateとかInsertする

823:デフォルトの名無しさん
08/08/31 21:42:17
beginTransaction();
for(int i = 1; i < n; i++) {
 getParameter("name[" + i  + "]");
 getParameter("value[" + i  + "]");
 insertOrUpdate(data);
}
commit();


824:デフォルトの名無しさん
08/08/31 22:37:08
テーブルでソートを行うために
setAutoCreateRowSorter(true)を使っているのですが、
ソートを一時的に無効にしたい場合が生じました。
setAutoCreateRowSorter(false)ではだめなようなので、
setRowSorter(null)を使っているのですが、
このような方法でよいものでしょうか。

825:デフォルトの名無しさん
08/08/31 22:47:13
>824
APIドキュメントは読みましたか?
そこに書いてありませんか?

826:798
08/08/31 23:05:53
>>799 >>800 >>804
ヒントありがとうございます。
ヒントを頼りにここまではできたのですが、
URLリンク(hisazin-up.dyndns.org)
文字列を入力するとwhile文が無限ループになります。
無限になるのはわかるんですが、何を入れれば無限がとめられるのかわかりません。
もうこれ以上しぼっても何にも出てこないので、どうか何が足りないのか指摘をお願いしますorz

827:デフォルトの名無しさん
08/08/31 23:06:51
>>819
実現な無理なことって何?
※中間言語を介しているのでネイティブより遅いってのはナシ

828:デフォルトの名無しさん
08/08/31 23:08:16
× 実現な無理
○ 実現が無理

829:デフォルトの名無しさん
08/08/31 23:08:28
while(!(s = br.readLine()).equals("end")){
.....
}
こうして、読み込みと同時にループ判定ってのをJavaではよく使うよ。

830:デフォルトの名無しさん
08/08/31 23:15:12
てかループの最後でreadLineしなきゃダメだろ、冷静に考えろ

831:798
08/08/31 23:22:32
>>829 >>830
もうほんとありがとうございます。どっちのパターンでもできました。
未熟ですいません。途中泣きそうになってました。
教えていただいた知識はありがたく吸収させて頂いて、
完全体への糧とさせて頂きます。

832:デフォルトの名無しさん
08/08/31 23:23:39
アグモン進化~~~!

833:デフォルトの名無しさん
08/08/31 23:24:47
javaの文字処理は、

while (r.ready()) {}

がセオリーなんだけど・・・

アホな奴が書いた説明を読んだんじゃないの?

834:デフォルトの名無しさん
08/08/31 23:34:27
セオリー(笑)と言い切る根拠示したら?

835:798
08/08/31 23:34:28
>>832
ちょww
>>833
独学でやってるんですが、教科書にはその書き方はのってなかったですね。
でもちょっとした応用ですよね。気付かない自分の無力としておきます。
ありがとうございます。

836:デフォルトの名無しさん
08/08/31 23:37:55
VB上がりの人は、rubyかperlの方からやっるといいよ。

837:デフォルトの名無しさん
08/08/31 23:39:14
>833
言いたいことは解るが、その場合は
while(r.ready()) {
System.out.println("文字列を入力して下さい");
String s = r.readLine();
if(s.equals("end")) break;
// 以下同様
}
と書かなくてはならないだろ。
そこまでちゃんと説明しないのはあまりにも無責任。
ついでにいえば、r.ready()がfalseになることは基本的にないからな、標準入力からとっているわけだし。

838:デフォルトの名無しさん
08/08/31 23:40:12
>>795

こいつには「友達はいないだろうな」と感じるのは、俺だけなのかな・・・

839:デフォルトの名無しさん
08/08/31 23:43:04
たぶんMSDNのVBの記事ののりで、いつまでもお子ちゃまのままなのか、もともと糞まみれのまま生活してるとかじゃないか?

840:デフォルトの名無しさん
08/08/31 23:44:18
だなw

841:デフォルトの名無しさん
08/08/31 23:45:40
ぬるぽ

842:デフォルトの名無しさん
08/08/31 23:52:42
>>805
です。帰ってきました。
具体的には
JPanel panel = new GraphicPanel("image.jpg");
JTextArea area1 = new JTextArea();
JTextArea area2 = new JTextArea();
area1.setOpaque(false);
area2.setOpaque(false);
JScrollPane scrollA = new JScrollPane(area1);
JScrollPane scrollB = new JScrollPane(area2);
scrollA.getViewport().setOpaque(false);
scrollB.getViewport().setOpaque(false);

panel.setLayout(new GridLayout(2,1));
panel.add(scrollA);
panel.add(scrollB);
という形でやっているのですが・・
GraphicPanel()は、別クラスでイメージ名を渡すとそれがパネルの背景になります。

843:デフォルトの名無しさん
08/08/31 23:56:03
>>834
>>837

流れを見ると、君が勉強不足なだけのようだけど?

844:デフォルトの名無しさん
08/08/31 23:59:56
>>837はかなり問題発言だと思うけど、このスレ的には放置でいいの?

845:デフォルトの名無しさん
08/09/01 00:01:36
ITドカタ出身のカスみたいだし、ほっとけばいいんじゃない?

846:デフォルトの名無しさん
08/09/01 00:03:55
>>841,844,845

だなw



847:805
08/09/01 00:06:48
どうやらJScrollPanelの透明化が出来てないようです。。

848:805
08/09/01 00:13:08
setOpaque
getViewport().setOpaque
どちらもやると透明になりました!!すれ汚しすいませんでした。

849:デフォルトの名無しさん
08/09/01 00:15:32
そうだ!大学や専門学校でVBとかC#を教えればいいんじゃんか!
VBの方が使ってる人多いし、VBアプリもいっぱいあるじゃん。
高校ではBASIC教えてんだから、何で大学とかでVBを教えないんだよ。オレ頭いい~

850:デフォルトの名無しさん
08/09/01 00:19:54
>>805
これ参考になるかな?
URLリンク(terai.xrea.jp)

>>809
使ってるのはDefaultTableCellRendererだよな?
だとしたらgetTableCellRendererComponenメソッドをオーバーライドして、
super.getTableCellRendererComponenで取ってきたComponentを
JLabel(もしくはJComponent)でキャストしてやつを
setBorder(null)にすればうまく行く様な気がする。



851:デフォルトの名無しさん
08/09/01 00:37:46
ジャヴァ最高!
サン最高!
アムロ最高!

852:デフォルトの名無しさん
08/09/01 00:45:04
以下でchannelを閉じるときにFileOutputStreamって自動的に閉じますよね?
FindBugsさんに怒られて不安になってしまいますた。
FileNotFoudExceptionとIOExceptionはメソッド単位で投げてます。
clearしているstreamは引数で与えているByteBufferです。


File file = new File(fileName);
FileChannel channel = null;
try {
channel = new FileOutputStream(file).getChannel();
channel.write(stream);
} finally {
// 事後処理
stream.clear();
if (null != channel) {
channel.close();
}
}


853:デフォルトの名無しさん
08/09/01 00:52:09
javaで開発してる人の半分以上はwindowsであるという事実がある。
しかしjvm runtimeも.net runtimeもほぼ同じことが出来るのに、なぜこれほどまでにMSは嫌われるのかが謎だな。
さらにwindowsのvb, c#で簡単なこと(例えばメディア・プレーヤ系とか)をわざわざjavaでやるのもまたなんとも香ばしい。

今の時代の主流OO言語風に言えば、.netで作ったライブラリをjvmから呼び出せば済むことなんじゃないの?


854:デフォルトの名無しさん
08/09/01 01:03:19
dot net と jvm bytecode が相互にアクセスして相互に運用が出来るライブラリとかはもう誰かが作ってるよ。
どっかにあったような…海外だったかな?


855:デフォルトの名無しさん
08/09/01 01:30:28
>>853
効率だけで物事を選ぶわけじゃないからだろ。

856:デフォルトの名無しさん
08/09/01 01:39:28
>>841
ガッ

857:デフォルトの名無しさん
08/09/01 01:45:30
俺のサーバPC(インテルCPUじゃないの)でiphone使えたりmp4再生できても意味ないからな・・・
それよりも、それらコーディックの類は特許の塊でもあるから、jvmで実装するよりもそういうのは特許に関心があるMSに任せといて、
それらメディア系のファイル使うときは、dotnetやjavaのライブラリAPIでアクセスできれば十分じゃないの?

h.264みたいな最先端の技術はさすがに専用のデコーダ兼表示端末(インテルPCとかかな)ないと実用じゃないだろうけど、
そうじゃなければ、昔からあるシェルのパイプ機能に毛が生えたのでいいよ。

特許がどうとか言うと、ライセンスとか裁判とかジャスラックとかウザイだろw
どうせおまえなんか法学部出身なわけでもなければ民事裁判やったことないんだろうしww

858:デフォルトの名無しさん
08/09/01 01:53:59
iniファイルでプロパティ設定するのは骨が折れるから、プロパティ設定辺りはいまどきはGUIでサクッとやりたいなと思うけど。

Javaがデスクトップとかメディアに進出もいいけど、どうせ特許の壁にぶつかるし、出来ても所詮はネイティブであって、携帯電話でそのデコーダ(コーディック)が動くわけでもないし、
今必要なのは、swingみたいにコンポーネントやbeansを作ってくれればいいでない?
java/jvmの管理とかマネジメント充実も一通り終わったから、そろそろデスクトップのUIとかの方かなと思う。

859:デフォルトの名無しさん
08/09/01 02:42:31
夏休みは終わったらしいぞ

860:デフォルトの名無しさん
08/09/01 03:35:07
すれ違い

861:デフォルトの名無しさん
08/09/01 08:04:21
どなたか
>833
の解説をお願いします。
reader.ready() は「次の読み込みがブロックされるかどうか」だけとの事ですので、例えば以下の場合には正常に動作しない場合もあるかと思います。(※クライアントからデータが未送信の場合)
Socket s = serverSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
while(reader.ready()) {/* 処理 */}
また、StringReader#ready() は常に true を返したりもします。
このような危険性がありながらなお ready() がセオリーとされる理由を御教示頂けないでしょうか

862:デフォルトの名無しさん
08/09/01 10:30:33
それよか、.NetとJVMを結びつけるライブラリとかほんとにあんの?

863:デフォルトの名無しさん
08/09/01 10:44:40
>>861
たぶん君は、ストリームのことを大学で教えてもらえなかった哀れな人なんだろう。
まずstdinを(line!=null) ?とかでナル・チェックするのはマズイことを知れ。

864:デフォルトの名無しさん
08/09/01 12:13:46
>863
お返事ありがとうございます。
独学なので更に哀れな知識量しかなく、色々間違っているかと思います。
もう少々お付き合い下さい。すみません。

> stdinを(line!=null) ?とかでナル・チェックするのはマズイことを知れ。
との事ですが、その前に疑問を整理させて下さい。
元々の疑問は、「文字処理は ready()がセオリー」との発言でした。これは標準入力に限らず、Reader 系全般に当てはまるかと思います。

ここで、敢えて ready() をセオリーと言っていた事がよく分かりませんでした。
Reader#ready() は、「次の読み込みがブロックされるかどうか」を返す訳ですから、入力が無い == ブロックされる == false となり、例えば標準入力であれば、起動直後の入力が無い場合には
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
while (r.ready()) {/* 処理 */}
としてもループ内に入ることなく抜けてしまい、期待した動作はしないかと思います。
同様に、Socket から文字列を読み込む場合でも、通信状態に応じて、データパケットが届く前に ready() が実行される事もあるかと思います。
であるのに、ready() をセオリーとする理由がよく分からず、質問した次第です。
(ファイルからの入力に限定するのであれば、ready() がセオリーでも理解はできるのですが)
頭の悪い質問で申し訳ありませんが、回答をよろしくお願いします。

あと、stdin を null チェックするのはまずい、という理由もよく分かりませんでした。
System.in は null を返さない、とかそういう単純な理由ではありませんよね?
宜しければ一緒に教えて頂けないでしょうか

865:デフォルトの名無しさん
08/09/01 14:04:51
俺は Reader#ready() 使ったことないのでセオリーとは思ってない。
stdin だろがなんだろが BufferedReader#readLine() だったら EOF->null だから当然チェックする。
>>833 >>863 の説明に期待するかw

で、Reader#ready() は「ブロックされるかどうか」じゃなく「ブロックされないかどうか」だ。
false だからといってブロックするとは限らないし、入力が無いとも言えない。

866:デフォルトの名無しさん
08/09/01 14:47:41
JTableからJScrollPaneって取得できますか。
JTableのsetVisibleだとテーブルを非表示にできないようなので、
JScrollPaneのsetVisibleを呼びたいのですが。

867:デフォルトの名無しさん
08/09/01 14:50:33
getParentで取得してチェック

868:デフォルトの名無しさん
08/09/01 14:55:54
インタフェースにあるクラス(インタフェースじゃない)を継承させることってできますか?

869:デフォルトの名無しさん
08/09/01 15:05:05
むり

870:デフォルトの名無しさん
08/09/01 16:04:35
>>867
thx!

871:デフォルトの名無しさん
08/09/01 16:41:30
基本データ型のうちなぜString型だけ先頭が大文字なのでしょうか?
これだとラップクラスと同じになりますよね。

872:デフォルトの名無しさん
08/09/01 16:54:09
Stringは基本データ型ではありません
java.langパッケージに属するクラスです

873:デフォルトの名無しさん
08/09/01 16:54:35
>>871
Stringは基本データ型じゃないだろ。

874:デフォルトの名無しさん
08/09/01 16:59:34
これだからCをやってないやつはだめなんだよな

875:デフォルトの名無しさん
08/09/01 17:09:00
ではchar型も基本データ型ではありませんね

876:デフォルトの名無しさん
08/09/01 17:12:20
どうしてそう思いますか?

877:871
08/09/01 17:23:02
すみません何か大きな勘違いをしてました
Stringはどう見ても基本データ型じゃないです

878:デフォルトの名無しさん
08/09/01 18:15:43
byteからintに符号なしでキャストしたいときはどうするんですか?

879:デフォルトの名無しさん
08/09/01 18:18:02
(int)Math.abs()

880:デフォルトの名無しさん
08/09/01 18:30:24
>>879
言い方が悪かったです

(byte)0xff が-1でなく255になるようにしたいです

881:デフォルトの名無しさん
08/09/01 18:33:24
byte b;があったとして
b&0xFF
ってすりゃいいよ。

882:デフォルトの名無しさん
08/09/01 18:36:32
(int) ((byte) 0x80) // 0xffffff80 = -128
((int) ((byte) 0x80)) & 0xff // 0x80 = 128

883:デフォルトの名無しさん
08/09/01 18:41:32
解決しました。ありがとうございます

884:デフォルトの名無しさん
08/09/01 20:01:57
> 865
返答ありがとうございました。
ひとまず、ready() の件はセオリーとは言えない、と認識して納得しました。

> で、Reader#ready() は「ブロックされるかどうか」じゃなく「ブロックされないかどうか」だ。
確かにその通りでした。大ボケこいてました。ご指摘ありがとうございます。

お騒がせしました。

885:デフォルトの名無しさん
08/09/01 20:17:22
APIもちゃんと読んでもいなければ、ソースも読んでないんだろうな。
たとえば、java.io.Ready.read():Iのソース見たことないだろw

お前のようにいつまでも妄想してようじゃ上達しないんじゃない。
それなら、いつready()を使うんだろう?

886:デフォルトの名無しさん
08/09/01 20:21:34
>>884
ready()とストリームついて知りたかったら、難しい解説本読むか、ちゃんと学校いけよw
2chでお手軽に聞くようなお手軽独学厨房にはもったいなくて教えてやんないww

887:デフォルトの名無しさん
08/09/01 20:25:17
>>885
java.io.Ready.read・・・

888:デフォルトの名無しさん
08/09/01 20:32:57
すみません
知識が浅いもので不快にさせてしまいましたら申し訳ありません
一応、判らないなりに、SunのJAVA5実装はReaderからStreamDecoder経由してio_util_md.c までは辿っています。
これ以上どこを見るといいのか教えて頂けますか
よろしくお願いします

889:デフォルトの名無しさん
08/09/01 20:33:29
ストリームも知らないなら別にナムル・チェックいいでない?
どうせargs[k]とかやってる程度の人だろうしww

890:デフォルトの名無しさん
08/09/01 20:39:34
>>885
よっぽどのアホだな・・・

891:デフォルトの名無しさん
08/09/01 20:41:23
あじゃぱー

892:デフォルトの名無しさん
08/09/01 20:41:34
>>889
日本語でおk

893:デフォルトの名無しさん
08/09/01 20:46:29
>>888
そこまでソース追いかけても分からないならタコでしょw
Reader.read():Iが何でnativeでなくてnew char[1]なのかで十分分かると思うけど・・・
もしセンスがあればだけど、多分君はお勉強はできるけど・・・あんまし・・・ってタイプでしょうか?

というよりも、それならいつready()を使うわけ?


894:デフォルトの名無しさん
08/09/01 20:49:54
東大の教授になりたかった・・・

895:デフォルトの名無しさん
08/09/01 20:51:40
>>893
バカには一生わかんねーよ

896:デフォルトの名無しさん
08/09/01 20:52:54
>>894
共産党に入れ

897:デフォルトの名無しさん
08/09/01 20:57:20
>>895

なんみょう~
なんみょう~
なんみょう~


898:デフォルトの名無しさん
08/09/01 20:59:49
まずJavaの本読むより、「バカの壁」を読んでからじゃね?

899:デフォルトの名無しさん
08/09/01 21:01:12
ListってCでいうとこのstructみたいなもんすか?

900:デフォルトの名無しさん
08/09/01 21:09:26
>>899
リストはCでもつかうだろ。

901:デフォルトの名無しさん
08/09/01 21:38:21
ready()なんか使う奴こそ糞だな!

一生ナンミョウ~やってろよww

902:デフォルトの名無しさん
08/09/01 21:49:04
>>901
いや、使う用件はあるだろ。

903:デフォルトの名無しさん
08/09/01 21:52:35
ready?

904:デフォルトの名無しさん
08/09/01 21:54:11
ストリームわかんねーの奴は「Cが難しすぎてJAVAに逃げてきました」って程度だろ。そういう奴はJAVAも無理無理。VBAかVBぐらい丁度いいよw

905:デフォルトの名無しさん
08/09/01 21:56:58
ストリームもそうだけど、スレッドも分からない奴がいたよな。
スレッド・セーフがどうとかこうとか適当な妄想を言ってたけど、アレはC#のスレだったか?

906:デフォルトの名無しさん
08/09/01 21:57:22
>>833はまったくの嘘だから気にしなくていいよ

907:デフォルトの名無しさん
08/09/01 22:05:57
StringBufferクラスの必要性をご教授ください。
Stringだけで十分だと思うのですが・・・

908:デフォルトの名無しさん
08/09/01 22:10:59
それなら、char[]で間に合うから、Stringも必要ないね

909:デフォルトの名無しさん
08/09/01 22:11:55
StringBuilderで間に合うから、StringBufferは要らないね。


910:デフォルトの名無しさん
08/09/01 22:18:08
ここは一応 初心者歓迎 となってるのを忘れてないか?

911:デフォルトの名無しさん
08/09/01 22:24:49
うん歓迎してるぜ。


912:デフォルトの名無しさん
08/09/01 22:28:42
充分にヒントになっているかと思うが?

913:デフォルトの名無しさん
08/09/01 22:34:35
>>908
悪いがそれは違うな。もう一度JAVAのオブジェクト指向プログラミングの技法とやらから初めて、一からやり直したらどうだろか? 

914:デフォルトの名無しさん
08/09/01 22:38:00
>>907
StringBufferはreverse()するとき良く使いますw

915:デフォルトの名無しさん
08/09/01 22:39:56
Stringクラスは代入するたびに新しいStringオブジェクトを作るので、
メモリ的にも処理速度的もコストが高いんよ。
例えば、aとbとcの文字列を連結する場合に以下のような処理があったとすると
--------------------
String buffer = a;
buffer += b;
buffer +=c;
--------------------
StringBuffer buffer = new StringBuffer(a);
buffer.append(b);
buffer.append(c);
--------------------
Stringでは、 += bをしている処理は a に b の文字列を連結してる
のではなく、 aとbを連結したStringオブジェクトを新しく作ってる。
同様に +=c の処理でも 新しいStringオブジェクトを作ってる。
一方StringBufferでは、 .append(b) では 文字列を連結しているので
新しいStringBufferオブジェクトは作っていない。
つまり、新しいオブジェクトを作っていない(newしていない)分
メモリも速度も節約できるということ。

916:デフォルトの名無しさん
08/09/01 22:45:57
>>906
答えられもしないくせに適当なこと言うな

917:デフォルトの名無しさん
08/09/01 22:46:22
>>915
文字列の操作を行う場合は、って前提が抜けてなければ完璧な回答だったのにな

918:デフォルトの名無しさん
08/09/01 22:54:39
まぁ今はコンパイルする時点で文字列の結合はStringBuffer#append()に置き換えてくれるから単純な結合は無視しちゃっていいけどね

919:デフォルトの名無しさん
08/09/01 22:56:28
0と1を反転させる方法を教えてください。
かっこいい方法は無いですか?


920:デフォルトの名無しさん
08/09/01 23:00:00
文字列の0と1なのか別のモノの0と1なのかくらい示せ

921:デフォルトの名無しさん
08/09/01 23:01:09
かっこいい方法…俺には無理だ

922:デフォルトの名無しさん
08/09/01 23:01:30
アセンブラの頃は良く XOR したな…

923:デフォルトの名無しさん
08/09/01 23:03:47
int型でお願いします。


924:デフォルトの名無しさん
08/09/01 23:09:04
>>915
そんな数十行にもわたって書くことじゃないと思うけど、お前が噂のニートだろ?それに友達も一人もいない自宅警備員で、実際は、プログラムも作ったことない無能だろww

925:デフォルトの名無しさん
08/09/01 23:15:03
おー、こわい、こわいw

926:デフォルトの名無しさん
08/09/01 23:17:44
> 893
ひとまず、標準入力の件に関しては
java ReaderClass < data.txt
といったデータの与え方をした場合の事なのではないかと理解しました。
確かに、この場合には間違いなく ready() の使い所と思います。
この理解は間違っているでしょうか?

927:デフォルトの名無しさん
08/09/01 23:18:52
>>915の性格はキモイ説明サイトと同類だな。
もう、そういうサイトはいっぱいあるし、一見丁寧に説明しているようでどうでもいいところが長いだけだし、その程度の説明じゃ人は来ないだろうけどww

たとえば、x=1; new StringBuffer(x)とかだと、その説明の効率的の指摘からすれば、逆に非効率になるんじゃないの?
知ったかぶっりの雑学知識を披露したのは、わからないでもないんだけどねぇ・・・それじゃ文系のITジャーナリストと同じムジナだな・・・

928:デフォルトの名無しさん
08/09/01 23:23:01
文系といえば、確かにALL ABOUTの記事かいてるのはキモイ奴の多いよな。
「どこにも就職できなかったけど、All Aboutで拾ってもらいました!!」て感じのオーラが強いって言うか…
早稲田みたいなところの心理学科卒業で、All Aboutで「アロマがどうとかは心理的に~」とか専門術語を使って妄想記事かいてるのは吹いたww

>>915は結局それと同じムジナ。もう無理しないで死んでいいよ。


929:デフォルトの名無しさん
08/09/01 23:24:08
>>919
!

930:デフォルトの名無しさん
08/09/01 23:25:14
>>929それはboolean

931:デフォルトの名無しさん
08/09/01 23:29:51
妄想ならせめて旧帝大レベルじゃないとだめだろ。といっても、この前の東工大の学生は、左手腕に刺青みたいな模様をさらけ出してて、危ないやっちゃなと思ったけど、東工大は旧帝レベルだから少しは聞いてやったw
その話の真意よりも、たぶん自宅警備員候補だろうし、人生苦労する奴なんだろうなと思った。

932:デフォルトの名無しさん
08/09/01 23:30:17
>>926
そんな場合だからといってready()を使う必要なんてないよ。

10年ぐらいJava触ってて一度もready()を使ったことないけど、「入力が
なければ他の処理をする」という感じの疑似マルチスレッドぐらいしか
用途が思い付かない。で、そういうときは素直にマルチスレッドにする。



933:デフォルトの名無しさん
08/09/01 23:32:10
雑談したいなら他行け。

>>926
そうか?
標準入力を使うのは、その元が手入力だろうがファイルだろうがttyだろうがとにかく
何かが送られてくるのを受けたいだけだからだろう。
ファイルからだから ready を使うとか考えるのは違うんじゃないか。

934:デフォルトの名無しさん
08/09/01 23:35:41
つまり、>>915の説明はString/StringBufferの違いを本質的に指摘してないってことですね。実はそんな風に思ってましたがスッキリしました!

935:デフォルトの名無しさん
08/09/01 23:39:39
文系のITジャーナリストってのは、堀江豚と友達だったメガネで蝶ネクタイの30代ぐらいでキモイ奴か?
あいつは正に素早く死んで欲しい。いつもおれは、寝る前には必ず神棚で手を合わせて「早く死んでくれって」祈ってるぐらいだし。

936:デフォルトの名無しさん
08/09/01 23:41:15
それそろすれ違い

937:デフォルトの名無しさん
08/09/01 23:55:54
>932, 933
リダイレクトで渡せば EOF が取れないだろうから ready() の出番・・・と思ったのですが、書き込んでから試したらきちんと EOF になりました(阿呆です)
何か根本的に道を間違えているようです。
標準入力 + ready() というキーワードにこだわり過ぎているのでしょうか。
(その辺りを離れて単純に ready() の使い道を考えるのであれば、932 さんの仰るような nio っぽい使い方が一番の使い所であるような気がします。)


938:デフォルトの名無しさん
08/09/02 00:03:55
Stringをだな。阿呆みたいに+=で連結しまくってるコードがあったんだ。
あんまりにもあんまりだと思って、StringBufferで書き換えてみたんだ。
でもベンチマークを取ってみると、1msも変わらなくてだな。
そのメソッドのほんの数行、DBをアクセスしてる部分が、処理時間の99%
以上を持っていってたんだ……。


939:デフォルトの名無しさん
08/09/02 00:15:58
つまりStringBufferの利用価値は自己満足が大半ってことですね?

940:デフォルトの名無しさん
08/09/02 00:18:38
それで結局StringとStringBufferの違いは何?

941:デフォルトの名無しさん
08/09/02 00:19:36
Bufferって付いてるか付いてないか

942:デフォルトの名無しさん
08/09/02 00:20:07
確かによほど下手なことせん限り大差ないよな。でも演算途中でnew,new,new....ってのは気持ち悪い・・・

943:デフォルトの名無しさん
08/09/02 00:22:33
もう夏は終わったんだぜ?


944:デフォルトの名無しさん
08/09/02 00:23:20
でたでたでた。

945:デフォルトの名無しさん
08/09/02 00:23:47
ちなみにStringBufferとStringBuilderとかHashTableとHashMapとかだと
実際の所どの程度速度に影響するもの?

946:デフォルトの名無しさん
08/09/02 00:33:23
>>916
夏の終わりの駆け込みかと思ってたけど、オマエ、本気なんじゃないのか?

947:デフォルトの名無しさん
08/09/02 00:34:48
>>926
間違ってるな。

948:デフォルトの名無しさん
08/09/02 00:36:48
>>945
そいつらへのアクセスが処理の多くを占めてたら、それなりに効いてくるんじゃないか?
特にマルチコア/マルチCPUだと、synchronizedの部分でメモリの同期化が行われるから、それなりに馬鹿にならないコストがかかるような気がする。
とは言え、Java7あたりだと、JITコンパイラが不要なロックを省略するような最適化をぶちかましてくれるらしいからな……。

949:デフォルトの名無しさん
08/09/02 00:36:50
>>945
それは自分でやってみれば分かる事じゃん・・・

950:デフォルトの名無しさん
08/09/02 01:19:11
String:不変オブジェクト
StringBuffer:可変オブジェクト
っていう教科書にありそうなのではどうだw

951:デフォルトの名無しさん
08/09/02 03:03:11
>>945
今となっては多分そんなには変わらない。


952:デフォルトの名無しさん
08/09/02 03:14:15
まだやってんのか。違いは、効率じゃないんだよね。

953:デフォルトの名無しさん
08/09/02 03:27:17
ぼくらはreadyなんかなくても幸せ!

954:デフォルトの名無しさん
08/09/02 09:35:52
RandomAccessFileは、ソースを見てもnativeばかりですが、
実際(実装上)のところ多少はバッファがきいているから、BufferedInputStreamと同じように考えてよいのでしょうか。
他に気になるところはありますか?

955:デフォルトの名無しさん
08/09/02 09:39:19
EclipseってJavaでできてるみたいですが
Eclipseはexeにするのに何使ってるんですかね?

956:デフォルトの名無しさん
08/09/02 10:48:08
>>954
どうしてバッファされていると期待できるのかが理解できない。
ソースは見てないけど、バッファされないと思うぞ。バッファリングと
ランダムアクセスは相性悪いから。


957:デフォルトの名無しさん
08/09/02 10:53:37
いや、逆にバッファされていないと考える方がおかしいんだけど…
問題はバッファされているか・いないかじゃなくて、実用上問題ないかどうかだと思うが?

それと、ランダムアクセスとバッファが相性悪いのはどの辺りに根拠があるの?

958:デフォルトの名無しさん
08/09/02 11:07:42
相性とかそういうレベルの話でVMが作られてたら笑えるw

959:デフォルトの名無しさん
08/09/02 11:09:37
いつも通り>>956の思い込みが根拠じゃね?

960:デフォルトの名無しさん
08/09/02 11:17:54
>>958
そろそろ死んだ方がいいんじゃないか?人生疲れただろ。

961:デフォルトの名無しさん
08/09/02 11:21:53
そうだよな…なんで俺は生きてるんだろう…

962:デフォルトの名無しさん
08/09/02 13:09:56
ぼくらはEclipseなんかなくても幸せ!

963:デフォルトの名無しさん
08/09/02 16:01:00
ローカルでグラフィック描画する時は
Graphics gr = img.getGraphics();
gr.drawLine(x1,y1,x2,y2);
gr.dispose();
と毎回設定して廃棄しますが

グローバルで
Graphics gr = img.getGraphics();
としておいて、ローカルで
gr.drawLine(x1,y1,x2,y2);
だけで、ずっとgrを使いまわしてはだめですか?

964:デフォルトの名無しさん
08/09/02 16:23:10
いいよ
ずっと同じimgに描画するのなら

965:デフォルトの名無しさん
08/09/02 16:26:23
そうですか

966:デフォルトの名無しさん
08/09/02 17:39:54
ぼくはJCPADだよ!
みんな何使ってるの?

967:デフォルトの名無しさん
08/09/02 17:42:07
eclipse

968:デフォルトの名無しさん
08/09/02 17:43:36
今JCPADからEclipseに変えたとこ
閉じるのがいいね

969:デフォルトの名無しさん
08/09/02 23:22:31
30過ぎてJava覚えてJavaの資格とったらプログラマーの就職先見つかりまつか?

970:デフォルトの名無しさん
08/09/02 23:27:10
ちょっとの学歴あれば30ならまだ余裕で就けるよ

971:デフォルトの名無しさん
08/09/03 00:00:03
>>969
おでも三十で就職目指してます。
お互い頑張りましょう。

972:デフォルトの名無しさん
08/09/03 00:06:21
2つの別のクラスで同じ値を共有したいと思っています
ClassA、ClassBはループさせていて常に結果を出力しています。

ClassA{
if(hoge>0)
ClassF.setX(true);
else
ClassF.setX(false);
}

ClassB{
test.setEnable(ClassF.getX());
}

ClassF{
static boolean f;
static void setX(boolean bl){
 f = bl;
}
static boolean getX(){
 return f;
}
}

こんな感じのプログラムを書いたんですが、ClassBに反映されません
どこが間違っているんでしょうか?
それとも、別のクラスで同じ値を共有するのは無理なのでしょうか?

973:デフォルトの名無しさん
08/09/03 00:19:08
もうちょっと意図が分かるように書けよ。
ClassBに反映されないってどういう意味だ?
test.SetEnabledで思った値が取れてないってことか?

こんな擬似コードじゃ分からんけど、
もしループとやらが複数スレッドで同時に回し続けてるって意味なら、
ClassF.fへのアクセスを同期化する必要がある。
volatileにするかメソッドにsynchronizedつける。


974:デフォルトの名無しさん
08/09/03 00:19:34
>>972
別スレッドならsynchronizedかvolatile必須だぞ。
要素が1個かつJava5.0以上なら、AtomicBoolean等でもいい。

975:デフォルトの名無しさん
08/09/03 00:24:53
大量のUDPパケットを受信して、処理したいんですが、
どうしても、幾つかのパケットを取りこぼします。
何か、効率良く処理できる方法はありませんか?


976:デフォルトの名無しさん
08/09/03 00:32:18
>>973-974
ありがとうございます。
volatile static boolean f;
で望み度通りの結果を出すことができました。

977:デフォルトの名無しさん
08/09/03 00:37:50
>>975
どーやってんだ

978:デフォルトの名無しさん
08/09/03 00:44:18
>>976
変数が1個ならそれでいいけど、複数個ある場合はちゃんと同期取らないと変更途中のデータが読み出される可能性があるぞ。
詳しくは、マルチスレッドプログラミングに関する本を読んどけ。

979:デフォルトの名無しさん
08/09/03 00:46:00
>>975
UDPならパケットが取れないことがあるのは前提じゃないのか

980:975
08/09/03 00:46:50
DatagramSocketを使って、普通にポートを開いて受信しています。

981:デフォルトの名無しさん
08/09/03 01:26:19
>>979
答えは、UDPを使わないってことだな・・・

982:デフォルトの名無しさん
08/09/03 01:56:38
>>980
効率良くポートを開いて効率良く受信しろ

983:デフォルトの名無しさん
08/09/03 02:23:25
動的なキャストはどうやるんでしょうか?
windows95/98のプラットフォーム向けのアプリなんでjdk1.2相当なんですが。
よろしくお願いします。


984:デフォルトの名無しさん
08/09/03 02:26:08
動的キャストは、

Object obj;
...
val=(???)obj

ですが、???がコンパイル時未定の時のキャストです。

985:デフォルトの名無しさん
08/09/03 03:03:37
で、それに何の意味があるの?
???が未定なのにキャストした後でどうやって使うわけ?


986:デフォルトの名無しさん
08/09/03 03:15:12
>>984
valの型にキャスト

987:デフォルトの名無しさん
08/09/03 03:34:55

jdk1.5にある、val.getClass().cast(obj)

といった方が早いですね。これを1.2でやるにはどういうコードになるんでしょうか。


988:デフォルトの名無しさん
08/09/03 03:46:03
最近プログラムを勉強しはじめてわからないことだらけなのですが
キャストとパースの違いがよくわかりません
どなたか教えてください

989:デフォルトの名無しさん
08/09/03 04:35:02
>>987
>>985 >>986 は無視かい・・・
Class#cast() は
>public T cast(Object obj) {
>if (obj != null && !isInstance(obj))
>throw new ClassCastException();
>return (T) obj;
>}
となってるから generic が無いと無理なんだと思っとけ。
それよりもこれを使うようなのは相当面相なプログラムだと思うが、
これを使わないですむようにするほうが後々の為になると思うぞ。

990:デフォルトの名無しさん
08/09/03 04:49:15
無視というより、val=val.getClass().cast(obj) 程度で分かりませんでしたか。

使わないで済むように方法を探したんですけど、後々のためというより、ももともとターゲットが古くてこれしかないので聞いてるんですが?

知らないなら無理に御答えにならなくて結構ですけど、あなたはだいぶ妄想好きなんですねw

他に良い施策はありませんか?


991:デフォルトの名無しさん
08/09/03 04:59:34
>>984
val=(???)objのあと、valをどう使うつもりなの?
型が決まっていなければvalのメソッドとかを呼び出すコードもvalを他のクラスに渡すコードも書けないんじゃない?
というかval自体の型はval=(???)objの前でどう宣言しているの?
objになりうるクラス共通にインタフェースを実装させて、そのインタフェースにキャストするとか、
全体のクラス設計を見直した方がいいと思う。

992:デフォルトの名無しさん
08/09/03 05:01:45
単なるキチガイだったのか……

993:デフォルトの名無しさん
08/09/03 05:03:36
>>990
お前の問題だから自分で捜せ
そんな態度じゃまともな人のレスも付かないよ

994:デフォルトの名無しさん
08/09/03 05:07:05
そう思うんだけど、このスレの態度の方が酷くない。正しく真正糞スレだと思うが?

995:デフォルトの名無しさん
08/09/03 05:09:42
次スレ?

996:デフォルトの名無しさん
08/09/03 05:13:02
>>991
あなたは、答えらず、それにたいした能力もないのに、そんなに人の庭が好きなんですか?

その設計とやらを知って、あなたは手伝ってくれるんですかねw
一つ忠告しておけば、首突っ込むのは程ほどにした方がいいですよ。

997:デフォルトの名無しさん
08/09/03 05:16:24
>>998>>988に答えてやって>>999は次スレ立てて誘導>>1000は俺が踏む

998:デフォルトの名無しさん
08/09/03 06:02:25
ジェネリクスは静的処理...
コンパイル時に決定できない型は、キャストするのも代入するのも不可能也。

パース...parse...castに似ている部分もあるのか...

【初心者】Java質問・相談スレッド119【歓迎】
スレリンク(tech板)

999:デフォルトの名無しさん
08/09/03 07:51:27
999

1000:デフォルトの名無しさん
08/09/03 07:53:53
1000get!

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


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