【初心者】Java質問・相談スレッド117【歓迎】
初心者質問ですいませんが本に書いていないので教えてください。 C:\Users\Documents\Hoge\src\pkgcui\Cui.java こういう階層にパッケージpkgcuiに入ったCui.javaがあるとします。 この時カレントディレクトリがC:\Users\Documents\Hoge\srcだとすると javac pkgcui\Cui.java java pkgcui.Cuiで実行できますが、 カレントディレクトリが C:\Users\Documentsだとすると javac Hoge\src\pkgcui\Cui.javaで、 javaコマンドの方の指定の仕方はどうしたら良いのでしょうか?
java -classpath Hoge\src pkgcui.Cui
5 :
デフォルトの名無しさん :2008/07/09(水) 13:45:29
前スレ999さんへ これはアドベンチャー用のプログラムなんでswicthは必須です。 前すれ998さんへ while(true){ int pa = s.nextInt(); のsはどこからもってきましたから? できればこれらのプログラムをサープレットで書いて欲しいのですが。
>>5 > のsはどこからもってきましたから?
ブラウザでも、テキストエディタでも、検索してみたら?
>>4 てっきりclasspathってmain以外のクラスを探すためのもので
mainはjava .\Hoge\src\pkgcui.Cuiとか出来るのかと思ってました…。
ありがとうございます、本当に感謝です!
8 :
デフォルトの名無しさん :2008/07/09(水) 14:38:50
教えてくれ五飛! 俺はJAVAをあと何回実行かければスイッチを使った引き算ができるようになるんだ! 教えてくれ五飛! 俺はあと何日で 死ぬんだろうか。
トムキャットプロジェクトだとcontext.xmlがプロジェクトごとに生成されないのですが、自分で追加すれば動作してくれるのでしょうか? それともserver.xmlに記述しなければいけないのでしょうか?
10 :
デフォルトの名無しさん :2008/07/09(水) 15:25:06
やはり2週間弱でJAVAでアドベンチャーが作れるのにどこも雇ってくれないのは、勤務地のせいか。 おい福田、さっさと横須賀の方にプログラムの会社を作りやがれ! サミットばかりやってないで自分の国民を防衛しろ! いざとなった時国民の信頼が無いと日本潰れてしまうよ。
既に手遅れですから次々世代くらいに期待しましょう 敗者復活は王道
Threadクラスを継承したクラスA内のrunメソッドでsleep(1000)で1秒ほどスレッドをとめている間に、 そのAの他メソッドを使うとInterruptedExceptionとかの例外が出ますか?
>>12 InterruptedExceptionのマニュアルを読みなさい。
>>12 interruptメソッドを使うとInterruptedExceptionが出ます
ArrayListの中身に意図しない書き換えが起こり、困っております。 APIを見たところ、同期化されないから注意しろ、的な文章を見つけたのですが 複数スレッドを使うようなプログラムを意図的に書いてはいません。 ためしにAPIに書いてあった List list = Collections.synchronizedList(new ArrayList(...)); の形で定義してみても、結果は変わりませんでした。 言葉だけだと説明が難しいので、サンプルのソースを次に記入します。 データベースから取得した口座の残高に100円追加するソースです。
16 :
15 :2008/07/09(水) 23:44:23
private void zandaka_keisan(){ ArrayList<Koza> KozaList_before = new ArrayList<Koza>(4000); ArrayList<Koza> KozaList_after = new ArrayList<Koza>(4000); //データベースから配列の形状で口座たちを取得します KozaList_before =dba.selectKoza("条件"); Koza kz = new Koza(); int zandaka = 0; //取得件数分繰り返し for(int j=0 ; j<KozaList_before.size() ; j++){ kz = KozaList_before.get(j); zandaka = kz.getZandaka() + 100; koza.setZandaka(); //↑この行が終了すると、KozaList_beforeの中身のkozaに100円足されてしまいます。 //本当は、KozaList_afterにだけ計算結果を格納したいです。 KozaList_after.add(j, kz); } }
17 :
15 :2008/07/09(水) 23:45:03
インスタンス化する口座クラス。単にゲッターとセッターがあるだけです。 public class Koza { private int zandaka; koza(int zandaka){ this.zandaka = zandaka; } public void setZandaka(int zandaka){ this.zandaka = zandaka; } public int getZandaka(){ return zandaka(); } }
18 :
15 :2008/07/09(水) 23:47:58
インデントが解除され見がたくなり申し訳ないです。 何か、根本的な勘違いをしているのかも知れません。 ヒント等分かる方、よろしくお願いいたします。
>>18 >koza.setZandaka();
の行が通らなくね?
>>16 まて。それは本当にコンパイルが通ってるコードのコピペなのか?
いろいろとおかしいだろう。
> Koza kz = new Koza();
これに何か意味があるのか? ループの中で潰されてるが。
> koza.setZandaka();
kozaなんて変数は定義されてないぞ。
あと、setterなのに何で引数がないんだ。
21 :
15 :2008/07/09(水) 23:58:36
大変失礼致しました。 ソースは目視のみの確認でしたので、出直してきます。
22 :
15 :2008/07/10(木) 00:16:15
コンパイルしました。(dba.selectKoza("条件");は質問用なのでエラーになりますが・・・) import java.util.*; public class Sitsumon { private void zandaka_keisan(){ ArrayList<Koza> KozaList_before = new ArrayList<Koza>(4000); ArrayList<Koza> KozaList_after = new ArrayList<Koza>(4000); DbAccess dba = new DbAccess(); //データベースから配列の形状で口座たちを取得します KozaList_before =dba.selectKoza("条件"); Koza kz = new Koza(); int zandaka = 0; //取得件数分繰り返し for(int j=0 ; j<KozaList_before.size() ; j++){ kz = KozaList_before.get(j); zandaka = kz.getZandaka() + 100; kz.setZandaka(zandaka); //↑この行が終了すると、KozaList_beforeの中身のkozaに100円足されてしまいます。 //本当は、KozaList_afterにだけ計算結果を格納したいです。 KozaList_after.add(j, kz); } } }
23 :
15 :2008/07/10(木) 00:16:55
public class Koza { private int zandaka; Koza(int zandaka){ this.zandaka = zandaka; } Koza(){ this.zandaka = 0; } public void setZandaka(int zandaka){ this.zandaka = zandaka; } public int getZandaka(){ return zandaka; } }
KozaList_beforeに入っているKozaインスタンスが、どこでもコピーされ てなさそう。KozaList_before.get()で取り出したインスタンスと KozaList_after.add()で追加したインスタンスは同じものだよ。
>>20 解読ありがとうございます。
> Koza kz = new Koza();
これに何か意味があるのか? ループの中で潰されてるが。
ループの前に、kozaのインスタンスを用意したつもりです。
>25 Kozaインスタンスは倍の数に増えて欲しいのに、newが1回だけし かないことを疑おう。
>>24 >>25 アドバイスありがとうございます!
計算前のKozaインスタンスと、計算後のKozaインスタンスを
それぞれ別に用意してあげる必要があるという事ですね。
Java・・・難しいです・・・・。
29 :
デフォルトの名無しさん :2008/07/10(木) 00:53:22
前スレの982です。
>>983 懇意にさせていただいているお客さんから、とある小システムを
ベンダが手を引くから引き継いでくれ。良い悪いを評価して、
悪い部分は直す良い提案をして貰えれば、悪いようにはしない。
(儲けが出るように発注する)
と言われています。
規模が小さいのでウチとしては絶対取りたいとかそういう
訳ではないですけど(営業サイドの思惑から)、今まで/今後の
つきあいもありますので、無碍には出来ないし、というところです。
>>982 FingBugといのは使ったことが無いので、ちょっと調べてみます。
情報ありがとうございます。
他にこういうのはどうよ、というのが有れば教えていただけると
助かります。
「JCEのSecretKeyって、外部的に同期化する必要はありますか?」
Web系で、全リクエストで共通の鍵を使用します。
オンライン中にパスワードは通常変更されません。
暗号化の目的は、ブラウザに保存されるCookieをユーザから不可視にするためです。
JDKは1.4.2です。
現在↓こんな感じでSecretKeyを作成しています。
#記憶を元に書いているので間違ってたらスミマセン
##全角スペースでインデントしているのは御愛嬌
参考にしているのはこの辺りです。
http://www.trustss.co.jp/Java/JEncrypt123.html private static SecretKey generateSecretKey(String password) {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(password.getBytes());
byte[] passwordDigest = messageDigest.digest();
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
return secretKeyFactory.generateSecret(new DESKeySpec(passwordDigest));
}
続きます
続きです 暗号化/復号化はこんな感じです。 this.passwordはコンストラクタで初期化されています。 public String encrypt(String plain) { byte[] bytes = plain.getBytes(); SecretKey secretKey = generateSecretKey(this.password); // XXX 毎回作るの? Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return encode(cipher.doFinal(bytes)); // Cookieに保存するためBase64でエンコードして戻す } public String decrypt(String crypted) { byte[] bytes = decode(crypted); // さっきのBase64をデコードする SecretKey secretKey = generateSecretKey(this.password); // XXX synchronizedにすれば毎回作る必要はないけどね… Cipher cipher = Cipher.getInstance("DES"); chiper.init(Cipher.DECRYPT_MODE, secretKey); return new String(chiper.doFinal(bytes)); } Cipherはともかく、変更されない鍵までリクエストのたびに作るor同期化するっていうのは イマイチ感が漂うのですが… そもそもインスタンスが不変であれば同期は要らない気もしています。 どちらにせよ言及している文書が探しきれていないので、「ここ読め」とかでも結構です。 よろしくお願いします。
>>30-31 何を聞きたいのかわからない。「外部的に同期化」て意味不明。
>>25 そのインスタンスが使われることなく、
> kz = KozaList_before.get(j);
で捨てられていることは理解しているか?
35 :
30 :2008/07/10(木) 01:25:40
>>33 10年以上Javaを触ってるけど、「外部的に同期化」って初めて聞いたよ。
で、1つのSecretKeyを複数のスレッドのCipherから利用したことあるけ
ど、問題が出たことないです。ドキュメントがあったわけじゃないから、
問題が起きないという保証はないですね。本質的に内部状態を持つよう
なインスタンスじゃないから、大丈夫だと思うけど。
もしそういうドキュメントを見付けられなくて、パフォーマンスを上げ
たいなら、SecretKeyとCipherのペアを貸し出し&返却するようなキャッ
シュ機構を作ればかなり効果があるです。
37 :
デフォルトの名無しさん :2008/07/10(木) 02:30:52
お聞きしたいことがあります。
アプリケーション組み込み向け(もしくは組み込み可能な)のJVMというのはあるのでしょうか?
以前に見た Unity という3D Game Engineがmonoを使って.NETをスクリプトエンジンとして使っていました。
UNITY: Overview
http://unity3d.com/unity/ これのJavaVM版のようなことがしたいと考えております。
主にWindowsで動作ができればと考えております。
>>36 ありがとうございます。
# 不特定多数の場所では用語の使い方には注意しなければいけませんね。今後は気をつけます。
> ドキュメントがあったわけじゃないから、問題が起きないという保証はないですね。
> 本質的に内部状態を持つようなインスタンスじゃないから、大丈夫だと思うけど。
正にその辺りが問題で、イケそうでイケないもどかしさが元となって質問に至った次第です。
「JCEは結局インターフェースの規定であって、SecretKeyについてのマルチスレッド環境下での
動作はドキュメント化されていない。故にその動作は実装依存であり、たとえSUNから提供されているJARが
スレッドセーフであった(ことをリバースコンパイル等の手段を用いて実証した)としても、
仕様化されていない以上、将来のリリースでは変更される可能性がある。」
ということがハッキリしているのであれば、防御的にsynchronizedに倒すという結論に至れるのですが、
現在は、そのための判断の材料を探している段階です。
(SUNからJREと一緒に配布されているJARは、あくまでJCEの規格の一実装という位置づけですよね?)
当然、本当にそこまで仕様に対する厳密な判断が必要なのかという議論も別にあると思います。
また、性能に対してどれだけのペナルティがあるのかによっても、結論は変わると思っています。
# まあ面倒だから同期化にして終了としたい自分もいる訳ですがwww
> SecretKeyとCipherのペアを貸し出し&返却するようなキャッシュ機構
・ペアを幾つか作っておき、貸し出し・返却動作のみを同期処理とする
・ペアが全て貸し出しになった場合のみ、新たなペアを作成して貸し出す
ようなイメージで合ってますか?
確かに、これならば同期、鍵の生成部分は最小限で済むかもしれませんね。
サーブレットのスレッド数とあわせておけば、新たなペアの作成も不要となるような気もします。
ありがたく参考にさせて頂きます。
39 :
デフォルトの名無しさん :2008/07/10(木) 08:19:54
質問です。 例えば、クラスXでクラスYのインスタンスを生成したとして、 クラスY内のフィールドの変化をクラスXで監視する方法って無いでしょうか? (フィールドの値を取得するのではなく、actionListenerのように変化に反応するような仕組みということです) あるいはクラスXかYでstaticフィールドを作り、それの変化を監視するという方法は無いでしょうか?
40 :
デフォルトの名無しさん :2008/07/10(木) 10:34:31
JAVAの乱数についての質問です。 int ran = rnd.nextInt() % 100; で0〜100までの値をranに数字をランダムで入れるまではわかるのですが、 50〜100までの値をranに数字をランダム入れるが分かりません。 ご提示お願いします。
0〜50までの乱数を出してそれに50足した値をranに入れればいいよね。
>>39 PropertyChangeListener とか、Observer と Observrable とか
>>40 ran = rnd.nextInt(50) + 50;
で、50 <= ran && ran < 100 になる。
最低値足せば良いだろ。算数の問題だ。
>>39 Yが監視できるように作られてないとだめ。
クラスYを自前で実装するなら、
変更時にイベント通知するように実装する。
Observerパターン。
Observableとか、PropertyChangeSupportとか使えばすぐ実装できる。
Yが誰かが作ったいじれないクラスで、通知機能がない場合、
フィールド操作がセッタでしっかり実装されてるなら、
セッタをオーバーライドしてなんとかできる。
ソース見れないとか、セッターなしでいろんなタイミングで操作されてるとかなら、
どうにもならない。非同期でいいなら、一定時刻毎に値をチェックする。(ポーリング)
45 :
デフォルトの名無しさん :2008/07/10(木) 11:06:51
>>43 足したら除々に足されていくのがプログラム。
質問です Windowsでjava6でJDBC使うアプリ作ってます。 通常、整数データは何も考えずintにしてましたが、 DBのデータ容量を考えると、不必要な桁数をもつカラムは、SMALLINTやTYNYINTで 定義した方がよさげかな、と思いました。 で、Java側のソースは、数値の取りうる範囲は自前でチェックしているので 別にintのまま、setInt()でも動くのですが、どうせJDBC側でキャストなどして 時間が掛かるだろうと思い、shortやbyteを使う事を検討しています。 shortにしてsetShortを使えばキャストは必要なくなりますので速いと思うのですが、 しかし、通常のjava側の計算処理において、shortでの計算などをがりがりやる事になりますが 暗黙の型変換などがあるので、ここでかえって時間が掛かるのではないかと危惧しています。 性能論議は実測が基本というのは分かっていますが、変更箇所も膨大ですので、変更前に short化は意味があるかどうか、多少でもアドバイス頂ければと思います。 よろしくお願いします。
普段はintで計算して、setするときだけshortやbyteにキャスト、でいいんじゃないか
>>48 すみません!目から鱗でした!それで行きます
でも、考えるとますます、Javaにおけるshortなどの存在意義が無いですよね
なぜ暗黙の型変換でintにするような仕様を入れたのでしょうかね
log4jですみません。infoとerrorで別ファイルにログを出力したいのですが
log4j.xmlの設定がわかりません。
下記のように設定しているのですが両方infoのほうに出てしまいます。
どこを修正すればよいでしょうか?
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='
http://jakarta.apache.org/log4j/ '>
<appender name="ERROR" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="c:\\hoge\\log\\hoge_error.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %p:%c:%m:%n" />
</layout>
</appender>
<appender name="TRACE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="c:\\hoge\\log\\hoge_trace.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %m%n" />
</layout>
</appender>
<category name="common">
<priority value="error" />
<appender-ref ref="ERROR" />
</category>
<category name="common">
<priority value="info" />
<appender-ref ref="TRACE" />
</category>
</log4j:configuration>
51 :
デフォルトの名無しさん :2008/07/10(木) 12:56:42
>>46 それは障害者の人を軽蔑することになるぞ。
その件はインポでnullを宣言したら普通に足せました。
>>51 まさか本人は恥ずかしくて二度と顔を出せまい
53 :
デフォルトの名無しさん :2008/07/10(木) 14:35:41
>>52 本人ですが何か?
ってかネット上で『羞恥心』はねえだろ。
宿題スレから誘導されてきました。 現在、swingを利用したGUIプログラムを作成しています。 catchブロックで例外を捕らえた場合は、 そのエラー内容を表示しろとのことなのですが、 これはJOptionPane.showMessageDialogで表示したほうがよいのか、 System.out.printlnで表示したほうがよいのか、 一体どちらなのでしょうか。 System.out.printlnだと、開発環境から起動しなかった場合に、 内容を確認できないと思っています。
どっちでもいい 仕様、案件、状況などに応じて適当なのを選べ あとエラーはSystem.outよりSystem.err
了解しました。 ありがとうございます。
InetAddress ia=InetAddress.getAllByName("www.yahoo.co.jp"); System.out.println(ia.getHostAddress()); これを現時点で実行すると13個のIPアドレスが表示されますが、 これはwww.yahoo.co.jpのホスト名を13台のPCが持っているということなのか、 www.yahoo.co.jpのホスト名を持つ一台のPCが13個のIPアドレスを持っているということなのかどちらなのでしょうか? またこのような1ホスト名:複数IPというのは前者の場合は分散化によるメリットが考えられますが、 後者のように一台のPCが複数のIPアドレスを持つことは何の意味があるのでしょうか?
60 :
59 :2008/07/10(木) 22:49:01
意味不明なこと書いてしまった…。 こっちです。 InetAddress ia[]=InetAddress.getAllByName("www.yahoo.co.jp"); for(int i=0;i<ia.length;i++) System.out.println(ia[i].getHostAddress());
61 :
デフォルトの名無しさん :2008/07/11(金) 00:14:14
Linux環境でJavaMailを使ってメール送信機能を実装したいのですが JavaMailってSendMailが立ち上がってる必要があるのでしょうか? それともSendMailなしでも単体で送信可能なのでしょうか?
62 :
デフォルトの名無しさん :2008/07/11(金) 00:19:40
>>59 javaと関係なく、DNS 関係を知ることを進める。
一台が複数のアドレスを持てれば、IP毎にマシンを用意しなくてすむ。
63 :
デフォルトの名無しさん :2008/07/11(金) 00:24:47
>>61 必ずしも *SendMail は* 必要無いが、*SendMail に代わるもの* が
動いている必要がある。
でなければそもそもメールが流れないことになるだろう。
どうもです、
>>63 試しにプロバイダのSTMPサーバーをメールサーバーに指定して
プログラムを動かしてみたのですがなぜか/var/log/maillogに
ログが出力されているのですがSendMailを使っていなくても
SendMailに中継されてたりするのでしょうか?
65 :
デフォルトの名無しさん :2008/07/11(金) 01:23:55
初めまして、インクリメントにつて質問なのですが class Sample4_6 { public static void main(String args[]) { int a = 0; int b = 0; b = ++a; System.out.println("代入前にインクリメントしたもので、bの値は、" + b + "です。"); } } 結果が、”代入後にインクリメントしたもので、bの値は、1です。” 次に class Sample4_6 { public static void main(String args[]) { int a = 0; int b = 0; b = ++a; System.out.println("代入後にインクリメントしたもので、bの値は、" + b + "です。"); } } 結果が、”代入後にインクリメントしたもので、bの値は、0です。”
66 :
デフォルトの名無しさん :2008/07/11(金) 01:24:56
訂正 後者は、”b = a++; ”です
67 :
65-66 :2008/07/11(金) 01:28:14
ここで、疑問なのですが 結果的には、"1"になるはずなのに どうして、後者が"0"なのか理解できません 出力される前に値がインクリメントされていないからでしょうか?
68 :
デフォルトの名無しさん :2008/07/11(金) 01:34:18
>>67 sysoutで言ってるじゃマイカ
>代入後にインクリメントしたもので、bの値は、0です。
結果的に 1 になるのは代入した b じゃなくインクリメントした a だろう
>>67 nt a = 0;
int b = 0;
b = a++;
これのbがなんで0かってこと?
>代入後にインクリメントしたもので
それなら理由は自分で書いてるとおりだけど。
int a = 0; if ( ++a == 1 ) 適当な表示 if ( ++a == 2 ) 適当な表示
if ( ++a == 1 ) 適当な表示 if ( a++ == 2 ) 適当な表示
int a=0; System.out.println(a); System.out.println(a++); System.out.println(a); System.out.println("---"); a=0; System.out.println(a); System.out.println(++a); System.out.println(a);
73 :
65-66 :2008/07/11(金) 02:11:57
ひ〜難しい。。。 考えても混乱します・・・・
74 :
デフォルトの名無しさん :2008/07/11(金) 07:20:15
b = a++; は b = a; a++; と等しい
75 :
デフォルトの名無しさん :2008/07/11(金) 09:13:03
>>74 インクリメントを使わずに書いた方がより分かり易くならないか?
b=a++; → b=a; a=a+1;
b=++a; → a=a+1; b=a;
Eclipseにあるプログラムをもってきて、 インポートすると、 Classはraw型です。総称型Class<T>への参照は、 パラメータ化する必要があります。 という警告がでます。 警告は java.lang.Class hoge; のような宣言部分で出てます。 とりあえず、よく分からず適当に、 java.lang.Class<?> hoge; としたら、警告は無くなったんですが、 こんな対応でいいか教えてください。
いいんじゃないの
JDBCを利用したプログラミングで苦戦しています。 insert文の実行にて、 stmt.executeUpdate("INSERT INTO mytable VALUES(10, 20)"); のようにするのではなく、 stmt.executeUpdate("INSERT INTO mytable VALUES(a, b)"); のように変数の値を追加したいのですが指定の方法がわからない状態です。 いろいろと調べてみたところ、${}でいけるような情報があったのですが、 それでも上手くいかない状態です。 変数の値を反映させるには、どうすればよいのでしょうか。
79 :
デフォルトの名無しさん :2008/07/11(金) 16:33:46
変数の前でダブルクウォーテーションをきればいい 普通の文みたいに+でつなげばよろし
80 :
デフォルトの名無しさん :2008/07/11(金) 16:39:08
補足 stmt.executeUpdate("INSERT INTO mytable VALUES(a, b)"); じゃなくて String str="INSERT INTO mytable VALUES("+a+","+ b")"; stmt.executeUpdate(str); にしてみては 携帯で急いで打ったからどっかちがうかも
81 :
デフォルトの名無しさん :2008/07/11(金) 16:55:44
IF文の条件を以下のようにしたいのですが書き方がわかりません。 教えてください。 String型のaのときは int型のaを返す
教えていただいた方法でうまくいきました。 79,80さん、ありがとうございました。
プリペアードステートメントを使うと、SQL文の解析を毎回行わずに済むようですね。 変数の値が固定である場合には、利用できそうです。 参考になる情報、ありがとうございました。
>>85 > 変数の値が固定である場合には、利用できそうです。
?
どう言うこと?
まあ、今時SQL文を+でつないでるようじゃ プロ失格でしょ。
どうだろ。 ユーザによる検索なんかも、幾つも作っておくもの? 項目の組み合わせの変わる場合も?
>>85 違う。変数で渡す場合はプリペアードステートメント必須。
もし使ってないコードが納品されたら問答無用で突っ返す。
>>89 SQL自体は動的に組替えても、その中に外部から来るデータは含めない。
要は、プリペアードステートメントを含むSQLを組み立てて、それに外部
から来るデータを渡す。
DBやDBコネクタにバグがある可能性もある(特にマルチバイト文字)から、
100%安心できるわけではないが、少なくとも自分の担当範囲で脆弱性を
埋め込む可能性は減らせる。
プレースフォルダのパラメータは使いたいがPrepareしないという選択肢はなかったんだっけ? JDBCじかは最近やってないから忘れてしまってる。
切実に困ってます… メニューのボタンに触れるとサブナビゲーションが横にスクロールして出てきて、 マウスをボタンから離すとサブナビゲーションが元に戻る、というスクリプトはどのようにすればいいのでしょうか。 超初心者で、探してみたんですが、そういった方法の名称もわからないので見つけることができませんでした。 どなたか教えて頂けませんでしょうか。
>>93 >スクリプト
javascript? だったらすれ違い。
>>94 そうでしたか。
それではそっちで聞いてみます。
ありがとうございました
質問です。 Windowsをメインに考えているのですが、javaの暗黙の型変換にはやはりコストが 掛かるものと考えておいたほうが良いのでしょうか? たとえばメソッドの、boolean method(int i){return i >10;} とboolean method(short i){return i >10;} は 全く同じバイトコードにコンパイルされますが、これでもやはり実行時にJVM内部で変換のコストが 発生しているのでしょうか?
言葉足らずですみません。 バイトコードの1行目が、 0 iload_1 [i] なのですが、つまり、ここにshortの変数をぶち込んだ時に、 内部でintへの変換が発生すると思うのですが そういう認識であってますでしょうか?
>>97-98 コストはかかっているのかもしれないが、1つインスタンスをnewするコ
ストに比べたら何十万分の一とかそういうレベル。
100 :
デフォルトの名無しさん :2008/07/12(土) 00:18:57
質問です "if else if else if else" と "if if else else else" は、同じ意味なのでしょうか?
>>100 2つ目はコンパイルエラーなんじゃ。 if () { } 括弧をつけてきちんと書いてみなされ。
102 :
100 :2008/07/12(土) 00:30:18
レス、ありがとうございますが・・・ ????
if と else は一対
>>100 の質問の意味はかりかねる。実は文字列の比較をしたいだけでは " とか付いてるし。
105 :
100 :2008/07/12(土) 00:37:33
>>103-
>>104 はい、この二つの文法は意味が同じか訊きたいのです。
どう考えたら同じに思えるんだ。
107 :
101 :2008/07/12(土) 00:42:11
if () { } else if { } else if { } else { } と if () { if () { } else { } else // なんだよこれ } else { }
108 :
デフォルトの名無しさん :2008/07/12(土) 00:45:39
FileFilterについて質問します。 ファイルを開くときにフィルタを適用して、拡張子による選別は実現できたのですが、 保存のときにフィルタを適用することができません。 例えばメモ帳などでデータを保存するときに、ファイルの種類をテキストタイプに指定すれば ファイル名にわざわざ拡張子.txtを入力せずともテキストファイルの保存ができると思いますが、 このような機能を実現するには、自分で処理部分を実装するしかないのでしょうか?
>>108 FileFilterと何が関係あるのかわからない。
ユーザにファイル名を入力してもらったら、filename + ".txt" ってや
るだけでは?
>>109 既に".txt"ってついている場合を分けなきゃな
111 :
108 :2008/07/12(土) 01:25:53
メモ帳で保存した場合、ファイルの種類にテキストタイプを選択したあと、 ファイル名に"test.java"と入力して保存すると、javaファイルとして保存されるんです。 ファイル名から拡張子を抜き出すことは可能なのですが、条件分けに戸惑ってまして… FileFilterを利用すれば面倒なことは勝手に処理してくれるのかな、と思ったのですが、 どうやらそうじゃないみたいですね。
112 :
100 :2008/07/12(土) 01:40:29
>>106 >>107 はぁーなるほど、訂正ありがとうございます。
学校の資料見ると、上記の二つの文は書き方が違うだけで
同じと書いてありましたので・・・・
>>112 学校の資料が間違っていたか間違って覚えてきたのか。
短いプログラムを書けば実証できるんだからナゼやってみない?
114 :
100 :2008/07/12(土) 01:59:36
>>113 はい、やってみます。
サンクスですた。。。
>>111 何かを勘違いしていると思われる。
保存するファイル名がtest.txtだろうがtest.javaだろうが、ファイルの
中身は同じだよ? Windowsのエクスプローラがファイル名を見て「テキ
スト ドキュメント」とか種類を表示しているだけ。
116 :
115 :2008/07/12(土) 02:11:54
あ、メモ帳の例が悪いだけかな。 たとえば画像処理するプログラムで、test.jpgならJPEGで保存、 test.bmpならBMPで保存、という感じに保存されるデータ自体が変わるケー スもあるね。 そういうのは自分でコードを書かなきゃダメだ、もちろん。
117 :
108 :2008/07/12(土) 03:08:51
無事解決しました。 意見していただいた方、ありがとうございました。
118 :
デフォルトの名無しさん :2008/07/12(土) 04:12:21
import java.io.*; class Sample5_6 { public static void main(String args[]) throws IOException { System.out.println("苗字を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String str1 = "山田"; String str2 = "伊藤"; if(str1 == "山田"){ System.out.println("太郎が入力されました。"); } else if(str2 == "伊藤"){ System.out.println("次郎が入力されました。"); } else{ System.out.println("1と2を入力して下さい。"); } } }
119 :
118 :2008/07/12(土) 04:15:18
これが、思い通りになりません 出力が ”山田”を入力したら”太郎”に ”伊藤”を入力したら”次郎”に なるようにしたいのですが、 後者が、どうしても、”伊藤”と入力すると”太郎”が 出力されてしまいます
>>118 equals
つか、Javaで真っ先に習うことの一つのような気がするが……。
慣れるまでは結構やると思うけどね
122 :
118 :2008/07/12(土) 04:48:57
equals は、まだ習っていません・・・ できたら、ソースを訂正していただけないでしょうか・・・?
ていうかあれだな、strにキーボードで打った文字入れてるのに if文で使ってないのは比較以前の問題だな。。。 とりあえずequalsは「java 文字列比較」で調べればいいよ
124 :
118 :2008/07/12(土) 05:58:04
ありがとうございました
import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.MappingDispatchAction; public ActionForward select (ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res ) throws Exception{ DBManagement dbManager = new DBManagement(); ArrayList alTask = new ArrayList(); ServletContext scContext = servlet.getServletContext(); DataSource dsSource =(DataSource) scContext.getAttribute(Globals.DATA_SOURCE_KEY); alTask = dbManager.selectData(dsSource); req.setAttribute("input", alTask.toArray()); return map.findForward("index"); } 上記のコードがあります。selectメソッドの5行目や6行目では、newを使ってインスタンスを生成しています が、次の行のservlet.getServletContext();ではインスタンスを生成しなくてもいきなり servlet.getServletContext();という風にgetServletContext() メソッドを使えています。これは何故でしょうか? ぐぐってもわからなかったので、ご教授いただければ幸いです。 どうぞ宜しくお願い致します。
126 :
デフォルトの名無しさん :2008/07/12(土) 08:35:06
>>125 select メソッドがあるクラスに servlet という フィールドは無いか?
もしくはそのクラスが extends しているクラスに servlet という protected か public なフィールドは無いか?
>>126 早速のレス有難う御座います。
私が見た限りでは、どちらもありませんでした。
なお、エクリプスで上記のコードを見ると、servlet.getServletContext() のservletだけ
青文字になっていたのでマウスのカーソルを当ててみたところ、
ActionServlet org.apache.struts.action.Action.servlet
Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.
と出ました。何かしらご教授いただければ幸いです。どうぞ宜しくお願い致します。
ActionServlet org.apache.struts.action.Action.servlet org.apache.struts.action.Actionのservletだろ
>>128 レス有難う御座います。
ということは、インポートしたパッケージに含まれるオブジェクトは、newで
インスタンスを生成しなくてもいきなり使える、ということでしょうか?
>>130 public class LoginAction extends Action {
とかしてるんじゃないの?
>>131 レス有難う御座います。
いえ、public class 〜Action extends MappingDispatchAction {
になっています。なにかご教授いただければ幸いです。どうぞ宜しく
お願い致します。
>>132 MappingDispatchActionは、Actionのサブクラスなのでは?
>>130 インスタンス変数と継承の関係について理解が足りない。
135 :
デフォルトの名無しさん :2008/07/12(土) 15:39:11
最近Javaを始めたものですが、以前にC++を扱っていた人が 「JavaでGUIを作る気になれない」 といっていたのを思い出しました。 どちらが優れてるか等の議論はしませんが、それぞれのメリット、デメリットを教えていただけないでしょうか?
>>136 そこに書いてある、解法処理を登録する奴が一番標準的
なるほど、そうでしたか。 この解放処理をWindowAdapterクラスを継承したクラスの windowClosingで処理するという方法はありでしょうか。 試した限りでは、上手く動作しているのですが。
>>138 java.lang.Runtime#addShutdownHook(java.lang.Thread) 使ったほうが、
異常終了(例えば Windows の ctrl-c による強制終了とか)でも終了を捕捉できる可能性が高くなる。
必要ないならアリだと思う。
>>135 Java *だけで* ある簡単な GUI を作ってみて、
C++ *だけで* 同じ GUI を作ってみて、
比較してみたら何か分かるんじゃないか?
>>139 レスありがとうございます。
もう一度、検討しなおします。
テキストエリア内の現在のキャレットの位置を(X行,Y列)で取得するにはどうしたらいいんでしょうか? getCaretPosition()でオフセットを取得して、そこから(X行,Y列)への変換を試みたのですが、 うまくいきませんでした。 どなたか、御教示下さい。
>>143 やったこと無いけど、
getCaretPosition() を使った方法じゃダメなの?
swingでウィンドウを作ってみたんですがうまく行きません OSはVistaの32bit、javaのヴァージョンはVersion 6 Update 7です。 コンパイルしたものを実行するとウィンドウは出てくるんですが ボタンやテキストエリア等の中身が一切表示されません。 ウィンドウサイズを手動で変えると表示されます。 別のウィンドウをアクティブにしてから戻ると、 その別のウィンドウと重なった部分が消えてしまいます。 解決策はありますでしょうか。よろしくお願いします。
>>145 swingの描画ぶっこわしてるんじゃない?
paintComponent()で描画してる?
149 :
143 :2008/07/12(土) 22:34:43
>>144 getCaretPosition()でオフセットを取得したあと、値から
現在のキャレットの行と列の位置を判断する方法が思い浮かばないんです。
Hello|(←キャレット)
World
例えばこの位置でのオフセットの値は5になるんですが、この値から
行と列の位置(1,6)を判断する方法が思い浮かばなくて…
>>146-148 早々のレスありがとうございます。
スレ違いだったようで失礼しました。
paintComponent()というのを使っていないので
調べてみようと思います。解決しなければswingのスレか
ソースうpしてまた質問させてください。
ありがとうございました。
>>149 JTextArea ta;
として、
こんな?
int y =0;
int x =1;
int cnt = ta.getCaretPosition();
for(String s:ta.getText().split("\n")){
if(cnt<=s.length()){
y=cnt+1;
break;
}else{
cnt=cnt-s.length()-1;
x++;
}
}
152 :
143 :2008/07/12(土) 23:09:48
>>151 ありがとうございます!
無事解決しました。
153 :
デフォルトの名無しさん :2008/07/12(土) 23:45:31
GUIおぼえなくちゃだめ?
netbeans使えば?
155 :
デフォルトの名無しさん :2008/07/13(日) 00:52:58
>>135 正直どっちでもいいよ。JavaでGUI作ってもC++で作っても
パフォーマンスの違いなんて昨今じゃそこまで広がらない
けど個人的にはC++のほうがなんかいいんだよなぁ〜。。。なんでだろw
まぁ見た目ぐらいだな
GUIなんてプログラムの本質ではない
数年前、いらないMMX Penとか河童celの入ったPCでtomcatの実験をしてみたら 遅くて使い物にならなかったのでjavaの利用を諦めていたのですが 最近話題の激安鯖などはそこそこ使えますか?
CPUよりは、どっちかってーとメモリの問題だね。128MB程度では遅すぎる。 512MBくらいあればXPでも遊べるよ。 DBもリッチなIDEも全部入れるとなると、1GBくらいないときついけど。
160 :
ひみつの検閲さん :2024/11/30(土) 03:08:07 ID:MarkedRes
161 :
デフォルトの名無しさん :2008/07/13(日) 12:35:16
substring(0,0)って使えるんですか 最初の一文字だけを取り出すケースが出てしまうものを作ろうとしているのですが・・・・・・
>>161 それは0文字じゃね
最初の1文字なら substring(0, 1)
普通にcharAtでよくね?
コピペ君って馬鹿だな、まで読んだ。
クラスの継承を使ったときに スーパークラスではpublicなメソッドをサブクラスではprivateとして隠蔽したいときはどうすればいいですか? 例えばHashtableクラスを継承したMyHashtableを作って、#get(Object key)を使わせたくない、等です。
PS 継承ではなく委譲にして必要なメソッドだけ実装する という方法はNGです
無理です サブクラスはいつでもスーパークラスにキャストできるので、どっちみち無駄です 使わせたくないだけなら、オーバーライドして例外を投げる方法がなくもない public Object get(Object key) { throw new UnsupportedOperationException(); } しかし継承より委譲の方が良いのではないか
しかしgetだけ封じても、iterator使えば列挙できるし、putやremoveすれば元の値が返ってくるし、 完全に値を取得できなくするのはなかなか面倒い気がする
継承でのアクセス修飾子の変更は特権を広げる方向だけなのでだめ。 隠したいメソッドを抜いたインターフェイスを準備して実装、 そのインターフェイスを通して操作するのはどう。
うーむ、やはり委譲ですかね・・・ どうもありがとうございました
>>167 そんなリスコフの置換原則を全力でぶっちするような設計は却下。
大人の事情で、仕方なくJavaの実装を行うことになりました 深入りしたくないので、C/C++で実装したDLLを使いたいのですが 可能でしょうか? VS2005、C/C++職歴6年生です。
可能ですが、その大人の事情とやらが使わせてくれないかも Javaアプリケーションは100%Javaで完結していることが好まれることがある 使っていいことになったら、JNIでぐぐれ
>>174 原理的にはやればできる。
お勧めはしないがするのはアンタだ。やりたいようにすればいい。
JNI使えば、Java側からC/C++の関数を呼び出したり
逆にC/C++側からJavaのオブジェクトにアクセスできたりできるので、
やりたいことは多分できるはず。
>>175 >>176 Thx
JNIまたは、DLLをJavaで書き直すか、今晩ゆっくりトレードオフを考慮し
月曜の朝決めます
178 :
デフォルトの名無しさん :2008/07/14(月) 00:06:23
少し前に二重起動に関して質問した者です。 二重起動の確認にFileOutputStreamを利用するのが一般的 ということなのですが、 この方法を使用するとロック用に使用しているファイルが 普通にWindowsファイルシステム上で確認できてしまいます。 これを確認できないようにするには、どうしたらよいのでしょうか。
普段あんまり確認しないような場所 (C:\Documents and Settings\username\Local Settings\Temp とか) を使えばいいのでは
180 :
デフォルトの名無しさん :2008/07/14(月) 00:27:48
レスありがとうございます。 確かにそうなのですが、ユーザーからすれば、 やはり気持ちのよいものではないと思い、 何か策はないかと考えてしまう次第です。 また、一時ファイルのパスのDocuments...の部分が、 vistaとxpで違うのが、厄介なところです。 う〜ん...。
環境変数のtempから取る
レスありがとうございます。 早速、調べてきます。
次のようなコードで問題なく動作しました。 色々とありがとうございました。 stream = new FileOutputStream(new File(System.getenv("TEMP") + "\\lock"));
184 :
デフォルトの名無しさん :2008/07/14(月) 03:35:16
class SwitchSample { public static void main(String args[]) { int cal = 100; for(int i = 1; i<=5; i++){ switch(i){ case 1: case 2: cal = cal + i; break; case 3: cal = cal - i; break; case 5: cal = cal / 2; break; default: cal = cal * 10; } System.out.println("カウント数は、" + i + "です。" ); } System.out.println("計算結果は、" + cal + "です。" ); } }
185 :
184 :2008/07/14(月) 03:36:02
どうして、結果が500になるのかわかりません・・・ 解説お願いします。
>>185 どうして結果が500にならないと思うのか分かりません。
どんな結果になると予想したのさ i=1の時にswitch節はcase 1: に一致して、 breakが無いからcase 2: に書いてある cal = cal + i; が実行されるって分かってる?
188 :
184 :2008/07/14(月) 03:45:47
cse1が、一回目の繰り返しですよね?100 + 1 = 101ですよね? で、cse2が、二回目の繰り返しで、100 + 2 = 102 で・・・・・????????????
189 :
デフォルトの名無しさん :2008/07/14(月) 03:52:25
中級の本おしえて
>>184 初期値: 100
i=1: case 1 → 100+1=101
i=2: case 2 → 101+2=103
i=3: case 3 → 103-3=100
i=4: default → 100*10=1000
i=5: case 5 → 1000/2=500
結果: 500
191 :
184 :2008/07/14(月) 04:41:16
>>190 レス、ありがとうございます。
疑問がまだあります、Breakで一旦抜けているのに
i=1: case 1 → 100+1=101
i=2: case 2 → 101+2=103
のように、case2で103になったのを、それ以外にあたいする
case 4に、103という数値をいれてもいいのでしょうか?
192 :
184 :2008/07/14(月) 04:48:22
なんとなく、わかりましたが、 たとえば、こうなるとき for(int i = 1; i<=5; i++){ for(int i = 1; i<=4; i++){ for(int i = 1; i<=3; i++){ for(int i = 1; i<=2; i++){ で、i<=3なら此処で抜けて 以前、まで(3以下まで)の処理がされる継承されてるからですね? そして、case 3でブレイクということでしょうか?
193 :
184 :2008/07/14(月) 04:49:15
簡単に言いますと、途中に(3にいくまで)Breakがあるから ぬけだされないのかと・・・?
javaでWeb上のXMLを取得するプログラムを組みたいのですが 取得部分のやり方を教えていただけませんか。 できればSAXでお願いします。
>>191 >>192 なにを言ってるのかさっぱりわからん。
switch - case の break を for の break と勘違いしてるか?
両者は別のもの、というか、case にある break では for は終わらないぞ
>>194 WebからXMLを取得することとSAXを使うことは直接は関係ない。
まずWebからHTMLを取得することを勉強しなさい。
198 :
184 :2008/07/14(月) 05:01:31
出直してきまふ むじぃ
>>198 まるっきり勘違いを積み重ねてるようだから、出直して分かるか怪しいな
先のコードに行番号つけて、処理されると思っている順番に番号を書き出してみるのがいいだろう
>>197 Htmlを取得してそのXMLを読み込んで利用という認識でOKですか?
201 :
197 :2008/07/14(月) 05:15:39
>>200 OKじゃない。
Webから何かを取得するという処理は、それがXMLだろーが
HTMLだろーが画像だろーが動画だろーが関係ない。
取得した後、XMLだったらSAXなりDOMなりXSLTなり
なんでも使って処理すればいい。
202 :
デフォルトの名無しさん :2008/07/14(月) 08:01:02
URLオブジェクトをつくり、ConnectURでゲット要求だして取り敢えずやってみ
203 :
130 :2008/07/14(月) 08:53:46
>>132 >>134 亀レスで申し訳ないです。色々調べてみたら、
java.lang.Object
org.apache.struts.action.Action
org.apache.struts.actions.DispatchAction
org.apache.struts.actions.MappingDispatchAction
で、
204 :
130 :2008/07/14(月) 08:56:41
org.apache.struts.action.Action にservletというフィールドがありました。 有難う御座いました!!
JSPで1つのテキスト欄に対して複数の送信ボタンを作って処理を分けたいのですが、 それぞれの送信ボタンに異なるnameの値を設定してそれをサーブレットでどのボタンが押されたか判断し、その後の処理を分岐させようとしてもうまくいきません。 JSPで <form method="POST" action="サーブレットのURL"> <input type="submit" name = "1" value="追加" /> <method="POST"> <input type="submit" name = "2" value="更新" /> (省略) </form> サーブレットで String name = req.getParameter("name"); out.println("name="+name); とやってもname=nullとしか表示されずnameの値を取得することが出来ません。 どこが間違っているのでしょうか?また、他に良い方法はあるのでしょうか?
>>205 String name = req.getParameter("1");
取るならこうだろ
実行可能なjarファイルを起動すると、 JDBCドライバが見つからないというエラーが出て困っています。 eclipceだと起動するけど、jarファイルにすると起動しないというパターンです。 マニフェストファイルにclass-pathとJDBCドライバのフルパスを書いて、 そのパスにJDBCドライバを置いているのですが、 何故か思うようにいきません。 どこに問題があるのでしょうか。
すいません。またnameの事でエラーが出てしまいました。 name = req.getParameter("1"); とやるとnameが1の送信ボタンの時は問題ないのですが nameが2の送信ボタンのときは nameを表示したりnameで判断させようとしたときにエラーが出てしまいます。 受け取るものがなくてnameに何も入っていないのが問題だと思うのですが、 あらかじめnameに"null"などどいてれもやはり同じエラーが出ます。 どうか解決策をお願いします。
>>209 どっちも name="buttonname" にして
String value = req.getParameter("buttonname");
で value.equals("追加") か value.equals("更新") かで見るとか?
>211 出来ました。ありがとうございます。 nameはこんな使い方も出来るんですね。
>>212 ぬるぽもちゃんと理解しないと今後つまずくと思うのだが
>>212 たぶん勘違いがあると思うが。
req.getParameter() で返されるのは <input name="A" value="B"> の
value の方("B")だ。
name = req.getParameter() という書き方から推測すると name の方("A")が
返されると思っているのではないか。
208です。 試しに、System.getProperty("java.class.path")を実行してみると、 どうやらクラスパスが通っていないようです。 ただし、マニフェストファイルには確かに次のように書いています。 Class-Path: C:/mysql-connector-java-5.1.6-bin.jar このようなフルパスの指定に何か問題があるのでしょうか。
217 :
デフォルトの名無しさん :2008/07/14(月) 13:51:59
メモ帳にdoubleで生成した乱数が40万個あります。 そのデータをあるプログラムで読み込み計算し、上書きするという作業をしています しかし、乱数、及び配列の数を40万個から50万個に変えたとき outofmemoryerrorと表示されてしまいます。環境はNetBeans6.0.1です。 PCのメモリは1GBあります。
>>217 そのプログラムをもっとメモリを使わないで済むように改良するんだ!
java7になってBigDecimalを言語的にサポートされるので BigDecimalをつかうプログラミングをするのはjava7になってから始めた方がいいですか?
221 :
217 :2008/07/14(月) 14:25:41
失礼しました。 質問内容は、乱数、配列が50万個でもOutOfMemoryerrorを出さず、 プログラムを動くものにしたいのですが、どのようにしればいいでしょうか
メモリーを2ギガにする
223 :
115 :2008/07/14(月) 14:33:15
>>221 javaのコマンドラインフラグで使用するメモリを増やす。
>>213 根本的な原因を理解しないといけないということですね。
String name = req.getParameter("2"); とするとnameが1の送信ボタンが押された場合、nameが2の値が存在しないので
それをnameに入れるとnameが何も入ってない状態(null)になるので、nameを判断しようとした場合、値がないのでエラーになるものだと思いました。
>>211 の解決策はnameを統一し、nameの値(送信スイッチごとのvalue)で判断する。
こうすればどのスイッチがおされても必ずnameに値が入るのでnullにならない。というものだと解釈しました。
>>214 最初(
>>205 )はnameに'A'が入ったものが返ってくると思い、nameと書いていましたが、
アドバイスを頂き、今は理解できたと思います。
ありがとうございました。
>>215 たしかこうでは
Class-Path: C:/mysql-connector-java-5.1.6-bin.jar;.
>>224 if (name.equals("追加") {
}
だけだとエラーになるけど
if (name != null && name.equals("追加") {
}
とすればエラーにならないでしょ。
if (name != null && name.equals("追加") { これって左が先か右が先かって順番決まってたっけな?
決まってる 左が先
クローンを自動で作る方法ありませんか?
implements Cloneable すればいいだけでは
>>225 レスありがとうございます。
試してみたのですが、やはりうまく動いてくれません。
もう、よくわからないので、jre/lib/extにドライバを置こうと思っています。
233 :
217 :2008/07/14(月) 15:21:49
>>222 仮想メモリを2Gにしましたが、うまくいきませんでした。
>>223 コマンドラインフラグを調べましたが、良くわかりませんでした。
プログラム中で宣言するのですか?それとも、javaの設定を変えるのですか?
>>226 試してみたところ確かに下のはエラーになりませんでした。
上のはnameと比較しようとするとnameがnullなのでエラーになる。
下のはnameがnullかどうかチェックし、nullじゃなかったら比較に入るのでnullでもエラーが出ない。ということですね。
>>224 改良してみよう。
二つのボタン <input name="1" value="追加"><input name="2" value="更新"> の場合、
value の値は表示にも使われることもあって、プログラム内で判断に使うには向かない。
そこで value を見なくて済むように、それぞれが押された場合に req.getParameter() が
何を返すかもう一度見てみる。
追加ボタン押下時:
req.getParameter("1") = "追加"
req.getParameter("2") = null
更新ボタン押下時:
req.getParameter("1") = null
req.getParameter("2") = "更新"
ということは、押されたほうの req.getParameter() の返値は *nullでは無い* と
一般化できる。
だから
if(req.getParameter("1") != null) {
// 追加が押された場合の処理
} else if(req.getParameter("2") != null) {
// 更新が押された場合の処理
}
と書くことも出来、これなら value の値が例えば"追加"が"ついか"と変更されても
プログラム側は修正しなくて済むことになる。
>>236 そういう考え方も出来るんですね。勉強になります。
>>208 JDBCドライバのフルパスの場所に、ドライバのjar置いてあるだけ、とか言う落ち?
>>8 >>10 は一体何何だ?
福田やすおチンパン総理のことかと思った
2週間弱でアドベンチャー作るっていまいちよくわからんな
244 :
243 :2008/07/14(月) 22:47:12
すみません メソッドまちがえました。 request.getParameter() でしたorz
245 :
デフォルトの名無しさん :2008/07/14(月) 23:03:40
javaでGUIでゲームを作ろうとしています。 制限時間30秒のゲームを作ろうと思うんですが、 どうやって時間をカウントダウンさせればいいかわかんないです… たぶんそういうコンポーネント?があるのかなと予想してるんですが…
>>245 java.util.Timerないしはjava.util.concurrent.ScheduledExecutorService
後者はJava SE 5.0以降のみ
あとjavax.swing.Timerなんてのもあったな
やはりコンカレント工学
250 :
デフォルトの名無しさん :2008/07/15(火) 10:52:22
すいません、質問お願いします。 Fileクラスのコンストラクタを作るのに "File(String parent,String child)"でつくると、 mkdirsは実行できるcreateNewFileのところで実行エラーになります。 フォルダを見るとParentフォルダの中にchildフォルダができています。 たとえばString childに"test.txt"と入れても"test.txt"というフォルダが作られてしまいます。 はじめに"File(String pathname)"でmkdirsでディレクトリを作っておいて、 "File(File parent,String child)"だとうまくファイルが作成されるのですが。 APIを見てもわからなく本当に困っています。 よろしく、お願いいたします。
>>250 何がわからないんですか?
両方とも、その動作で正しいですよ。
mkdirsは、parentまでではなく、自分自身のところまでディレクトリを作る new File("c:\\foo\\bar\\test.txt").mkdirs() なら、c:\foo\bar\test.txt というディレクトリを作る ちなみに new File("c:\\foo\\bar\\test.txt") と new File("c:\\foo\\bar", "test.txt") は同じ
253 :
217 :2008/07/15(火) 12:31:06
アドバイスしてくれた方々、ありがとうございました。 いろいろ調べ、改良も考えたのですが、うまくいきません。 以下は私の作成したソースです。改良できそうなところをご指摘ください。 package javaapplication2; import java.io.*; import java.util.*; public class LoadtoSave { public static void main(String[] args) { //データ格納用Listの準備 List<String[]> list = new ArrayList<String[]>(); double WAh[] = new double [600000]; try { FileReader fr =new FileReader("WA.txt"); BufferedReader bf = new BufferedReader(fr); String st = null;
254 :
217 :2008/07/15(火) 12:31:38
while ((st = bf.readLine()) != null) { String[] line = st.split(","); list.add(line);//ファイル上1行の各数値を文字列として格納 } bf.close(); int i=0; for(String[] values: list){ for(String value: values){ double num = Double.parseDouble(value);//文字列を数値型に変換 WAh[i]= num; i=i+1; }}} catch(IOException e) { e.printStackTrace(); } //ここでWAhについて大量の計算(並列的) try { File outFile = new File("WA.txt"); FileWriter out = new FileWriter(outFile); PrintWriter pw = new PrintWriter("WA.txt"); //(8)書き込むデータがなくなるまで書き込み for(int j=0;j<600000;j++){ pw.print(WAh[j]); pw.print(","); } pw.close();} catch(IOException e){ }}}
package pkgweb; class Test { private String str; Test(String s){str=s;} public String getStr() {return str;} public void setStr(String str) {this.str = str;} } このファイルに対してjavac pkgweb\Test.java -d ..\WEB-INF\classesを実行してWEB-INF\classes以下にクラスファイルを作成し、jspから使用したいのですが pkgweb.Test cannot be resolved to a typeとエラーが出ます。 jspの中身は以下のものです。 <%@ page contentType="text/html; charset=Windows-31J"%> <html lang="ja"><head></head> <body> <%pkgweb.Test a=new pkgweb.Test("hoge");%> <%=a.getStr()%> </body></html> 色々ググったりしたのですが解決方法が分かりません。 どうしたら良いのか教えてください。
257 :
256 :2008/07/15(火) 12:59:27
>>255 ごめん。
253-254から繋がってるかと思った。
>>253 1レスに入りきらないようなコードを貼られても見づらいし、
並列か並行か知らないけど、分けられるなら、一辺にやらなければよいのでは?
>>253 ,254
入力で、ファイル内容を全部Stringに入れてからdoubleに変換してる所と、
出力で、改行入れないで1行に出力してる所が少し気になった。
260 :
デフォルトの名無しさん :2008/07/15(火) 13:17:46
>>253 250 で書いているような個所が見当たらないぞ。
>>250 あるファイルを示すパス path があるとして、その親ディレクトリを含めてファイルを作成したいなら
File file = new File(path);
file.getAbsoluteFile().getParentFile().mkdirs();
file.createNewFile();
としたらどうだろうか。
Windows環境でProcessBuilderでコマンドをバックグラウンドで実行して放置しておきたいのですが、 コマンドが標準出力メッセージを多量に出し、別スレッドでInputStreamを適宜読み込まないと コマンドがバッファ一杯で途中で止まってしまいます。 標準出力・エラー出力がたまらない方法ありましたら教えてください。
262 :
デフォルトの名無しさん :2008/07/15(火) 14:11:35
コマンドを標準出力に出力しないオプション付けて実行 nullにリダイレクトw
263 :
250 :2008/07/15(火) 14:17:16
>>250 です。
皆様、ありがとうございました。
>>252 様
>>new File("c:\\foo\\bar\\test.txt") と new File("c:\\foo\\bar", "test.txt")
後者のようにコンストラクタを作って、
そのあとmkdirsとcleatefileしたらファイルを作るところでエラーで
確認すると
foo/bar/test.txt/というようなすべてがフォルダでできていたのです。
>>260 様
>>253 は私の書いたものではありません。
教えていただいた方法試してみます。
ありがとうございます。
ただ、疑問なのですが、普通は
>>new File("c:\\foo\\bar", "test.txt")
ではbarの中にtest.txtという「ファイル」ができるはずですよね?
>>263 いいえ
barの中にtest.txtというディレクトリを作ります
mkdirsはディレクトリを作るメソッドです
265 :
260 :2008/07/15(火) 15:00:08
>>263 >>253 すまない、名前ちゃんと見ていなかった。
恥かし隠しに話題を変えるかw
>コンストラクタを作って
という表現は変だ。
コンストラクタはクラスのインスタンスを作るためのメソッドの名前みたいなもんで、
new クラス名(〜) というのはインスタンスを実際に作っている。
なので「コンストラクトしている」とかならまだいいかもれないが、
「コンストラクタを作って」はいない。
また、Fileクラスは(その名前に反して)ファイルだけを処理するわけじゃない。
基本はパス名を処理するものであって、パスの最後の部分がファイルかどうかは気にしない。
”この名前のディレクトリを作れ”と指示(mkdirs())されたら(指示したほうは
最後の部分はファイルのつもりでも)Fileクラスはディレクトリとして作ってくれてしまうし、
それが仕様となってる。
>>255 public class Test {
にして
public Test(String s){str=s;}
にすれば、どう?
267 :
デフォルトの名無しさん :2008/07/15(火) 15:51:31
>>253 package javaapplication2;
import java.io.*;
public class LoadtoSave {
public static void main(String[] args) throws IOException {
double WAh[] = new double[600000];
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("WA.txt"));
String line;
for(int i=0; (line=br.readLine())!=null; ) {
for(String value : line.split(",")) WAh[i++]= Double.parseDouble(value);
}
} finally {
if(br != null) try { br.close(); } catch(IOException e) { /*無視*/ }
}
// ここでWAhについて大量の計算(並列的)
PrintWriter pw = null;
try {
pw = new PrintWriter("WA.txt"); //(8)書き込むデータがなくなるまで書き込み
for(double v : WAh) pw.print(v+",");
} finally {
if(pw != null) pw.close();
}}}
動かしてないがこんな感じには纏まるだろう。後はその多量の計算というところを
例えば10万件ずつ6回の処理に分けられないかとかだな。
268 :
217 :2008/07/15(火) 16:05:35
>>259 >入力で、ファイル内容を全部Stringに入れてからdoubleに変換してる所と、
その他のやり方というか、王道的なものがありましたら、
教えて貰えると助かります。
>出力で、改行入れないで1行に出力してる所が少し気になった。
csv形式で書き込み、読み込むのを目的としてそうしました。
>>267 具体的なソースありがとうございます。
私の書いたソースと大きく変わったところは私には分かりませんが、
それを用いたときOutOfMemoryとならないか試してみます。
269 :
255 :2008/07/15(火) 19:32:12
>>266 レスありがとうございます。
今public修飾詞に変更してコンパイルしてみましたがやっぱりダメでした。
ところで最大ヒープサイズの設定はしたのかね 大量の計算何してるのかしらないけど 40〜50万で64m使い切るなら256mにすりゃ160〜200万くらいまでいけるんじゃないのか? とりあえず動かすだけだったら.
>>269 WEB-INF以下のパスはあってる?
\WEB-INF\classes\pkgweb\Test.class
プログラムって大変だな。学期末のレポート提出のために頑張ってるけど だるすぎる。内容は初歩中の初歩なのに。
>>271 今各デプロイを見直したところ、
Tomcat 5.5\conf\Catalina\localhost以下の
web.xmlのdocBaseに書いたパスが一階層間違っていました!
/webをアプリケーションフォルダに設定したつもりが/web/jspになっていて
WEB-INFディレクトリを/web以下に置いていたための間違いだったようです。
レス頂き構成を見直したことが発見に繋がりました、ありがとうございます!
274 :
デフォルトの名無しさん :2008/07/15(火) 22:13:16
>>217 20桁くらいの数字が40万もあれば10Mくらいいきそうだな。
まぁどうすればいいかは知らんけど
275 :
デフォルトの名無しさん :2008/07/15(火) 23:37:04
質問させて下さい。 全角半角の混ざった文字列の先頭から10byte分切り出したいのですが、 もし、10byteの切れ目が全角文字の1byte目だった場合、 9byteで切り出したいというような処理ってどうやって書けばいいでしょうか?
NIOでバイト単位で扱うとか
277 :
デフォルトの名無しさん :2008/07/16(水) 00:01:24
>>275 結果文字列=""
合計バイト数=0
取出文字位置=0
while(取出文字位置 < 文字列の文字数) {
文字=文字列[取出文字位置++]
合計バイト数+=文字のバイト数
if(合計バイト数 > 10) break
結果文字列=結果文字列+文字
}
>>275 そのデータはどのような形式で保持してるの? byte[]? エンコーディングは?
全角が堂のこうの言ってるんだからwindows-31Jじゃね?
280 :
250 :2008/07/16(水) 09:23:50
>>250 です。
>>246 様
>>247 様、どうもありがとうございました。
インスタンスを作成する、ですね。
ここでご指摘いただけてよかったです。
そしてわかりました!
どうもありがとうございました。
281 :
デフォルトの名無しさん :2008/07/16(水) 11:17:10
J2EEの日本語APIリファレンスを 探してるのですが SUNのページを探しても見つかりません どこでダウンロード可能でしょうか
282 :
デフォルトの名無しさん :2008/07/16(水) 11:54:50
byte[] b = {(byte)0x01, (byte)0x02}; これをキャストせずにきれいに書くことはできませんか?
283 :
デフォルトの名無しさん :2008/07/16(水) 11:59:12
16進で表現したいので byte[] b = {(byte)0xFE, (byte)0xFF}; のように書きたいです。 10進でしたら byte[] b = {254, 255};でよいのですが。
284 :
デフォルトの名無しさん :2008/07/16(水) 12:02:51
数値は数値でしかないし、その表現方法(文字で)が変わるだけでしょ
>>283 キャストしたくないだけなら
byte[] array = { 0xFFFFFFFE, 0xFFFFFFFF };
コストが掛かるがこんなん使うとか static byte[] b(int...is) { byte[] bs = new byte[is.length]; for(int i=0; i<is.length; i++) bs[i] = (byte) is[i]; return bs; } // byte[] b = b(0x01, 0x02, 0xFE, 0xFF); // {1, 2, -2, -1}
>>275 相手がShift_JIS系なら、
boolean isSJISLeadingByte(byte val) {
int b = val & 0xFF;
return (0x81 <= b && b <= 0x9F) || (0xE0 <= b && b <= 0xFC);
}
みたいのを書いて分岐した方が楽。
NIO charsetはライブラリ書く人向けの作りなので、異常系の状態拾おうとすると
真面目にエラー処理させられるような作りになってて面倒くさい。
無理矢理使うとこんな感じか。
byte[] array = .....
CharBuffer buf = CharBuffer.allocate(array.length); //文字数≦バイト数と仮定
CharsetDecoder decoder = Charset.forName("windows-31j").newDecoder();
decoder.onMalformedInput(CodingErrorAction.REPORT);
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
int trim_bytes = 0;
CoderResult result;
do{
buf.clear();
result = decoder.decode(ByteBuffer.wrap(array, 0, array.length - trim_bytes++), buf, true);
}while(result.isError());
System.out.println(result + " : " + buf.flip());
288 :
デフォルトの名無しさん :2008/07/16(水) 14:50:22
>>285 JAVAではintが基本だから32ビットの16進で書けばよかったということですか。
上位24ビットが0でなくてFFFFFFなのはなぜですか?
>>288 > JAVAではintが基本だから32ビットの16進で書けばよかったということですか。
真面目に取らんでいいよ。
> 上位24ビットが0でなくてFFFFFFなのはなぜですか?
byte であらわせるのは -128〜127まで。
なので -128〜127 の定数値はキャストなしで byte に代入可能。
上位24ビットを 0 にすると 0〜255 になって、0x80 以上はキャストしないと代入できなくなる。
>>288 0~127 byte表現 0x00~0x7F → int表現 0x00000000~0x0000007F
-128~-1 byte表現 0x80~0xFF → int表現 0xFFFFFF80~0xFFFFFFFF
>>281 J2EEは今はJava EEという名前
Java EEでさがせ
Java SEの近くにある
292 :
デフォルトの名無しさん :2008/07/16(水) 19:43:16
>>290 0x7Fまでなら0x000000を付けて、
0x80以上なら0xFFFFFFを付けるんですね。
16進を書くには、(byte)でキャストするか、場合分けの8ニブルの16進で書くか
というどちらにしても、長いソースになってしまいますね。
293 :
デフォルトの名無しさん :2008/07/16(水) 19:46:49
CPUをいじめるのが好きなのでAckermann関数の値を求めるのを作ったんですが、以下のソースのを実行すると at Ackermann.ackermann(Ackermann.java:12) というメッセージが、ばーっと出てきます。どこがおかしいのでしょうか? public class Ackermann{ public static void main(String args[]){ long i=Long.parseLong(args[0]); long j=Long.parseLong(args[1]); System.out.println(ackermann(i,j)); } public static long ackermann(long m,long n){ if(m==0)return n+1; else{ if(n==0)return ackermann(m-1,1); else return ackermann(m-1,ackermann(m,n-1)); } } }
ごめんなさい 第1引数を4以上にすると出ます
コンパイル通らないはずだけど if elseの対応が合ってない
うちのではコンパイル通りました。 if(m==0)return n+1; else{ if(n==0)return ackermann(m-1,1); else return ackermann(m-1,ackermann(m,n-1)); } if elseの対応は上のような感じです。
普通にスタックオーバーフローだわ・・
再帰が深すぎてスタックオーバーフローを起こしてるんじゃ
なんかそうっぽいです・・・ 別の方法でCPUをいじめます・・・
>>292 >8ニブルの16進で書くか
何だこれ?
303 :
デフォルトの名無しさん :2008/07/17(木) 02:38:05
>>293 286を見落としていました。286を使ってみたいです。
でもコンパイルできませんでした。
JDK1.3では無理ですか?
b(int...is) { が可変長の引数に対応するものに見えましたが。
>>262 ありがとうございます。
ではjavaレベルでストリームをパイプしないで実行はサポートされていないのですね。
ようはNULLリダイレクトしても、結局意味のないそのストリームは生成してしまう、ということですか?
もちろん何もわたってこないのでreadする意味もないですが。
305 :
デフォルトの名無しさん :2008/07/17(木) 10:07:11
>>293 1.3じゃ286は無理だな…
さらに呼び出しコスト上がるがこんなんでどう?
1.3のJDKで試してないからエラー出るかもしれないが。
static byte[] b(String str) {
StringTokenizer st = new StringTokenizer(str, ", \t");
byte[] bs = new byte[st.countTokens()];
for(int i=0; i<bs.length; i++) {
bs[i] = Integer.decode(st.nextToken()).byteValue();
}
return bs;
}
// b("0x01, 0x02, 0xFE, 0xFF");
// b(" 1, 2, 254, 255"):
// b(" 1 2 -2 -1"):
// 以上全てnew byte[]{ 1, 2, -2, -1 } と同じバイト配列を返す
306 :
305 :2008/07/17(木) 10:09:05
>>304 コマンドが出力してくる以上、ストリームには貯まるもんだ。
だから
>>262 はまず「そのコマンドに"出力しない"オプションがあるなら
それを指定してやれ」と言ってるのじゃないか。
そして、そんなオプションが無い、もしくは指定できない何か理由があるのなら、
シェルの機能を使ってnullデバイスにリダイレクトしとけ、と言ってるんだと思うぞ。
シェルも使えないのなら、
>>261 が自分でやったように「ひたすら読み込んで捨てる」と
いうnullストリームをjavaで作って食わせるしかないかもな。
>>304 process.getInputStream().close();
process.getErrorStream().close();
して黙らせるのじゃいかんのか?
hashcodeってオーバーライドしなくても、MAPのキーに使っても正しい値って取れますよね。 それはhashcode()で値が同じでも、最終的にequalsで判断するから、と考えてよろしいでしょうか?
310 :
デフォルトの名無しさん :2008/07/17(木) 12:09:00
近藤よしゆき著のJavaプログラマのためのアルゴリズムとデータ構造をお持ちの方に質問があります。 95〜96ページの待ち行列の出力サンプルで、 MyQueue[a b c] front=0 rear=3 aを取り出した bを取り出した MyQueue[c ] front=2 rear=3 dを入れた eを入れた cを取り出した MyQueue[d e ] front=3 rear=0 とあるのですが、 なぜ、rearは0になってしまったのでしょうか?
>>309 一般的には、ダメ。
equals()がtrueなのにhashCode()が違う値、の場合にうまく動かない。
hashCode()が常に同じ値を返したりすると、HashMapなどの効率がものす
ごく悪くなる。
312 :
デフォルトの名無しさん :2008/07/17(木) 12:44:26
お尋ねします。 現在JAVAでGUIを使った簡単なゲームを作っています。(具体的には、5目並べです) ゲーム自体は既にできあがって、きちんと動作もしているのですが、 どうも初心者なためクラスをどのように構成すればよいのかがよくわかりません。 いまのところ、windowクラスとpaintクラス、それとThinkクラスの3つになっています。 windowクラスはウィンドウ及びボタンなどのクラス、 paintクラスは盤上の勝敗判定等のほかpaintComponentメソッドを含む描画用のクラス、 Thinkクラスはコンピュータが次の手を決定する思考ルーチンのクラスです。 このようなゲームの場合、どういったクラスをいくつ定義するのがソースコードとして美しいのでしょうか? 今の状態はなんだかクラスごとの役割分担がごっちゃになっているような気がして・・・ どうすれば「オブジェクト指向」の概念がきちんと活かされていることになるでしょうか?
>>312 結城浩たんのJava言語で学ぶデザインパターン入門とか読んでみるとか。
>>310 その本は持っていないが、長さ5の配列でキューを実装している例では?
front が読み口のインデックス、
rear が書き口のインデックスなのだろう。
4番まで書き込んだから、次は0番を再利用するのでは?
>>311 ということは、hasecode()とequals()をオーバーライドしなくても全然OKって事ですよね。
しかもデフォルトのhasecode()はアドレス値的なものが入るので、大抵がユニークになっています。
しかもデフォルトではequals()がtrueなら同じインスタンスのhashCode()なので、もちろん同じ値で問題なし。
そう考えると、この2つはオーバーライドしない方がいいのではと思っちゃいます。あくまでMAPのキーとして使うだけを考えていますが。
>>308 たぶんコマンド側がパイプエラーになると思います。
>>315 同じ値を持つ異なるインスタンス、というものがなければ、別に問題ない
>>315 >>317 の言うとおり。
たとえば、StringはhashCode()とequals()をきちんと定義しないといけないケース。
>>318 , et al.
そもそも、
> equals()がtrueなのにhashCode()が違う値
は実装の不備だろう
>>319 普通のリングバッファに見えるけど?
>同じ値を持つ異なるインスタンス、というものがなければ、別に問題ない という前提ならequalsをoverrideする必要性さえない。 hashcodeはequalsがtrueであるなら同じ値を返さなくてはならない、 それを破るくらいならいつでも同じ値を返すほうがまだまし。
formatを使って仮名入力の文字列を綺麗に表示ってできますか?
まずやってみたらいいのに。 初心者であろうとなかろうと、試すことはできるだろ。
質問失礼します。 log4jでログ出力していますが、それが何らかの異常で書き込まれなかった場合 対処をしたいと考えています。 ですが、Log.debugなどは異常の時スタックトレースは吐くものの、例外はthrow していないようで、IOException等が発生しても取得できません。 こういうときはどうするものなのでしょうか。
326 :
デフォルトの名無しさん :2008/07/17(木) 20:56:39
繧ェ化けます。よい方法はありませんか? ユニコード考案者はバ力かと。 アルファベットまで2バイトで扱うJAVA作った人はバ力かと。
329 :
325 :2008/07/17(木) 21:58:14
request.getPathInfo() で解決しましたw
330 :
デフォルトの名無しさん :2008/07/17(木) 22:11:28
来年入社する会社ではJAVAを使います 基本情報の国家資格は持っているのですが使った言語はCASLなのでJAVAは全くの素人です 本を買ってみようと思うのですがおすすめの本などがあれば教えてください
人の書いたソースを読みまくるのが最良の教科書。
332 :
デフォルトの名無しさん :2008/07/17(木) 22:35:40
>>310 これはリングバッファになってる
p90の図を見ればわかるよ
Javaの云々よりもSQLとかHTML/CSSあたりやったほうが業務じゃ役に立つかも名
リングキューってやつか
335 :
330 :2008/07/18(金) 00:52:23
質問答えてくださった方ありがとうございます 今度企業の方に具体的に何すればよいのかよく聞いてきます
まぁやさしいJavaとか結城浩の本とかが定番かな・・ 基本はともかくインスタンスとか拡張とか出てきたときに分かりやすい本がいいよなぁ
java -cp の後のクラスパスに、他のマシンのパスからクラスをロードしたいのですが、いわゆるURLクラスロード?です。 どのようにクラスパスを設定すればよろしいでしょうか?
>>337 java -cp file://・・・とやってもダメでした。これはデフォルトのクラスローダーがURLクラスローダーではないからでしょうか?
>>338 「他のマシン」とはどう繋がってる?Windows でネットワークドライブとして見えているなら
\\(IPアドレスorホスト名)\(以下パス)で指定すればいい。
Linux ならそもそもマウントされてるだろうからそこを指せばいい。
ファイルを参照できないのなら apache でも立てて http で指定してみれば?
340 :
デフォルトの名無しさん :2008/07/18(金) 18:01:05
今自作のプロキシをJavaで作っているのですが、 表示できるページが限られる理由に心当たりのある方はいらっしゃいますか? ブラウザから要求をソケットで吸い出して、 そのurlからurl.connectionをしてそこからreadしてByte型で BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream()); outにwriteしています。 ご教授願います! なんとなくの予想でもいいです!お願いします。
>>340 HTTP のリクエストヘッダはどうなってる?ブラウザが出すものをできればそのまま
使用しないと見れないページは出てくる。
UserAgent とか Cookie とかは特に。
>>342 お前質問に答えろよ。「他のマシン」とはどう繋がってるんだよ。
だいたい
http://localhost/ って、自マシンにちゃんと http デーモン
立ち上げてんだろうな?
まあ CLASSPATH だと http とかは無理かもだから、http 経由でなきゃダメ
なら Java Web Start でやれば?
そもそもネットワーク経由でファイルがやりとりできる(Samba とか)なら、
最悪ドライブにマウントしろよ。
すみませんが教えてください 今JAVAで○×ゲームを作っているのですが 埋まらない個所ができてしまいました 何を埋めればいいでしょうか? よろしくお願いします String msg =new String(); int x,y; public void init(){ addMouseListener(this); } public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){ x =//埋まらない所 (); y =//埋まらない所 (); msg = "座標x:"+x+"y:"+y+"が選ばれました"; repaint(); }
Appletで、 ループの中にrepaint()を入れ、 paint()の中で描画のループをさせているのですが、 最初に呼び出されたpaint()が終わるまで 次のpaint()の描画が出てこず、尚且つ、その間にも、 もともとのメソッド内のループは動いていました。 説明が分かりづらいと思いますが、 どういった理由でこうなっているのか、教えてください。
レンダリングマネージャ(だっけ?)がダーティーとみなしてなくて再描画されてないとか?
なに行ってるのかワカンネ・・ どこにループ書いてるんだ?
ソースうp
350 :
デフォルトの名無しさん :2008/07/18(金) 22:56:55
javaでC++のプログラムを実行する方法ってありますか?
JNI経由で呼び出す方法がある
printfをオーバーライドして機能拡張したいんだが、どうすればいいの?
printfをオーバーライドすることはできないが、Formattableインタフェース使えば、 やりたいことはできるんじゃないかな。
>>353 さんくす。Formattable調べてみる。
355 :
デフォルトの名無しさん :2008/07/19(土) 01:54:51
質問です。 JAVAでペイントソフトのようなものを作っているんですが、 ウィンドウが非アクティブになる(他のウィンドウの下に隠れるなど)と、 描画したものが消えてしまうんです。 他のウィンドウと一部分重なるとその部分だけ消えます。 なぜなんでしょうか?
>>355 お前Vistaじゃないだろ
Vistaだと消えないんだぜ
>>355 プリミティブなGUIプログラミングとはそういうものだ。
だから、隠れた部分が再表示されるときにはイベントが飛ぶようになってる。
それに合わせて再描画しろ。
358 :
デフォルトの名無しさん :2008/07/19(土) 02:13:10
>>355 その消えた部分を再描画するために paint()(とその下位のpaintComponent())が呼ばれる。
paint()もしくはpaintComponent()が呼ばれた時、書かれていたものが再描画されるようになっているか?
ツールの描画操作をした時だけしか描画してないのじゃないか?
359 :
355 :2008/07/19(土) 07:40:04
みなさんありがとうございます、お蔭様で解決いたしました! 358さんがおっしゃられたとおりで、ツールの描画操作をした時だけしか描画していませんでした。
360 :
346 :2008/07/19(土) 09:56:51
分かりづらい説明、失礼しました。 始めからソースを乗せれば良かったのですが、何分恥ずかしかったので…。 public class SampleP4 extends Applet implements Runnable{ int num; int x; public void init(){ Thread th; th = new Thread(this); th.start(); } public void run(){ try{ for(int i=0; i<10; i++){ num = i; x = i * 10; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } public void paint(Graphics g){ String str = num + "です。"; try { for(int i=0; i<10; i++){ g.drawString(str, (10 + x), 10+i*10); Thread.sleep(1000); } } catch (InterruptedException e) {} } } repaint()では別スレッドが呼び出されているとは思うのですが…
361 :
デフォルトの名無しさん :2008/07/19(土) 10:09:59
携帯サイトにJSFを使いたいんですが上手く表示できません フィルターのことをWEBで見つけてやって見たんですが それでも上手くいかないんですが 皆さんはどうやってますか
362 :
デフォルトの名無しさん :2008/07/19(土) 10:13:03
>>360 repaintでEDTが呼ばれる。EDTは確かに別スレッドだが、EDTはいわばシングルトンだ。
EDTが処理している間に別の処理(二回目以降のrepaint)を要求しても、1つめのrepaintが
終わらない限り、EDTは処理できない。
SampleP4が単に10個のメッセージを位置をずらしながら表示したいだけなら、
public void paint(Graphics g){
String str = num + "です。";
g.drawString(str, (10 + x), 10+num*10);
}
で充分だ。
(もちろんこれだけだと画面が重なった時に再ペイントされない現象となるが。)
メソッドの名前をまちがって全角でやったら、全角文字列でやったらできました。 メソッドの名前を日本語でできることってみんなしってますか?
364 :
デフォルトの名無しさん :2008/07/19(土) 10:21:21
>>361 状況がさっぱり分からん。
皆さんは上手くやってるんだろうよ。
>>363 某社フレームワークの自動生成コードは、全力全開で日本語識別子を使いまくってる。
あと、「プロダクションコードには日本語入れたくないけど、ユニットテストだったらいいよねー」といった意見もある。
366 :
デフォルトの名無しさん :2008/07/19(土) 10:25:02
>>363 英語の全然出来ない同僚が、翻訳サイト使って超直訳のメソッド名にしてるのを見ると、
いっそ日本語の方が良いんじゃないかという気はするな。
そういうヤツらに限って、プロジェクト用語集やら命名規約やらは見ない。
368 :
346 :2008/07/19(土) 13:30:52
>>362 Threadで言うところのsynchronized修飾子のようなついてると考えてよいのでしょうか?
なんだか分かった気がします。ありがとうございます。
>>368 EDT への要求は Queue に入れられ、EDT はそれを順次取り出して処理する。
repaint すると Queue に入れるだけですぐ戻る。
だから SampleP4#run は1秒毎に repaint 要求を Queue に入れることができるが、
EDT は最初の repaint を処理するために SampleP4#paint を呼びだし、その中で
合計10秒間処理が行なわれているので、次に EDT が Queue から repaint 要求を
取り出して処理できるのは10秒後となってしまう。
EDT は画面全てを統括しているため、10秒間も処理を奪ってしまうとその間、
ボタン操作からウインドウそのものの再描画まで全て出来なくなる。
一時的にフリーズしたようになってしまうため、EDT の処理内で時間のかかることは
すべきでない。
370 :
346 :2008/07/19(土) 15:16:38
>>369 ありがとうございます。
まだ気になるのですが、paint の処理中(このプログラムの場合10秒間)に
呼び出された repaint は、 Queue の中に入れられるということですが、
>>360 の動作を見る限りでは、 Queue に残っているrepaint 要求が
全て取り出されずに、そのままになっているように思えます。
>365 俺もJUnitのテストメソッド名は日本語OKってのは同意 JavaDocがテスト仕様書として通りやすいのがポイントだわな どうでもいいが、いまどき全てのクラスがプログラムコード、メソッド名も連番ってプロジェクトに遭遇したんだが、どうすればいいと思う?
>>370 何度repaintを要求しても、paintは1回しか発生しない
表示内容(ラベルのテキストやイメージ、この場合はnum)が何度変更されても、
最後に1回だけpaintし直せば最新の状態が反映され万事OKであると仮定されている
オーバーライドに関する質問なのですが、オーバーライドをした上で保持をする、というのはどういうことなのでしょうか?
>>371 javaでの話しか?
変換表を用意して、ツールでクラス名/メソッド名とその参照を置換とかどう?
1. 変換表に従って置換
2. 担当分を普通に書く
3. 変換表に従って置換(1の逆)
4. コンパイル&テスト
5. 問題があれば2に戻る
>374 そこまでやるかどうか・・・って感じはしてる おまけにprivateメソッドも禁止(プログラム定義書に定義されたメソッド以外は作成不可)だし 名前出してしまうが、NTTデータのイントラマートのコーディング標準ってそうなっているのか?
376 :
346 :2008/07/19(土) 17:38:35
>>365 なるほど、Queueの中にたまっている全てのrepaint要求が、
最後のrepaintだけで済まされているということですね。
ありがとうございます。
377 :
デフォルトの名無しさん :2008/07/19(土) 19:56:21
>>371 こっちの社内にもそんなプロジェクトがあったな。VBだったが。
汎用機やってた人間がリーダーしてるもんだから、そうしろという命令らしい。
モジュール名が XXYYZZNN で機能番号・画面番号・画面内番号・内部通番とか。
そんなプロジェクトには絶対入りたくないもんだ。
379 :
デフォルトの名無しさん :2008/07/19(土) 20:10:26
以下のようなコードを実行すると、((ArrayList)getList.get(2)).remove(l);の ところで、java.lang.ArrayIndexOutOfBoundsException: -1 と注意されます。どうしたらいいか教えていただけませんか? String findstring=thesaurus; for(int k=0, l=0 ; k < ((ArrayList)getList.get(2)).size(); k++, l++){ String filename = (String) ((ArrayList)getList.get(2)).get(k); try{ String line; BufferedReader reader=new BufferedReader(new FileReader(filename)); while((line=reader.readLine())!=null){ int n=line.indexOf(findstring); if(n<0){ ((ArrayList)getList.get(2)).remove(l); l--; } } reader.close(); } }
>>379 ファイルが複数行で、2行以上で探している文字が入っていない。
l-- の後、どこを通っているか System.out.println() をあちこち入れて
確かめてみろ。
>>376 java アクティブレンダリングでググれば幸せになれるよ
>>375 >おまけにprivateメソッドも禁止
軽く死ねるな
エンクロージング・インスタンスがない、っていうエラーはどうやったら解けるんですか?
>>379 見たことないタイプの技巧ループだな。
2変数で、両方インクリしてるとか、ループ内操作してるとこが
文法的にどうなの?
for(int k=LIST.size()-1;k>=0;k--){
(・・・remove()込みの操作・・・)
}
って感じで逆走査すれば、remove()でインデクスずれるとか
気にしないで1変数でできる。
>>383 インナークラスだよな。
中のクラスにstatic を付けるとか。
>>383 内部クラスを new するときに明示的にインスタンスを与えるか、内部クラスを static にする
>>385 ,386
ありがとうございます。staticつけたらすぐ解決しました。
388 :
デフォルトの名無しさん :2008/07/20(日) 02:06:56
ArrayIndexOutOfBoundsException:-1って出たんですが これって何のエラーですか?javaはかなり初心者です
配列のインデックスに -1 が指定されましたというエラー
こんにちは。最近勉強を始めたものです。 リダイレクト機能を使ってテキストファイルから複数の数字を読み込み、配列に格納したいのですが、 そのテキストファイルが以下のような場合、うまくまとめて配列に格納する方法はないでしょうか? 42342423 2343242342 2433 34444 234 34344 343 444443 34 3444 44 45858 ちなみに自分はsubstringsメソッドを使ってそれぞれ抜き出し、trimメソッドにより空白を取り除いてから 配列に格納したのですが、どうも見栄えが悪いうえに効率が悪いような気がしたので質問させていただきました。 この数字はあとで計算に使うため、配列の型はint[]型にしたいです。 よろしくおねがいします。
StreamTokenizerとかScannerとか
392 :
390 :2008/07/20(日) 06:05:57
>>390 はテキストファイルの内容に空白スペースをいれていたのですが2ちゃんの処理の都合上か
スペースが取りのぞかれてしまいました。
42342423-2343242342-2433-34444
234------34344------343--444443
34-------3444-------44---45858
この半角ハイフンがスペースだと考えていただけますようおねがいいたします。
393 :
390 :2008/07/20(日) 06:13:25
>>391 即レスありがとうございます。使い方をこれからググったりして調べてみます!
394 :
デフォルトの名無しさん :2008/07/20(日) 11:03:26
すみません。 ある数値の入ったdoubleに最小の数を足したいんですけど どうやったらいいですか?
>394 Double.MIN_VALUE
>396 それは、 コンパイルできない? 実行できない? 計算結果が想定外?
浮動小数点数だから足してもかわんねーんじゃないの
多分、0+Double.MIN_VALUE以外では変わらないと思います。
>>399 Double.MIN_VALUE + Double.MIN_VALUE とかでも変わると思うが。
どんな数でも足すと変わる最小の数を得る方法
足し算は絶対値が小さい数からというのは基本ですの
403 :
390 :2008/07/20(日) 15:28:19
Scannerクラスのメソッドを用い、完璧に作り上げることができました。本当にありがとうございました!
IntとIntegerで相互に変換するにはどうすればよいんでしょうか? 調べてみたものの中々具体的なプログラムがなくわかりませんでした。
>>404 java5以降ならそのまま代入でいいけど、java 1.4のはなし?
int i = (new Integer(100)).intValue();
ぼくしんぐ><
Double.NEGATIVE_INFINITY
すみませんが教えてください マルバツゲームを現在作成しているのですが、 マルの勝利条件を決める方法がわかりません 法則性がまったくわからなくて苦戦しています 先輩方ぜひ教えてください //oが勝ちの条件 if((map[0][0]==1 && map[0][1]==1 && map[0][2]==1) ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■■■■■■))} msg="oの勝ちです。"; finished=true; repaint();
総当たりで調べてもいいんじゃない?
>>411 さきほどいろいろと調べて入れてみました
//oが勝ちの条件
if((map[0][0]==1 && map[0][1]==1 && map[0][2]==1)||
(map[1][0]==1 && map[1][1]==1 && map[1][2]==1)||
(map[2][0]==1 && map[2][1]==1 && map[2][2]==1)||
(map[0][0]==1 && map[1][0]==1 && map[2][0]==1)||
(map[0][1]==1 && map[1][1]==1 && map[2][1]==1)||
(map[0][2]==1 && map[1][2]==1 && map[2][2]==1)||
(map[0][0]==1 && map[1][1]==1 && map[2][2]==1)||
(map[0][2]==1 && map[1][1]==1 && map[2][0]==1))}
msg="oの勝ちです。";
finished=true;
repaint();
あっているかどうかはわかりませんが…
なんかエラー表示が出てしまって…
> (map[0][2]==1 && map[1][1]==1 && map[2][0]==1))} その } は { の間違いでは
解りにくいから、 if( 条件1) { // 処理 }else if(条件2) { // 処理 } というように書いておけ。 だからタイプミスしてエラーになるんだよ
>>413 >>414 すみません
ミスしていました
そこは直ったはいいのですが、
今度はほかのところを訂正すればするほど間違いが出て
ちょっとカオスな状況になってきました
とりあえずお礼を
教えてくださりありがとうございます
map[x][y] は ○が1, ×が-1,未入力が0でいいのか? それならば、map[0][0] + map[0][1] + map[0][2] == 3 とかの方が解りやすいかもしれん
>>416 アドバイスどうもです
ただあまり文を変えることが許さないので
実践できずorz
418 :
410 :2008/07/20(日) 23:00:20
>>417 文ミスです
「許されることがないので」でした
すみません
演算結果を小数点以下5桁とか8桁まで、と指定して取得するにはどうすれば良いんですか?
420 :
410 :2008/07/20(日) 23:32:12
皆さんのおかげで組み立てられたのですが 訂正部分を直せば直すほど「間違えです」表示が… とりあえずこれは間違えていますでしょうか? public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClick(MouseEvent e){ int x =e.getX; int y =e.getY;
>>394 ,408
Math#nextUp
>>419 超適当
static double scale(double d, int scale) {
double r = Math.pow(10, scale);
return Math.round(d * r) / r;
}
形態素解析エンジンsenを使いたくて
http://www.esco-sb.jp/blog/roughjustice/archives/2007/03/java_sen.php ここを見ながらインストールしたのですが、System.setPropertyの使い方が分からずつまずいています。
sen.homeにsenのインストールディレクトリを指定すれば良いようなのですが、
System.setProperty("sen.home","C:\\Program Files\\sen-1.2.2.1");
とやるとjava.lang.IllegalArgumentException: unknown protocol: c
のエラーになり、相対パスを試そうと↓をやると
System.setProperty("sen.home","..\\..\\..\\sen-1.2.2.1");
java.lang.IllegalArgumentException: C:\Users\hoge\Documents\program\Sen\..\.\sen-1.2.2.1\conf\sen.xml (指定されたパスが見つかりません。)
と展開されないためエラーが出ます。
参考ページは絶対パスで通っているようなのですが、何故こうなるのでしょうか?
>>422 確か、何故かsetPropertyが効かなかったはず
見つかりませんって書かれたパスに、
sen.xmlとかその周りのやつ(辞書とかも)も置いてみたらうまくいったような・・・・・・
パスをurlで書いたらどう?
sen.xmlでは相対パスで辞書ファイルの位置とかを記述してあるので ディレクトリ構造をいじらず、関連ファイル群をそのままコピーして
ちょっと疑問に思ったんですけど、html<form>から受け取った、Servletのrequest.getParameter("");の文字数について。 <!--index.jsp--> <form action="index.jsp"> <input type="text" name="id" /> <input type="submit" /> </form> <% if(request.getParameter("id")!=null){ %><%=request.getParameter("id").length()%><br /><% } %> この場合、テキストボックス未入力でフォーム送信時、結果:"0"と出力されますが、nullじゃないのでしょうか? 未入力チェックする時、下記のような風によくするのですが、nullチェックは必要ないですか? if(request.getParameter("id")==null && request.getParameter("id").length()<1){ //未入力時処理 }
HttpRequest(POST/GET)じゃ、""とnullを区別できないのは解るか? getParameter()のnullチェックは、パラメータ自体が送信されてこなかった事を考慮すれば必要だろう どちらにせよUtilメソッドを作っておいて if(Util.isEmpty(request.getParameter("id"))) { // 未入力処理 } とか、書くほうがスマートだが
428 :
426 :2008/07/21(月) 11:30:29
""は、レンジ0文字 nullはパラメタ自体が送信されなかった時 ってことでいいですかね? Utilメソッドを作るというのは、こういうことですか? public class Util{ private boolean Parameter = false; public boolean isEmpty(String Parameter){ if(Parameter!=null && Parameter.length()<1){ this.Parameter = true; } return this.Parameter; } }
public class Util{ public static boolean isEmpty(String parameter){ return (parameter==null || parameter.isEmpty()); } }
C#…
キーボードから入力させて、それをリストに追加していくプログラムを forで作りたいんですが、どうやればいいですか? 例えば、最初に入れたい分の数を入力して、 次にその数の分入力させる。
>forで作りたいんですが
import java.awt.*; public class SampleApp extends Frame implements ActionListener{ という書き出しなのですが、java.lang.NoClassDefFoundError: ActionListenerと出ます。 理由がわかりません。環境はEcipse3.3です。
java.awt.event.ActionListener
435 :
426 :2008/07/21(月) 17:51:47
>>429 Stringクラスに、isEmpty()ってあるんですか?><
Dinner[] dinners=new Dinner[]{ CURRY , RAMEN , YAKIZAKANA }; try{ int menu=Integer.parseInt( ID ) % dinners.length; eat(dinners[menu]); } }catch(NumberFormatException e){ goToBed() } えいっ!
437 :
436 :2008/07/21(月) 17:55:47
ぐは。。。ぬるぽか。寝るわ。
>>435 1.6で導入された。
length()が0の場合true
>>434 ありがとうございます!できました!
インポート対象はその層までだったんですね・・・・
ところでおまいら、祝日だってのに もしかして仕事してるわけ?
442 :
426 :2008/07/21(月) 21:18:27
なんかほんとに初心者丸出し質問で申し訳ないんですが 簡単な3×3マスパズル(コマをスライドさせて元の絵に戻すアレ) の作り方なんか調べられるサイトや本って無いですかね。 javaゲームの本なんかに書いてあるのだろうか
プログラミング自体が初心者なら書いてあっても理解は無理 適当な入門本でも一通り学習してからの話
ありがとうございます。 実は課題で出されてソースだけでも見つけてコピペしないと・・・と クラスメートが悩んでいたので助かりました。
クラスメートw
public DigitalWorldClock(String c, int o) { super(c,o); } ”Wellington,+12”みたいなtxtファイルを読み込んで、コンマの前後で分けて、 上みたいな感じでSuper(c,o)を使いたいのですが、 public DigitalWorldClock(String str) { int index = str.lastIndexOf(','); c = str.substring(0, index); o = Float.parseFloat(str.substring(index+1)); super(c,o); } ↑と書いたところ、” super の呼び出しはコンストラクタの先頭文でなければなりません。”と出ます どう直せばいいのか教えてください
super の呼び出しはコンストラクタの先頭文にする
めちゃくちゃ汚いがこんな具合。 別にファクトリメソッドを準備したほうが賢いと思うよ。 public DigitalWorldClock(String str) { super(hoge1(str), hoge2(str)); } private static String hoge1() { int index = str.lastIndexOf(','); return str.substring(0, index); } private static float hoge2() { int index = str.lastIndexOf(','); return Float.parseFloat(str.substring(index+1)); }
これが正攻法のファクトリメソッド private DigitalWorldClock(String c, float o) { super(c,o); } public DigitalWorldClock createInstance(String str) { int index = str.lastIndexOf(','); c = str.substring(0, index); o = Float.parseFloat(str.substring(index+1)); return new DigitalWorldClock(c, o); }
>>452-454 さっそく教えてくださってありがとうございます。
何となくですけど、教えてくださったことはわかりました。
super(c,o)は別にした方がいいんですね・・・
それで、さっそく
>>454 で教えていただいた方法に書き換えて試してみたのですが、
private DigitalWorldClock(String c, float o) { super(c,o); }
の部分に、「シンボルを見つけられません」と出てしまいます。
プログラムの後の方で出てくる「list.add(new DigitalWorldClock(str));」にも、シンボルが見つけられませんと出ます。
これはどう直せばいいのでしょうか?重ね重ねすみませんがよろしくお願いします
インポート部分を書け
eclipseとは別で起動しているjavaに以下のデバッグオプションをつけ、eclipseからリモートデバッグできました。 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 通常リモートデバッグができれば、デバッグ中(変更対象にはブレークで止まっていない)にソースを変更し、 再度変更クラスに処理が入ると、変更が反映されるはずなのですが、反映されません。 何か設定ややり方が間違えているでしょうか? JDK1.6です。
458 :
kokoro :2008/07/22(火) 20:00:59
はじめまして。java初めてなんです。 [課題]@1の倍数の和、2の倍数の和、3の倍数の和。 Aたて10個、横10個の正方形を作る。色は交互にする。 緑、赤、緑、赤・・・・ 赤、緑、赤、緑・・・・ 緑、赤、緑、赤・・・ [期限]今週中ぐらい [バージョン]java アップレット [補足]for文と、if-else文を使って。 お願いします。
丸投げはここじゃねーよ
460 :
デフォルトの名無しさん :2008/07/22(火) 20:09:35
間違えました・・・
461 :
455 :2008/07/22(火) 20:31:03
>>456 すみません、インポート部分ってどこですか?
462 :
デフォルトの名無しさん :2008/07/22(火) 20:34:01
TextSS
>>451 public DigitalWorldClock(String str)
{
this(str, str.lastIndexOf('.'));
}
private DigitalWorldClock(String str, int index)
{
super(
str.substring(0, index),
Float.parseFloat(str.substring(index+1))
);
}
464 :
463 :2008/07/22(火) 21:16:33
コンストラクタが衝突してた 南無
>>457 即時更新不可のオプションでも入れているのでは?
>>457 そんなことせんでも1.6ならclassファイル上書きで勝手に更新してくれるべ
468 :
455 :2008/07/22(火) 22:09:33
>>466 import java.util.*;
import java.awt.*;
import java.io.*;
こういうことですか??
どこでシンボルが見つけられないんだ?
470 :
455 :2008/07/22(火) 22:25:01
>>469 全部アップさせたほうがいいよ。
宿題スレで挙がってた奴だろ?
DigitalWorldClockがAbstractWorldClockのサブクラスで、
AbstractWorldClockがAbstractClockのサブクラスとか言う構成だったはず。
クラス設計おかしくないか? Clockインターフェースを作ってWorldClockをextendsしてAbstractWorldClockを実装だろ。
言い忘れたがAbstractWorldClockが見つからないからコンパイルエラーが出てる。 AbstractWorldClockを用意してインポートしろ。
>>470 前に挙がってた
abstract class AbstractWorldClock extends AbstractClock
を見るに、
public AbstractWorldClock()
public AbstractWorldClock(String c, int o)
しか無い。
AbstractClockは未詳のままだが、要するに該当のsuperコンストラクタは無いのだろう。
定義されているのは、
public DigitalWorldClock createInstance(String str) {
だから、
DigitalWorldClock(str)
も存在しない。
結論、講師が屑
>>475 講義の途中の課題だからな、javaの全機能使うというより、abstractとかのコマなんだろ。
477 :
455 :2008/07/22(火) 22:48:47
>>477 >>451 でFloat.parseFloatが出てきたあたりでおかしくなったんだろ。
intで受けるコンストラクタしかないんだから、intにしとけばいい。
list.add(new DigitalWorldClock(str));
は、
list.add(DigitalWorldClock.createInstance(str));
というところ?
public DigitalWorldClock createInstance(String str)
を
public static DigitalWorldClock createInstance(String str)
にしとくのかな。
abstract教えてんのかファクトリメソッド教えてんのか分からんな。
480 :
455 :2008/07/22(火) 23:57:15
>>478 ありがとうございます
Float.parseFloatは、ほかの課題からそのまま使ったのでそのままにしてました
教えていただいたところを変えてみましたが、
シンボルを見つけられません。
シンボル: コンストラクタ AbstractWorldClock(java.lang.String,float)
場所 : AbstractWorldClock の クラス
private DigitalWorldClock(String c, float o) { super(c,o); }
というエラーと、
static でない 変数 c を static コンテキストから参照することはできません
static でない 変数 o を static コンテキストから参照することはできません
というエラーが出てコンパイルが通りません。
>>451 のファイルを書き換えたのですが、それじゃダメだったんでしょうか・・・?
>>479 そもそも、
>>470 のmainに文字列を引数にしたコンストラクタが出てこないし、
もう課題からそれてなにをやるべきかわからなくなっているのでは?
>>480 >private DigitalWorldClock(String c, float o) { super(c,o); }
上位クラスにfloatを引数にしたのコンストラクタが無いんだから、floatを使ってるのが間違いなんでしょ。
上位クラスにあわせてintに書き換える。
>static でない 変数 c を static コンテキストから参照することはできません
>static でない 変数 o を static コンテキストから参照することはできません
cとoはsuperに任せて設定させたいという主旨のはずだから、
String c = str.substring(0, index);
int o = Integer.parseInt(str.substring(index+1));
とか。
java言語で (自分でキーボードで入力する)12+13*13/11−99= みたいな電卓プログラムを作りたいのですが、調べても見つからず、まったくわかりません。 計算順位は*、/、+、ーでやりたいと思ってます。=で計算結果を出力です。 どなたか教えていただけませんか?
484 :
455 :2008/07/23(水) 00:42:04
>>482 floatだとダメなんですね。
扱うデータに小数点ついてたので、ついてなきゃだめだと思ってました。
>static でない 変数 c を static コンテキストから参照することはできません
意味がわかりました、ありがとうございました。
それで、何度も何度もすいません、コンパイルは通ったけど実行できませんでした。
Exception in thread "main" java.lang.NumberFormatException: For input string: "+0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at DigitalWorldClock.createInstance(Ex5d.java:29)
at Ex5d.main(Ex5d.java:47)
こういうエラーが出るので調べたら「アプリケーションが文字列を数値型に変換しようとしたとき、文字列の形式が正しくない場合にスローされます」とありました
読み込むデータに、小数、正の数、負の数、ゼロ、があるのですが、それが問題なのでしょうか?
でもFloatにするんだとダメですよね・・・
>>484 1.+0と言う表記を使わない
2.parseFloatで数値化してから(int)でキャスト
3.先頭の+記号を除外するコードを書く
いくらでも方法はあるのでは。
>>483 Javaではけっこう手間がかかる
方針としてはたぶんこんな感じ
1.与えられた式を後置記法に変換する
2.左から式を読んでいく。数値だったらスタックに積み、
演算子だったら積んであった数値をスタックから出して計算する
ちょっと複雑。詳しくは「後置記法」あたりで検索してみては
他にはJavaと連携できる別の動的言語を呼び出して、evalに通すとかって方法も無いではない
487 :
483 :2008/07/23(水) 01:04:25
>>486 ありがとうございます。とりあえずやってます!
488 :
455 :2008/07/23(水) 01:38:36
>>458 ありがとうございます、2でやってみたらとりあえず動きました!
本当にありがとうございました!
カッコに対応しなくていいなら、逆ポーランド使わなくとも2-passで、 1. 左から順に取り出して、乗除算だけ計算 2. 左から順に取り出して、残った加減算を計算 でいいじゃん
JavaCC
グローバルフィールドとしてのオブジェクトの参照は何バイトくらい使用しているのでしょうか? 例を示すと下のような感じです。 class Hoge{ Hage h; // これのサイズ } class Hage{ } 特にメモリ云々を気にしている訳ではないのですが気になったので質問させていただきました。
>>493 調べたわけではないが内部的にはレジスタ長かポインタの大きさかな。
h に格納されるオブジェクトがヒープをどれだけ食ってるかは知らない。
プロファイル取った方が確実
497 :
デフォルトの名無しさん :2008/07/23(水) 18:41:53
最近SwingのJTableからMySQLのTableの更新、追加、削除をするよう、それぞれプログラムを書いてみました。 お伺いしたいのですが、みなさんはこんな用途にSwingは使われますか? なにかもっとデータベースのプログラムの用途に向いたものがありそうな気もして、ご質問させてもらいます。
JavaDocの書き方 ・忘れんな ・日本語でおk ・メンテ汁 くらいじゃね
言語が違っても書く内容は同じでいいでしょ
int A = 123; と定義して、Aが数値型かどうか判断するとき どうすればいいですか?
Javaでそれを判断しなければならない状況があるのか?
>>501 こうか?
public class Test{
static boolean isNumber(Object o) {
return o instanceof Number;
}
public static void main(String[] args) {
int A = 123;
System.out.println(isNumber(A));
}
}
>503 ありがとうございます!! 解決しました。 isNumberを使えばよいのですね。 結構ググッたけど見つけられませんでした。
なんともはや
503氏は見やすいように分離しただけで、 処理のキモはinstanceof演算子ね
ああ、そうですね>< isNumberは自作ですね。 instanceofは知ってたんですが、こういう 使い方は気づきませんでした。
508 :
501 :2008/07/23(水) 23:46:52
さっきの続きですが、 インスタンスを生成せずに型を調べる方法はありますか?
>>508 ない。
インスタンス生成せずに型を調べたいケースってのも思いつかんが。
>>508 いったい何をしたいんだ。
そんなことが必要になる状況は、ふつうないぞ。
>503のってAをボクシングでIntegerに変換してからinstanceofしているわけで、なんか違うんじゃね?
プログラマが知っておくべきことだろそれは
あれだ、Eclipseでも使えってのが回答か?
515 :
508 :2008/07/23(水) 23:56:33
具体例をあげると、 コンソールなどから入力された値が、文字なのか数値なのかを 判定したいんですけどこのような場合はどうすればよいでしょうか?
すみません。コンソールからの入力は確実にString型なので例が悪かったです。 コンソールから入力された値が本当にString型なのか確認したいときは どうすればよいでしょうか?
>>515 それは「値の型」を調べたいんじゃなくて、コンソールから来た「文字
列」が数字を表現したものかどうかを調べたい、ってこと。
String str = input(); if(input.match("[0-9]+")) { System.out.println("数字です"); }
>516 戻り値がStringな時点でString以外はねーよ
>>517 はい。そういうことです。
確かに書き方が悪かったです。
みなさん、申し訳ないです。
>>518 なるほど。ありがとうございます。
それのことです!!
ていうか自分でパーサ書けよ。それくらい
>>519 確かにそうなんですけど、無意味ですがやらなければならないんです。
数値型かチェックした後に数値に変換するんだろうから、 変換ロジックと互換性のある検査ロジック使わないと駄目だよ。 例えば、Integer.parseIntでとNumberFormat.parseでは受け入れる文字列に違いがあるよ。
なるほど。参考になりました。 アドバイスを考慮してコーディングを進めていきます。
>>520 それは「書き方が悪い」んじゃない。その2つは全く違う概念だ。
そうですね。アドバイスを頂く過程で気づきました。 最初は、オブジェクトの型を調べなければならないと思っていました。 でも実は型を調べるのではなく、String型の中身が数値なのか文字なのか ということを調べることだったんですね。
要するに自分が何したいか分かってないと
そうですね。分かったつもりになっていました。 以後気をつけなければならないな、と思います。
そういう時に例外使うんじゃないの?
530 :
デフォルトの名無しさん :2008/07/24(木) 08:31:51
genericsの質問です。 自己参照する型はどう書くのでしょうか? つまり、 void someMethod( java.util.List<X> x ) { x.add( x ); x = x.get( 0 ); } がエラー/警告を吐かないようにするためにはXに何を書けばいいのでしょうか?
これでどうよ <X extends List<X>> void someMethod(X x) { x.add(x); x = x.get(0); }
javaソースからjavadocの要素を取り出してエクセルに出力するツールを作成したいのですが、 エクセルはPoiを使用する予定ですが、javaソースからjavadocの要素を取得するAPIが分かりません。 標準API問わず、何か便利jarかAPIありますでしょうか?
doclet API 使えば?
画像を読み込みたくて BufferedImage img = ImageIO.read(new File("aaa.jpg")); を書いたのですが、コマンドプロンプトからは実行し読み込めるのですが、 Eclipseのデフォルトパッケージに入れたものからは読み込めません。 絶対パスで指定すればできるのですが、相対パスで書くにはどうすればいいでしょうか。
相対パスってのはカレントディレクトリが基準なんだが、カレントディレクトリがどこかは確認したか? System.out.println(System.getProperty("user.dir"));
>>535 解決しました。
ソースのフォルダに画像が入っていたため読み込まれなかったようです。
また、コマンドプロンプトで実行したときはカレントディレクトリが
ソースのフォルダになるため読み込めたようです。
ありがとうございました。
外部コマンド(exe)を実行するために下記のような ソースを書いているのですが 連続する2つ以上のスペースが一つにまとめられてしまいます。 Runtime.getRuntime().exec(strCmd); これを正常に実行するにはどうしたらよいでしょうか? よろしくお願いいたします。
>>537 strCmd の中身がどんなときまとめられて、
まとめられることでどんな影響があるのさ
>>538 すみません。事故解決しました。
String strCmd[] = new String[3];
strCmd[0] = "hoge.exe";
strCmd[1] = "hoge1";
strCmd[2] = "hoge2";
Runtime.getRuntime().exec(strCmd);
としたらOKでした。
>>483 >>492 import java.io.*;
import java.net.*;
public class CalcClient {
public static void main(String[] args) throws IOException {
String answer = calc("12+13*13/11−99= ");
System.out.println(answer);
}
public static String calc(String target) throws IOException {
URL url = new URL("
http://www.google.com/search?q= " + URLEncoder.encode(target, "utf-8"));
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0");
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
String response = "";
for (String line; (line = br.readLine()) != null; ) response += line;
br.close();
conn.disconnect();
return response.replaceAll("^.*?(<h2 class=r>.*?<b>.*=\\s*(\\S+?)\\s*</b></h2>).*?$", "$2");
}
}
定期的に上がるネタだな
質問させてください 今度、業務でJavaでGUI作ることになりました 会社から勉強しとけと言われているのですが、ここだけは読んでおけというウェブページ(できれば日本語)もしくは書籍はありますか? ちなみにSE6使うそうです 当方のスキルはJava関係だとSE6使ってwebアプリのロジックとservletまわり書いていました よろしくお願いいたします
Tutorialは一通り読んだ方がいいですね。 というかそれ読んで、自分でこなしたらそれだけで基礎知識としては十分だと思います。
544 :
デフォルトの名無しさん :2008/07/25(金) 00:37:17
質問させてください Eclipseだけはあるのですが、JDKは絶対に必要ですか?教えて下さい
eclipseスレへいけ
POI(HSSF)で、特定のセルにドロップダウンリストを 作りたいのですが作り方がわかりません。 そもそも作れるのかどうかも模索中なのですが・・・。 テンプレートファイル側でドロップダウンリストを 用意していたのですが、読み込ませた後でそのまま 出力したら、ドロップダウンリストが無効(消滅) していたので、対応してないのかな?とは思って いるのですが・・・ 稚拙な質問で申し訳ありませんが、どなたか救いの手を・・・
547 :
デフォルトの名無しさん :2008/07/25(金) 14:59:06
質問というか意見を伺いたいのですが、 Swingでアプリケーションのフォームを作成する場合に Model-View-Presenterパターンを適用したとすると、 TableModelはM/V/Pいずれの所有物とすべきですか?
モデル
何とかパターンが2重構造になってると思えばわかりやすいかもね。 狭い目で見るとモデルで広い目で見ると別のグループに入ってる。
モデルとJTableを繋ぐアダプタってあたりでどう それってプレゼンタかな setValueというイベント(?)も来るし
>>547 のModel-View-Presenterパターンって、
Model-View-Controlerパターンと別物?
ちょい気になったので教えて。
Presentation-Service-Persistence と混ざっているんじゃね?
>>551 ぐぐってみたが、別物っぽい。ただ、数分眺めただけなので、すぱっと違いのわかるページは見付けてないんだけど。
Modelの更新通知の責務がControlerにあるMVCじゃね?
mainのみのシングルスレッドでウェイトをかけるには、どうしたらいいのでしょうか マルチスレッド化してしまうのも考えたのですが
5秒待つとかそういうことか? それなららばThread.sleep(5000);
mainに書こうとするとThread.sleepじゃ駄目じゃなかったか? 自身のスレッド取得してsleepとかだった気がする・・忘れた・・
javamailでhotmailへ送信ができません。
Properties props = System.getProperties();
// SMTPサーバーのアドレスを指定
props.put("mail.host","hotmail.com");
Session session=Session.getDefaultInstance(props,null);
MimeMessage mimeMessage=new MimeMessage(session);
// 送信元メールアドレスと送信者名を指定
mimeMessage.setFrom(new InternetAddress("
[email protected] ","七誌","iso-2022-jp"));
// 送信先メールアドレスを指定
mimeMessage.setRecipients(Message.RecipientType.TO,"
[email protected] ");
// メールのタイトルを指定
mimeMessage.setSubject("Hello World JavaMail","iso-2022-jp");
// メールの内容を指定
mimeMessage.setText("testtest","iso-2022-jp");
// メールの形式を指定
mimeMessage.setHeader("Content-Type","text/html");
// 送信日付を指定
mimeMessage.setSentDate(Calendar.getInstance().getTime());
// 送信します
Transport.send(mimeMessage);
ご教授お願いします
stacktraceでおk
560 :
デフォルトの名無しさん :2008/07/26(土) 15:46:36
String を int に変換するのってどうしたらいいんですか?
やさしいjavaにはそんな方法書いてなかったきがする。あれはダメだ
やさしい(ところだけ)Javaだからな
Stringからintは文字入力当たりで乗ってそうな気がするが・・
教育は国家の土台なのに。 これじゃ砂上の楼閣だ。
やさしいjavaもやさしいC++も書いてあることかわらないからな
どんな頭してんだよw
568 :
デフォルトの名無しさん :2008/07/27(日) 00:16:27
プログラム言語Javaを読んでて、finalがスレッドで特別な意味を持つ、って感じの説明の意味が分からん。 あるスレッドでStringをクラスのstaticフィールドに書き込んで、その後に別のスレッドからそのフィールドを 見ても、書き込んだ値が見えることが保証されない。でも、finalにすれば保証される。 不変オブジェクトだから同期が必要ない、と言うのはプログラマの誤解だ。 みたいなことが書いてあったが、値を変えない見るだけの変数なら、同期なんて必要ないし、 普通、他の言語でも同期なんてしないよな?ちがうのか?
570 :
デフォルトの名無しさん :2008/07/27(日) 00:49:43
あるスレッドで書き込んだものが別のスレッドで見えるのが保証されるのは 何らかの方法で同期化された場合だけ
573 :
デフォルトの名無しさん :2008/07/27(日) 02:10:13
Javaでファイルの移動を実行させる場合には、みなさんは、どのメソッドを使ってますか? (コピーではなく移動)
File#renameTo()
575 :
デフォルトの名無しさん :2008/07/27(日) 02:12:53
File#renameTo
577 :
デフォルトの名無しさん :2008/07/27(日) 02:18:06
>>574 import java.io.*;
public class TestRenameToDir{
public static void main(String[] args)throws IOException{
File f = new File("a\\");
f.renameTo(new File("b\\"));
}
}
こんな感じで書いてみたけど、フォルダ"a"の中身は移動してくれません・・
>>575 Integer#parseInt(String) で String から int に出来るだろw
あと、Integer から int は parseInt() ではなく intValue()
>>558 MessageID は設定しなくていいのか?
他のところ(yahoo とか infoseek とか)には送れている?
Outbound Port 25 Blocking な ISP かどうかは確認した?
Hotmail 側でなんらかの受信遮断処置(Sender ID/SPFとか)をしていないか確認した?
>>573 カットアンドペーストをやりたいってこと?
バイトストリームで新しいファイルに全て書き写して
元のファイルをFile#delite()で消すのは?
>>577 それだとaの中身をbに移動じゃなくて、aをbにリネームだな。
流れぶったぎってすいません。 とりあえずJAVAの絵本を読んたので、これからJAVAを始めたいのですが 初心者から中級者あたりまで、大人の階段を一気にかけのぼれるような 本を教えてくださいませんか。 だいたい三冊〜四冊くらい買う予算は用意してます。 初級者→できる初級者→職場にいても舌打ちされない程度の雑用兼初心者→飯に誘ってもらえる程度の中級者 という段階を踏みたいです。 単純に、みなさんが昔参考にした本を、赤ちゃんレベルから順番に教えていただければいいかな、と。
「本で勉強しました」っていうのは軒並み使えないので とりあえず何か作れ。
>>577 「ファイルの」移動だと言っとろーが。
a\c.txt
b\
で a の中身を b に移動させたいのなら
new File("a\\c.txt").renameTo(new File("b\\c.txt"));
にしないといけないんじゃないか。
おまいら、今日は日曜なのに仕事してんの?
>>583 ありがとうございます。
本だけ読んでも、童貞のエロ孔明にすぎないですもんね。
でも、今の僕は「ハーイー」しか言えないイクラちゃん状態なんです。
せめて人間の言葉がしゃべれるレベルになるには、何か本を読まないとダメかなと。
>>582 「三冊〜四冊」読んだだけで「飯に誘ってもらえる程度の中級者」になれたら苦労せんわw
本を読んで理解するのも新しいことをするには必要だが、
>>583 が言うように自分で作ってみたり、
誰かが作ったものを読んで、どうしてそうなってるのかとかどうしたらより良くなるのかとか考えろ。
そういうことで「階段を登れる」もんだと思うぞ。
>>582 入門書が終わって一通り言語仕様を理解しても、困ったことにそれだけじゃ足りない
オブジェクト指向や周辺技術についての理解が必要
本はもちろん有用だが、コードを読み書きしないとダメ
一冊だけ。「Effective Java」どちらかというと中級者向けになるんだろうか
しばらくすると第二版が出るらしい
入門書はよく分からん。ただ「独習Java」は勧めない
>>585 ここは仕事場だったのかw 完全に遊びに来てるぞww
>>587 そうですね。考えが甘かったス。
>>588 ありがとうございます。
その本を買って、わけのわからなさに打ちのめされてみたいと思います。
やっぱりコードの読み書きが大事なんですね。
サンプルの多そうな本を買ってみます。
>>588 俺は独習Javaやったんだけど、わかりやすくて入門書としては良いと思うんだが。
なぜお勧めできないの?
>>582 2冊目としては
・Sun認定資格 SJC-Pの教科書
ついでに資格もとれるかも
・JavaプログラマのためのUML
UMLやOOPに関する知識がざっくり得られる。
・Effective Java
Java言語独特の作法、やってはいけない事を教えてくれる。
「独習Java」は俺もお勧めできない。
>>593 ちなみにお勧めできない理由を教えていただけると嬉しいです
>>591 いきなりオブジェクト指向とは云々と書かれてて頭を抱えた記憶があるのと、
使われているクラスが全体的に古い感じがする(VectorとかStringBufferとか)
JDK5.0以降の構文拡張に関連する記述が少ない
・・・・と書いてて気づいたが、もう第4版が出てたのか。そっちは確認してない
>>595 StringBufferではいけないの?
独習Javaは今となっては古いんだわ、1.4もしくはもっとふるいのがベースだから。 少し遠回りしてもOKならば、俺は勧めるよ。 あれをやり込めばかなりの量のコードを書くことになるからね。 その後、1.5に対応するために、開発者ノートシリーズ「Java1.5 Tiger」ってのをお勧め
>>597 今ならStringBuilderがある。違いは同期化の有無
>>599 StringBuilderが同期がないんでしょ?
>>593 ありがとうございます。
早速アマゾンで検索したのですが
■Sun認定資格 SJC-Pの教科書
これはありませんでした。正式名称でしょうか。
また、こういう初心者から入りやすい教科書系の本は、自分に必要だと思いましたので
この本以外の教科書系で良いものがありましたら、よろしくお願いします。
■JavaプログラマのためのUML
似たような名前の本が二冊ありました。ソフトバンクから出ているほうでいいのでしょうか?
カットシステム社から出ている本も評価が高いようです。
すいません。
>>597 別に問題はない。ただ速度を求めるなら StringBuilder ってだけ。
最近は CPU も早いんだし、StringBuffer でもいいけどね。
今まで質問してる人と別人ですけど 俺も本で勉強してて「10日で覚えるJAVA入門」と 「トレーニグドリルJAVA」と「JAVA入門の入門」を買って 基礎の基礎から勉強したいから読んでるんですけど 挙げられた本買ってこようと思います
独習javaは演習問題の解答がついてないからうんこ
>>604 SUN教科書Javaプログラマ(SJC-P) (SUN教科書)を購入することにしました。
評価が低くしているは「初心者向けである」という点らしいので、
逆に初心者の僕には持って来いですね。ありがとうございます。
UMLの本は、もう一冊のほうを買うことにしました。
大人の階段上る君はまだシンデレラさ
609 :
デフォルトの名無しさん :2008/07/27(日) 17:02:40
Javaをやってる時点でお子様
Javaを馬鹿にするやつはJava言語規定を読んだことがないんだろうな
611 :
デフォルトの名無しさん :2008/07/27(日) 17:55:14
>>584 なるほど。
ということはjavaではディレクトリの移動は出来ない?
612 :
デフォルトの名無しさん :2008/07/27(日) 17:58:36
>>611 ツッコんでいいやら呆れていいやら。
ディレクトリの移動と言っている動作が
「ディレクトリの中身を全て別のディレクトリに移す」
ことで、出来ないと言ってるのが
「File(を示す何か)クラスのrenameTo()のように一発で出来るものが無い」
という意味なら、Javaの標準APIでは無いかもしれない。
が、「javaで」出来ないのかといえば、数行〜数十行のメソッドを書けば出来るだろうし、
標準ではない Jakarta 等にはあるかもしれない。
ディレクトリの移動ってったって、 HDD上での位置は変わらないけど、 そこにどういうパスでアクセスするかって だけの話だからなぁ。 パス情報を変えればいいだけの話。
615 :
デフォルトの名無しさん :2008/07/27(日) 18:26:35
こんなかんじで、ディレクトリ下のファイル一覧を作成しないと、ディレクトリ単位の移動はできない? import java.io.*; public class FileTest{ static FileWriter fw ; public static void main(String[] args)throws IOException{ System.out.println("どのディレクトリのファイル一覧を作成しますか? Directory?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); fw = new FileWriter("list.txt"); File f = new File(br.readLine()); File files[]= f.listFiles(); fileShow(files); fw.close(); } public static void fileShow(File files[]){ for (int i=0;i<files.length;i++){ if (files[i].isFile()){ try{ fw.write(files[i].getAbsolutePath()+"\n"); }catch(IOException e){System.out.println("書き込みエラーです");} } else if(files[i].isDirectory()){fileShow(getDirectory(files[i]));} } } public static File[] getDirectory(File file){ return file.listFiles(); } }
>>615 ディレクトリ自体のリネームはこんなじゃね?
new File("hoge\\").renameTo(new File("hogehoge\\"));
>>617 上書きは個別に判断しなくちゃならないな
619 :
デフォルトの名無しさん :2008/07/27(日) 20:26:13
>>617 いまのバージョンのJDKじゃコンパイルできないね。
何が原因なのだろう
>>619 単にclassやimport java.io.*; を省略してるだけ
621 :
デフォルトの名無しさん :2008/07/27(日) 20:51:31
javax.scriptで使えるJavaScriptのDOMでXPath使える? xpath使いたくてチンコギンギンにしてるんだけど
そもそもDOMつかえね
踏み台に使えるよ
アクセスレベルで、public、protected、privateはよく解かるのですが、 パッケージアクセスの使用すべきポイントがわかりません。 本来どのようなときに使うべきものなのでしょうか?
他のパッケージに見せたくないクラスやメソッドに。
>>625 すみません。言葉不足でした。
パッケージ内でアクセスが可能なのはわかっているのですが、
クラス配置・クラス設計で考えたときに、パッケージアクセスを使用した方がいいクラス間関係ってどういったものがあるかが知りたいです。
同じパッケージのクラスにはアクセスさせたいけど、それ以外にはアクセスさせたくない場合。 パッケージ共通で必要だけどパッケージ外では見せてもしょうがないものに使えばいいんじゃね? パッケージは何かの機能を実現するクラスの集合だから、パッケージ外部に公開する機能を補助するために、 パッケージ内部にだけ必要なようなものが存在することはあるんじゃない?
例えば・・・・・・・、テキストエディタのコンポーネントを作るとする たぶん TextEditor クラス本体以外にも、LineBuffer とか UndoBuffer とか色々なクラスが必要に違いないが、 これらはエディタの実装のために必要なだけであって、使うだけの人は触らないだろうし触ってもあんまり意味ないと思われる これらテキストエディタ関連のクラスは全部 com.example.myname.texteditor だとかいったパッケージに入れ、 TextEditor や TextEditorEventListener だとかいった使う人用のクラスやインタフェイスだけ public にしといて、 LineBuffer とか UndoBuffer とかいった内部実装用のクラスはパッケージアクセスにしとけば、 外から見てすっきりするし、勝手に内部構造を触られてややこしいことになったりもしない
protectedがパッケージスコープも持つのに迷ってしまう人は多いね。
protected は基本的に継承用だろ。
Eclipse3.2.0をインストールして、言語パックNLpack1-eclipse-SDK-3.2.1-win32も上書きして メニュー等IDE自体は日本語になったのですが、IDEの[ヘルプ]→ダイナミックヘルプから見れるJavadocが英語のままです。 ここのダイナミックヘルプを日本語にしたい場合はどうしたらよいのでしょうか?
protectedはパッケージ外から継承されたとき用で、 パッケージ内は基本的にスコープなど気にせずに みんなパッケージスコープを使えっていうのが本来の設計思想。 メンバーのデフォルトスコープがパッケージスコープなのがその証拠。 パッケージ、モジュール、ユニット、ライブラリ呼び方はいろいろだが、 その範囲内は適当にという言語は多いからそれに倣ったのだと思う。 例えばdelphiはprivateがユニットスコープだった。 ただ、javaの利用者がアバウトな使い方を良しとしなかったのでそういった使い方は余りされていない。 みんな一生懸命privateと書いている。
>メンバーのデフォルトスコープがパッケージスコープなのがその証拠。 ってのはどーなんだろね? 単に新しい予約語考えるのが面倒だった、 既存の予約語 例えば package でパッケージプライベートにしても良かったけど 予約語に複数の意味持たせるのは汚いからあまりやりたくなかった、 とかも考えられるけど。
>予約語に複数の意味 それはすでに final がやっちゃってるような・・・
>>636 複数の使い方があるだけでいいなら class もあるし。
デフォルトでは右のほうに出るヘルプビューのjavadocを日本語で見たいです。
なぜjavaはカレントディレクトリを移動できない(させない)のでしょうか?
カレントディレクトリなんて、ユーザがコマンドラインで指定したファイル名を解釈するとき以外、何に使うんだ?
いまやWebのほとんどはjavaが絡んでいるって聞きますが、 具体的にWebでのJavaって何をさしているのですか? JavaによるWeb開発をしようと本屋に立ち寄ったはいいけど、 なにやら環境が沢山あり過ぎて何に手を出すべきか迷ってしまいます。 一般にWenでのJava=JSPの本を買うのが普通なんですか?(+DBMS)
>いまやWebのほとんどはjavaが絡んでいるって聞きますが その統計にjavascriptが混じってることは間違いない。
> いまやWebのほとんどはjavaが絡んでいるって聞きますが、 そんなことないw
Webっていってもただのホームページとかでなく、 業務で利用するようなWebシステムです。
絡んでるってのはつまり サーバー上でJavaが動くって事じゃないか 動かしてるかどうかは無関係に
647 :
デフォルトの名無しさん :2008/07/28(月) 19:39:53
すくなくとも、JavaScript本は買わないほうがいい 仕事じゃ使わない。
使うよ
649 :
デフォルトの名無しさん :2008/07/28(月) 19:46:42
使うこともある程度 最近は
仕事によるだろjk
Tomcatが主流
652 :
デフォルトの名無しさん :2008/07/28(月) 20:06:57
JAVAにまつわる専門用語が氾濫しているが Webは儲からないのでやめたほうがいい
>>645 社内業務システムなんかだとASP.NETも多いぞ。
社内業務システムはACCESSとEXCELだろJK
655 :
デフォルトの名無しさん :2008/07/28(月) 20:41:49
Beanがお勧め
学校でとりあえずjavaの基礎を習ったのですが、 そこではjavacでコンパイル、コマンドプロンプトからクラスファイルを 指定して実行したのですが、これがjavaの基本なのでしょうか? exeファイルを作って直接実行、ということは出来ないのですか?
>>656 run anywhereじゃなくなるから、exe化はJavaの思想とは違う。
不可能じゃないけどね。
exeの変わりにjarと起動用のバッチファイルを生成するプログラムを作ったことがあるよ。 裏でant呼んでコンパイルして最後に*,classを消してしまうプログラムなのだけどわりと重宝した。
exeにするのはjavaの思想に反しているのは分かりますが… となると、実行には常にコマンドプロンプト等が必要ということですか?
だからjarファイルにすればダブルクリックで実行できるって
Windowsのアプリが作りたいなら素直にC#にいったほうがいいと思うが Javaとたいして変わらないから
662 :
デフォルトの名無しさん :2008/07/28(月) 22:18:26
C#の将来性は? 結局VC++が増加しそう
学校で習いたてならそういう感想を持つだろうけど実際の開発でjavacは使わないから安心していい。
>>662 それをJavaスレで聞いてどーすんだ?
>>662 Google Code Jamの言語別統計をみると、C++とJavaが人気のようだけど。
くそ、こんなときにIDが表示されれば・・・
>>665 apache ant
IDEのeclipseやnetbeansもこれを中で使ってる。
669 :
デフォルトの名無しさん :2008/07/28(月) 22:33:07
670 :
658 :2008/07/28(月) 22:39:28
でてきた。こんなのです。学習用には重宝した。 //++@ sample //++m local.test.Hello //++ local/test/Hello.java package local.test; public class Hello { public static void main(String [] args) { new Hello2().hi(); } } //++ local/test/Hello2.java package local.test; public class Hello2 { public void hi() { System.out.println("hello world !"); } } //++ 以上をsample.txtに保存、コンパイルでsample.jarとsample.batを作って実行。 C:\>trj sample.txt C:\>sample hello world !
>>668 Antはコンパイラと言うわけではないのでは・・・
>>670 良く分からないが、それこそ、Antでするようなこと?
>>672 そのプログラムは
ディレクトリ掘ってjavaファイル配置してbuild,xml作ってantを呼び出す。
jarだけ元のディレクトリにコピーして作業用のディレクトリを削除。
antはコンパイラというよりmakeユーティリティ。
makeと違ってjavacそのものではなくjavaのランタイムの中にある
コンパイル用のモジュールやjarを作るためのモジュールを呼び出す。
674 :
デフォルトの名無しさん :2008/07/28(月) 22:58:40
.NETやJAVAってどんどんいろんな物取りこんでんだな、 JAVAは JRubyでRubyが JythonでPythonが .netは ASP、Visual Basic、Visual C#、Visual C++、Visual J# 等が動くようになってる。 時代の流れは速いな・・・ これからプログラミングするには覚えるの多すぎるな 最近の若い世代は覚える技術が多すぎて可愛そうだわ
IronPythonやIronRubyもあるでよ
Javaは配列とオブジェクトは参照渡しということですが class Hoge{ public int x; Hoge(int t){x=t;} } public class Cui{ public static void main(String[] args) { Hoge A=new Hoge(7); Hoge B=new Hoge(999); change(A,B); System.out.println(A.x +" , "+B.x); } public static void change(Hoge A, Hoge B){A=B;} } 上の表示結果は「7 , 999」でchange内をA.x=B.xにすると「999 , 999」になる、 というのがどういうことなのかイマイチ分かりません。 参照渡しなら元のAはBのオブジェクトが指す所を指すようになって A=Bで「999 , 999」になるように思えたのですが、どうしてでしょうか?
参照渡しをしているわけではありません。 参照を値渡ししてるだけです。
メソッドですでに参照として受け取ってるから。 mainメソッド内で持っている、あるオブジェクトへの参照Aと、メソッドで受け取った参照は、参照先は同じでも、別物。 だから、上の例ではchangeで確かにAの指す先はBとしてあるが、mainメソッド内の参照には影響がない。
オブジェクトの参照も「値」で、その値をコピーして渡してる感じ で、いいんだっけ?
main内の Hoge A=new Hoge(7); これでAが指してるアドレスが仮に0x1110〜0x1120だとすると、 change(Hoge A , Hoge B)でのAは別のアドレス(仮に0x2220〜0x2230)を指していて、 その中身が0x1110〜0x1120に入っているものと同じになるってことでしょうか?
A の指してる先は同じ しかし A 自体は別々
それはクローンだな。 オブジェクトの実体:0x1100〜0x1200 main内のA:0x2000-0x2010(実体の格納先など) change内A:0x2300-0x2310(同上) アドレスで書くとかえって分かりにくくなるかもね。 サイズなんか適当だから。
代入前 ------------ -Hoge-- | main の A |---> | x = 7 | ------------ ------- | main の B |-----↑----- ------------ | ↓ | change の A |------ -Hoge--- ------------ | x = 999 | | change の B |--------> -------- ------------ A=B 代入後 ------------ -Hoge-- | main の A |---> | x = 7 | ------------ ------- | main の B |------------ ------------ ↓ | change の A |--------> -Hoge--- ------------ | x = 999 | | change の B |--------> -------- ------------ mainのAは何も変わらない
ああなるほど! 参照ではなく参照を値渡しているって「指している矢印」がもうひとつ出来るイメージですね! 皆さんのおかげでやっと理解することが出来ました。 こんな時間にも関わらずもの凄く分かりやすい説明をして頂いて本当にありがとうございます!
Javaの変数は、 プリミティブに対しては値そのものが入るけど、 オブジェクトに対してはそのオブジェクトへの参照が入る メソッドは、それらの値渡しをする
javaでは参照渡しはないのですか
ないです
プリミティブ以外は参照わたしじゃなかったのかい?
メタには参照渡しだけど、メタじゃ済まない部分が顔を出す。
692 :
デフォルトの名無しさん :2008/07/29(火) 19:30:56
すみません、バケットソートをカウントじゃなく 二次元配列で作ったらものすごく処理が遅くなったんですけどどうしてでしょうか?
>>692 それだけだと作り方が悪いとしかいえない。
>>691 画像読み込んで1pxづつ見ていくだけ
色取得も出来るし簡単だよ。
多分ものすごいHTMLのソースになってるんだろうけど・・
696 :
デフォルトの名無しさん :2008/07/29(火) 19:56:33
>>694 2次元配列のプログラム思い出しながら書いてみました。
だいたいこんな感じです。
maxはバケットソートを使って並び変えたい要数の最大値です。
max++;
sort_array.length=tail
int[][] bucket=new int[max][tail];
for(int i=0 ; i<tail; i++){
int m=0;
while(bucket[sort_array[i]][m]<=1){
m++;
{
bucket[sort_arrray[i]][m]=sort_array[i]
}
for(int i=1; i>tail; i++){
while(bucket[i][m]<=1){
sort_array[i]=bucket[i][m]
m++:
}
}
697 :
デフォルトの名無しさん :2008/07/29(火) 20:00:18
すみません、一個目のwhileのとこ「<」と「>」間違えてました while(bucket[sort_array[i]][m]>=1){ m++; }
バケットソートの高速性は要素数に比例する量の処理で済むところだ そのコードのように二重ループにすると要素数の二乗に比例する量の処理が必要になる 大雑把に言ってバブルソートと同じ計算量
どうしようもない質問かと思いますが コンストラクタというのはインスタンスを作成するのに使う クラスの特殊なメソッドのようなものという認識で良いのでしょうか?
うん
>>700 ありがとうございます
コンストラクタの作成と書いてあったので混乱しました
「クラスのコンストラクタを使ってインスタンスを作成する」
と脳内変換しておきます
>>693 ,
>>695 レスありがとうございます!
1px取得してその色の■をhtmlの方でmarginとpaddingを0にして
ひたすら敷き詰めていけば出来るものなのかな?
ちょっとその方向で今から作ってみようと思います。
>>701 コンストラクタの作成は、コンストラクタの定義を書くということだと思うが
>>702 ちょっとやってみたけど単純にテキストじゃないっぽい?
ブラウザにもよるかもしれないけれど、テキストでやると、属性値が変わる部分でずれる部分があるから、テーブルでやってみたらきれいにできた。
public static void encode(BufferedImage input,PrintStream writer,String pxStr,int width,int height){
BufferedImage out = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
out.getGraphics().drawImage(input, 0, 0,width,height, null);
writer.println("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
for (int i = 0; i < height; i++) {
writer.println(" <tr>");
for (int j = 0; j < width; j++) {
int rgb = out.getRGB(j, i);
writer.printf(" <td style=\"background:#%06X\">",rgb&0xFFFFFF);
writer.print(pxStr);
writer.println("</td>");
}
writer.println(" <tr>");
}
writer.println("</table>");
}
pxStrはテーブル内の文字列。全角スペース*2くらいがちょうどいいかも
拡大縮小は今回ほんとに最低限の実装だけどw
>>701 文脈が解らんけど、
複数のコンストラクタを定義できるし、そのときは「コンストラクタを作成する」という。
質問させてください 現在、jdk6でgui開発を行っています サイズを指定しないJFrameの上にサイズを指定したJPanelを載せて、JFrame#pack()を行い、大きさを整えようとしたのですが、なぜか、小さくなってしまいます。 JPanelはsetSizeで800*600とかにしているのですが、実行するとせんべいみたいな形になってしまいます なぜなんでしょ? また、せんべいみたいな形になったwindowを広げるとJPanelは800*600なのに、それを超えてJFrameの大きさと同じ大きさまで拡大してしまいます これも、なぜなんでしょ? 解決方法や実装の常識的な方法があれば、教えてください
>>706 setPreferredSize(Dimension)
Swingのソース見れば分かるがsetPreferredSize()はかなり無視されてるぞw
>>706 サイズも含めて望みのレイアウトになるようなレイアウトマネージャを使う。
そしてそのレイアウトマネージャがレイアウトに利用するコンポーネントのプロパティを正しく設定する。
以下の方法でurlクラスロードできません。 URL[] url = {new URL("file:///C:/…/classes")}; new URLClassLoader(url).loadClass("/jp/co/…/Xxx")); → ClassNotFoundException new URLClassLoader(url).loadClass("/jp/co/…/Xxx.class")); → ClassNotFoundException 実際のディレクトリ クラスパス → C:\…\classes クラス → C:\…\classes\jp\co\…\Xxx.class
>>712 > new URLClassLoader(url).loadClass("/jp/co/…/Xxx")); → ClassNotFoundException
new URLClassLoader(url).loadClass("jp.co.….Xxx"));
loadClass する時のクラス名はバイナリ名らしいので
packagename.classname$innerclassname みたいに
パッケージ及びトップレベルクラスまでは '.' で繋いでいい。
714 :
デフォルトの名無しさん :2008/07/30(水) 15:13:44
質問です。 JAVAのstaticメソッド内に宣言したローカル変数は ヒープに領域を取られるのでしょうか? 配列などのオブジェクト宣言時は領域を取られるとあったのですが、 変数はオブジェクトではありませんよね?
フリーの日本語で音声合成ができるライブラリってありますか?
javaでボタンなどのコンポーネントを追加するときは、 getContentPaneでコンテナを取得して、 そのコンテナに対してコンポーネントを追加すると思います。 そこで、質問なのですが、コンテナを複数個作成することはできるのでしょうか。 目的は、複数のコンテナを複数の画面とみなし、 メニューなどから必要に応じて表示するコンテナを切り替えることです。
>>716 CardLayout使うとか、JLayeredPane使うとかじゃだめ?
>>717 ありがとうございます。早速、調べてみます。
719 :
デフォルトの名無しさん :2008/07/30(水) 16:37:41
質問です。 JAVAのstaticメソッド内に宣言したローカル変数は ヒープに領域を取られるのでしょうか? 配列などのオブジェクト宣言時は領域を取られるとあったのですが、 変数はオブジェクトではありませんよね?
>>719 メンバだろうがstaticだろうがローカル変数はスタックじゃね?
721 :
デフォルトの名無しさん :2008/07/30(水) 16:44:07
標準ライブラリってどうやって見るんですか?
>>714 staticか否かにかかわらず、ローカル変数は「ローカル変数テーブル」
に置かれる。(で、ローカル変数テーブルは通常はスタック上に置かれる)
でも、ローカル変数が指す先はヒープ上かもしれない。
例:
static void foo() {
Foo f = new Foor();
// f はローカル変数テーブルに領域が取られるが、fが指すオブジェクトはヒープ
>>719 同じことを二度も書かなくていいよ。
これで二度書けば解答がもらえると認識した。
enterflagってどうゆう関数?
書いた奴に聞け
ディレクトリ階層を取得してくれるライブラリはありませんか? シンボリックリンクとかあって、単純に再帰かけると無限ループ入るんで、 誰かが提供したライブラリを使ってプログラミングがしたい。 読み込んで、ノードがサイズとか名前とか更新日時とかを持った木構造にしてくれればいい。
winのlnkファイルもあるしな。 まああれは解析されてるがディレクトリツリーの取得ぐらい自分で書け。
>>728 すごくだるいです・・・
他人が書いたライブラリを使った方が正確です。
731 :
デフォルトの名無しさん :2008/07/31(木) 01:18:13
Javaで、Excelのデータを読むときは、poiを使用するけど もし、Javaで、OpenOfficeOrgのドキュメントのデータを読むときは 何を使用されていますか?
732 :
デフォルトの名無しさん :2008/07/31(木) 06:06:04
for文について質問です。 int i; for(i=-3;i<3;i++); といった始めにiを-3としておいて-3≦i≦3の計算をさせることはできますか?
kwsk
>>732 それだと-3≦i<3の範囲になっちゃうけど
springなどのDIってのは、結局のところJDKのProxyで割り込みかけてるってのが正体ですか?
public void paint(Graphics g){ g.setColor(Color.green); g.fillArc(30,30,150,100,90,250); } アプレットに表示した後、数秒待機してこの図形を消したいのですが、 図形を消す命令というのはありますか?
clear
>>738 よろしかったら記述方法のヒントを頂けないでしょうか?
g.clearではだめだったので… orz
private bool display = true; void 数秒後に発動するタイマーのハンドラー() { display = false; 画面の再描画指示 repaint() でいいんだっけ? } public void paint(Graphics g){ if (display) { g.setColor(Color.green); g.fillArc(30,30,150,100,90,250); } }
解決しました、ありがとうございました。
742 :
デフォルトの名無しさん :2008/07/31(木) 19:59:56
JFrameのウィンドウを何らかの処理をした後、自動でHIDE_ON_CLOSEの状態に したいのですがどうすればいいんでしょうか?
setVisible(false)
jspとかサーブレットやるときはほぼ確実にコンテナにトムキャットを使いますけど、 実際に現場でもトムキャット(+アパッチ連携)が使われてるんでしょうか? それともグラスフィッシュとかでしょうか?
使いたいものを使えよ
WebSphereやWebLogicのようなメーカーものも強いな
Tomcatのみで運用だけはない、そのくらいかと
748 :
デフォルトの名無しさん :2008/07/31(木) 23:47:46
gr3というゲームがあるんですけど、 Javaのなんというプログラム(ファイル?)で開いていいのかわからず、 起動できません。 教えてください。
jdbcでぐぐれ
共通の定数クラスやユーティリティークラスをみんなで更新しているので、cvsのマージが大変です。 皆さんはこのような時どうされます。 定数クラスを各自作成し、最後にリファクタリングで1つにまとめコミットし、その他は破棄でやってます。 自分ではなかなかだなと思っています。
このint aをマルチスレッドで扱うとき、synchronizedブロックで囲って排他したほうがいいでしょうか。 オブジェクトの捜査ならその中でいろいろやるけど1行だけの更新なら必要ないと思うのですが。
>>751 git でも mercurial でもなんでも使えよ。
>>752 更新する場所がソース上で1行だろうがなんだろうが、そこを通るスレッドが複数
存在するならガードする必要があるのはあたりまえだろボケ。
>>753 要は、intのデータバイト更新しかかり中に別スレッドが読んじゃうからということですか?
2つのスレッドが同時に更新したら・・・とか 同期しないと別スレッドの更新した値が更新されて見えないことがあるよ・・・とか
>>756 その、同時に更新したらという懸念はわかるけど、同時に更新したらどうなるの?
データはめちゃくちゃになる、ということ?
5年ぐらいJavaいじってなくて、そろそろまたいじろうかと思ってるんですけど Web系の場合、何で遊ぶのが一番仕事の役に立ちそうですか? Tomcat+Struts2あたり? 宗教戦争っぽくなりそうですけど、目安を知りたいので教えてください
金融系で開発する場合の開発環境はEclipseが多いですか?
事実上EclipseなのだがWebSphere Studioを使ってるよ
762 :
デフォルトの名無しさん :2008/08/01(金) 14:25:39
JavaアプレットってSwingやAWTのことですか? 現在、Javaアプレットに代わって利用されているJava技術は何ですか?(FLASH等多言語は除く)
java web start (jnlp)
環境変数設定してないのかな
jnlpの実装がRIのjwsしかないってのがな。 ブラウザが実装してくれればいいのに
>>764 bin フォルダの中に javac.exe はあるぽ?
769 :
デフォルトの名無しさん :2008/08/01(金) 23:48:48
webアプリのビジネス層のインターフェースの設計について質問。 下のように、似たようなシグネチャのメソッドを持つインターフェースを 数種類だけ作ってアプリ全体で使い回そうとしてるんだけどこれって普通ですか? コントローラからはビジネス層へのアクセスは必ずこれらを呼ぶようにしていますが、 もっと賢いやり方があれば教えてください。 public interface hogeLogic { void execute (object o) } public interface hogeLogicReturningObject { Object execute (object o) } public interface hogeLogicReturningList { List execute (object o) }
public interface hogeLogic<T> { T execute(Object o); }
>>770 これは別ですか?
public interface hogeLogic {
void execute ()
}
あとjdk1.4だと
>>769 以外に何かありますか
いまさら1.4かよ。Java7出たらEOLだけどいいのか?
java.lang.Void
java.lang.ZOID
新規案件で1.4とかもあるぜ、もうアホかと
>>772 Sunが金払う顧客にはサポート続けるって言ってなかったっけ?
>>769 そのパターンでは、静的型付の利点を生かせないよね。
778 :
764 :2008/08/02(土) 06:23:37
>>769 インターフェイスを使うのは必要として、
ビジネス層の中身によるがObjectまで抽象化すると逆にメリットがなくなる。
もう少し具象化した型別にインターフェイスを用意したほうがよいと思うよ。
780 :
デフォルトの名無しさん :2008/08/02(土) 14:51:22
>>777 >>779 なるほど。確かにタイプセーフじゃないんで
>>769 はこれはこれでどうしたものか、と思いました。
参考までに1.5だと全部下ので
片が付くと思ったのですが、あってますか?
public interface hogeLogic<T, E> {
T execute(E commandParameterObj);
}
java.awt.Color.whilteとjava.awt.Color.WHITEは何の違いがあってどう使い分けるのよ
定数は大文字アンスコで書くのがルール 後はわかるな?
>>759 Web+仕事が前提だと、未だにStruts1がぶっちぎり。
Struts2はその他大勢とどんぐりの背比べ状態。
それでもあえてStruts1以外を選ぶなら、Wicketあたりをお勧めしておく。
Swingの経験はあるけどWebは初めてって人には、却ってWicketの方が分かりやすいかも。
>>782 いや、わからん・・・・
定数と同名のpublic変数フィールドがなぜ定義されてて、
どうやって使い分けるのか
検討もつきません。まじで。
APIドキュメントの読み方や利用方法がいまいち分からないのですが 丁寧に解説している本ってありますか? いま持っている本はドキュメントの使い方の説明はほとんどされてません。
>>786 1.4以前に定義された小文字の変数名だと命名規約に反する。
それで大文字を導入したが小文字の方を消すと以前作ったコードがコンパイルできなくなる。
>>788 辞典みたいなもん。
とくにAWTやSwingのドキュが意味不明です
GUIプログラミングの基礎を勉強すればいい
792 :
デフォルトの名無しさん :2008/08/03(日) 01:24:03
誰か
>>780 の件、たのむ
>ビジネス層の中身によるがObjectまで抽象化すると逆にメリットがなくなる。
メリットって?
>>792 よくわからんがコントローラー層から実行するメソッドごとに、
インタフェース作ることにならんかい?
極端な例だけど、
あるひとつのドメインに対して、
CRUDごとにインタフェース作るより、
まとめてインタフェース定義するほうが自然だよ。
>>792 ビジネス層でObject受け取ってうれしいか?
結局ダウンキャストしなきゃいけないじゃん。
795 :
デフォルトの名無しさん :2008/08/03(日) 15:52:03
JTableのsetAutoCreateRowSorterにtrueを指定した場合、 テーブルのカラムを押したときにソートができるようになります。 ところが、このソートの仕方がおかしいのです。 たとえば、次のような値は 8 1 14 -> 8 1 14 となるように思えますが、実際には 8 1 14 -> 14 1 8 のようになってしまいます。 DefaultTableModel.addRowにはIntegerオブジェクトを渡しているのに、 数学上での大小を区別してくれません。 どうすれば、よいでしょうか。
796 :
デフォルトの名無しさん :2008/08/03(日) 16:07:40
795です。 スペースがうまく入っていないので補足します。 言いたいことは、1,8,14という並び方になってほしいのに、 1,14,8という並び方になってしまうということです。
文字列として比較しているからだろ
800 :
デフォルトの名無しさん :2008/08/03(日) 16:31:34
バイト配列→文字列の変換をするメソッドを書きたいです。 ぐぐってみたところ、以下2つのメソッドが引っかかったのですが どちらを使うべきでしょうか? asHex2()のif文は必要なのでしょうか。 public static String asHex(byte b[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < b.length; i++) { sb.append(Integer.toHexString((int) b[i] & 0xff)); } return sb.toString(); } public static String asHex2(byte b[]) { StringBuffer sb = new StringBuffer(b.length * 2); for (int index = 0; index < b.length; index++) { int bt = b[index] & 0xff; if (bt < 0x10) { sb.append("0"); } sb.append(Integer.toHexString(bt)); } return sb.toString(); }
ピンズが皆浮いてるw
誤爆った
>>799 すごすぎる...
正にどんぴしゃのコードです。
ありがとうございます。
ちなみに、
「シリアライズ可能クラス は long 型の static final serialVersionUID フィールドを宣言していません。」
という警告が出たのですが、これは何を意味しているのでしょうか。
動作の方は、至って正常です。
ググレ、カス
質問スレで回答がなかったので、こちらにも投稿させてください
mvel 勉強してるんですが、macro が分かりません。
http://mvel.codehaus.org/Macros mvel の macro とは何するものなんでしょうか?
どういったことを意図して作られた機能なのでしょう?
サンプルを実行しても理解できませんでした。
ただの文字列置換ではないですよね…
>>769 >>777 ,779 に賛成。
そもそも、何故そのようにまとめる必要があるのか?
そのまとめ方は、なんか共通処理があってそれを挿みたいから、それを interface で判断するって事?
自分は(おそらくその他大勢も)基本的にビジネスロジックも POJO がベストだと思っていて、
そのような共通メソッドでビジネスロジックを呼び出すスタイルは過去の物だと思っている。
例えば、Foo を渡すと Bar を返す Hoge という処理があったとする。
// interface
public interface Hoge{
Bar getBar(Foo foo);
}
// implementation
public class HogeImpl{
Bar getBar(Foo foo){
// do something
return bar;
}
}
さて、これでダメな理由って何? interface が増えるから?
個々のビジネスロジックの interface が増えるのは全く問題ではないのだが、
それが分からないのであれば、もっと勉強しなければならない。
ついでにこれを T execute(<E>) にした時の利点って何?
それは実装と interface の分離について何かメリットがあるのか?
最後に、とりあえず Seasar でも Spring でもいいから、なんか DI を使ってごらん。
サンプルアプリとかを見て、真似してみ。 やれば↑のことが分かるようになるはず、だと思う。
java にとっての DI は、もはや必須のパラダイム。 EJB3 にも DI が取り込まれたのも必然。やってみ。
HTMLを取得して、FORMタグ内のパラメータを作成して、フォーム送信するにはどうしたらいいですか? HttpURLConnectionを使ってHTMLを取得するまではできていて、 HTML Parserを使って、FORMタグ内のタグ解析もなんとなくできそうですが、フォーム送信がさっぱり GETならURLに?をつけてパラメータを結合したものをHttpURLConnectionから取得すればフォーム送信したことになりそうだけど、 POSTを使ってhiddenで送信されるパラメータをJava上から実現するのはどうしたらいいんだい?
コマンドプロンプト上で実行するJavaプログラムを書いてます。Win XPです。 時刻を表示して、時刻が変わったら上書きして表示するということをしたいのですが、 どのようにすれば良いのでしょうか。 また、無理だったら、画面をクリアして書き直すということをしたいのですが、 クリアの仕方もわかりません… 「Java 画面のクリア コマンドプロンプト」でググっても出ませんでした。
POSTだったらgetOutputStreamしてそれに書き込めばいいよ。
>>808 コマンドプロンプト(System.out)の書き換えは基本的に不可能
というか、OSに依存していてWindowsじゃ無理
改行して次の文字を表示していくか、簡単なGUIをSwingで作ればおk
>>811 ありがとうございます。
無理なのですか…残念です。
【時刻】2008/08/03/21:31:10
【時刻】2008/08/03/21:31:11
【時刻】2008/08/03/21:31:12
【時刻】2008/08/03/21:31:13
【時刻】2008/08/03/21:31:14
…
となるのは見苦しいですが、しょうがないのですね…
>>809 ,810,812
おまいらThx!即レスThx!
>>813 しょうがないっていうか、コンソールってどういう目的であるか考えろよ。
見苦しいんじゃなくて、そう流れるのが普通
HttpUnitすげーっと思って使ってみたらJavaScriptで落ちまくるw これはやり方が悪いのかねぇ。 どうもページ内でリンクされてる外部のJavaScriptを読みにいってないっぽいんだよなぁ
>>813 こんなことは出来るんじゃないか?
System.out.print("HOGE");
System.out.write(0x0D);
System.out.println("ORZ");
818 :
デフォルトの名無しさん :2008/08/03(日) 23:04:56
>>806 丁寧にありがとう。Springを使ってる。言ってることも理解できます。
実践J2EEシステムデザインって本読んで、それを参考にやってますが、
やりたいことは、コントローラでビジネスロジックを呼び出す回数を出来る限り
少なくして、コントローラのテストを簡単にしたい。
コントローラが扱うビジネスクラスを限定したいのです。
そのために、ビジネスロジックのinterfaceを2段がまえにして、
コントローラから呼ばれるinterfaceはexecuteである程度汎用化して、
(ObjectかMapでモデルオブジェクトだけ返してくれれば十分なので)
これしか呼ばないようにする。ビジネスロジックの入り口。
より具象化した型はexecuteを実装したクラスの中だけで
扱うようにしたいんだけど、これは変なのでしょうか?
public interface Hoge<T, E>{
T execute(E object)
}
public class HogeImpl<Void, Integer>{
private Foo foo; // DIする
private Bar bar; // DIする
public int execute(Object o) {
foo.doXXXLogic()
bar.doYYYLogic()
return foo.getZZZ() + bar.getZZZ();
}
}
public interface Foo{
int doXXXLogic();
}
public interface Bar{
Biz doXXXLogic();
}
819 :
818 :2008/08/03(日) 23:09:18
すみません、訂正。 public interface Hoge{ int execute() } public class HogeImpl{ private Foo foo; // DIする private Bar bar; // DIする public int execute() { return foo.doXXXLogic() + bar.doYYYLogic(); } } public interface Foo{ int doXXXLogic(); } public interface Bar{ int doXXXLogic(); }
>>818 だから、テストするクラスが少なくなってもテストするパターンが複雑になるんじゃ本末転倒。
それよりは静的言語のメリットを生かして、ビジネスロジックごとにインターフェイスきる方がいいんじゃね?ってのが流れだと(ry
>これは変なのでしょうか?
あえて時代に逆行しているのは構わないけど、誰からも支持されてないよな?
それが答えだよ
>>820 コントローラでぐちゃぐちゃとビジネスクラスを呼び出してる方が
テストは複雑な気がするのですが・・・。
POJOじゃないクラスでのテストが増えるってことでしょう?
ビジネスロジックを意味のある塊に纏めて実行するビジネスロジックを用意すればいいじゃないか。 変な皮被せるんじゃなくて、純粋にビジネスロジックとして纏めるんだよ。 何のための DI だよ?
>>817 目的のことが出来ました!
ありがとうございます。
824 :
822 :2008/08/04(月) 00:39:08
と思ったら、DI してるのか。
しかし
>>818 ,819 は何だ?
Foo も Bar も静的に型が決まるんだから、汎化して呼び出す意味が分からん。
本来 Foo やら Bar やらが持つ意味どおりに getXxx やら getYyy を呼べよ。
真剣にその汎化して呼び出す理由が分からん。
例えばカートを扱うサービスがあったとして、 putXxx とか removeYyy とかやりたいと思うのだが、
それだともの凄く窮屈じゃないか?
とても分かり難いソースにならないか?
実装とインタフェースの分離ってのは、やってもらうことは決まってるけど実装には依存しないってことだよ。
何でも屋インタフェースを用意するってことではないよ。
会計データを入力すると決算書を吐くインタフェースはあっていいが、
何か頼むと何かやってくれるインタフェースなんてあっても意味ないぞ。
なんか根本的に話が通じてない気がするな そもインターフェイスを統一することに何のメリットがあるんだ?
誰でも簡単に使える(笑)フレームワークでも目指しているんじゃない?
おk、インターフェイス名はプログラムIDの連番 全ての定義メソッドはexecuteだ プログラムID+Resultという型で結果を返すこと この手の設計と似ているね・・・
serialVersionUIDについて質問させてください。 次のようにクラスに追加したら、シリアライズに関するエラーが なくなると思っているのですがなくなりません。 どこが問題なのでしょうか。 model = new DefaultTableModel(column, 0) { // シリアライズに関する警告を消そうと思い追加 private static final long serialVersionUID = 1; // オーバーライドしたいメソッド public Class<?> getColumnClass(int columnIndex) { return Integer.class; } }; 便乗になるのですが、このようにクラスのインスタンスの生成時にメソッドを オーバーライドするというのは、よくあることなのでしょうか。 普通は、サブクラスを作成してそこでメソッドをオーバーライドし、 サブクラスのインスタンスを作成するものだと思うのですが。
>>828 ただ、エラーを消すために、
private static final long serialVersionUID = 1;
こんなことするくらいだったら、
eclipseの設定で出なくしちゃっていいよ。
設定のコンパイラの辺りでどーにかなるよ。
それが嫌ならちゃんと直列化について勉強するとよいよ。
>>828 イベントリスナやら、Comparatorなんかではよく見るけど、
インタフェースを実装するときがほとんどだな。
つまり、よくあることではない。
ってことだ。
>>828 @SuppressWarnings でおk。
@SuppressWarnings嫌いって多いけど、
そうなら勉強するしかない。
そして@SuppressWarningsが正解で、
デフォルトバージョンを入れてしまうことが間違いだと分かる。
>>便乗になるのですが、このようにクラスのインスタンスの生成時にメソッドを
>>オーバーライドするというのは、よくあることなのでしょうか。
よくある。
別にクラス作っても一緒だけど、
「たった一つ振る舞いを変える」かつ、
「その振る舞いはそこでしか使わない」
の場合は生成時オーバーライドが一番見やすい。
>>825 DI登場以前にはメリットがあった。
トランザクション管理とか、ロギングとかね。
今では、過去の遺物だと思う。
serialVersionUIDの警告はIDEが過剰に出してるものだからIDEの設定で切るのが筋。 javacやantだと出ないでしょ、たしか。
834 :
デフォルトの名無しさん :2008/08/04(月) 12:12:00
JAVAの最大化ボタンを押せなくする(使用不可能)プログラムを教えてください。 お願いします。くぐったんですけど出てきませんでしたm(__)m
>>835 宿題スレで書いてもらったコードだろ・・・
>private static DecimalFormat df = new DecimalFormat("000");
を
private static DecimalFormat df = new DecimalFormat("0");
でどうよ?
>834 java.awt.Frame#setResizable(boolean)
838 :
デフォルトの名無しさん :2008/08/04(月) 13:40:13
>>837 それはImportの所に置きますか?
それとも初期化の所に置くのですか?
JTableで作成したテーブルのカラムを後から変更することは できるでしょうか。 getColumnNameがあるのに、setColumnNameがないようなのです。 また、getColumnで取得できるTableColumnにも 名前を設定できるメソッドがありません。
setHeaderValue(Object)ってなかったっけ?
それでいけました! ありがとうございます。
Objectクラスはnewできますが、new Object()をする場合などあるのでしょうか。 今までロックインスタンス用としてしか使用したことがありませんが、他に有意義な使用法等あれば教えてください。
while ・・・ String a; a = ・・・ } は String a; while ・・・ a = ・・・ } すべきといわれますが、なぜでしょうか?
{がなくてwhileがどうなってるかわからんけど前者だとaの定義を何回も行う事になるから。
>>844 一般的には、前者の方がスコープ短くできるので良いとされる。
後者が良いのは a の初期化処理が共通で使いまわせる場合とかだね。
a.xml ======= <a> <b> <c>1</c> </b> </a> ======= b.xml ======= <a> <b> <c>2</c> </b> </a> ======= を下記のようにマージするクラスやフレームワークはあるでしょうか? <a> <b> <c>1</c> </b> <b> <c>2</c> </b> </a>
クラスをbyte[]に変換することは出来ますか? Hoge hoge = new Hoge(); byte[] buf = (byte[])hoge; 上記のようなことがしたいのですが・・・ よろしくお願いします。
>>533 javadoc -doclet 自作クラス … でjavadoc要素の操作をしているのですが、
javadocのデバッグはできるのでしょうか?
下記のオプションをつけてみましたが、不正なオプションでエラーになってしまいました。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
EventObjectなしのListenerってありですかねぇ? 単純な通知だけのとかは面倒でしょうがない。
>>851 単に何かが起きたことの通知だけなら
Java流のイベントソース/イベントリスナーの形にきっちり従わなくても
単純にObserver/Obserbableで作るのではだめ?
Obserbable → Observable
WindowsでコンパイルしたSwingアプリのラベルやらなんやらがLinux上でことごとく文字化けするんですが、 文字コードレベルではrun anywhereは実現できないんですか?
>>852 ありがとうございます。
通知の種類が複数あるため、Observerではちょっと・・・
引数でその種類を示す物を送るのもありですが。
DBにたくさんSQL文を投げる時に使うPreparedStatementって、 「?」の数が8個より大きいと使えないのかな?ちなみにバージョン1.5.1. こんなエラーが出る java.sql.SQLException: Parameter index out of bounds. 9 is not between valid values of 1 and 8 APIやら解説書にもそんな記述は無いんだが、だとしたら相当ショボイ部品だなぁ・・・
>>857 その辺はJavaよりもJDBCドライバの実装に依存する。
DBMSとJDBCドライバの名前とバージョンさらして。
>857 使ってるデータベースやドライバの仕様じゃなくて?
DBMS MySQLの5.0.27 JDBCドライバ mysql-connector-java-5.0.4 です。 この辺の仕様ということなら、残念ですね・・・。
862 :
857 :2008/08/05(火) 23:10:54
>>861 サンクス!
グーグル大先生に色々聞いてみることにします。
javaのStringクラスにログ的なものを入れた改修し、それを使用させるために -Xbootclasspath/p:-Xbootclasspath/p:C:\classes の起動オプションを追加したところ 以下のメッセージが出て起動できません。 JDK1.6です。 Error occurred during initialization of VM java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:394) at java.lang.System.initProperties(Native Method) at java.lang.System.initializeSystemClass(System.java:1072)
865 :
デフォルトの名無しさん :2008/08/06(水) 15:26:33
未だにj2sdk1.4.2_14を使っているんですけど、 Java入門者にとっては最新版でなくても差し支え無いですか?
>>865 1.5で言語仕様がかなり追加された。
それに合わせてAPIも実装だけでなくインタフェース部分も書き直されたので、
少なくともjdk5か、できればjdk6を使用したほうがいいと思う。
入門書とかもそれに対応したものを使う。
>>885 同じ1.4.2系列の最新版1.4.2_18にはしとこうぜ。
868 :
デフォルトの名無しさん :2008/08/06(水) 17:38:17
すみません,どなたか助言お願いします. DataOutputStreamクラスのwriteChars(String)を実行すると 出力先のtxtファイルでは文字列の文字1つ1つの間に 半角空白が1つずつ入ってしまいます. どうすれば空白が入らずに出力できるでしょうか. ちなみにANTLRという構文解析ソフト(javaで記述)の中で, out.writeChars(text); out.writeChars(Integer.toString(value)); などという感じで使っています.
>>868 16byteのキャラクタを未加工で出力してるんだからそれであってる。
DataOutputStreamを使ったことが間違い。
それでもこういう手合いはwriteUTFで自己解決してしまうんだろうな(笑
16bitだった。好きなほうで BufferedWriter out2 = new BufferedWriter(new OutputStreamWriter(out)); PrintWriter out3 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)));
871 :
sage :2008/08/06(水) 18:21:35
>>869-870 ありがとうございます!
文字列をそのままバイトコードとして流したのがだめだった,ってことでしょうか?
適当に言ってますが...
とにかくOutputStreamWriterを見てみます!
sageれてなかった... すみません.
UTF-16が開けるエディタがあったら問題解決かもしれない。 この場合必ずビッグエンディアンになるんだろうか。それともCPUのエンディアン依存?
>>873 DataInput/DataOutputはビッグエンディアン。
javadocのコメント内容が変更できるAPIはあるでしょうか
エディタのタブ背景をプロジェクトによって色分けするプラグインありますか? 前半で似たような名前があるとタブを見ただけでは解かりにくくて。
877 :
デフォルトの名無しさん :2008/08/06(水) 19:58:03
DefaultMutableTreeNode を使って JTree を作っているのですが、 Node ごとにドラッグ&ドロップ許可/禁止させたいのですが、可能でしょうか?
できる
可能
880 :
877 :2008/08/06(水) 20:30:16
orz どの辺りを調べればよいのでしょうか?
TreeModel とか TreeModelListener とか
awtかSwingのDnDパッケージだろ
883 :
デフォルトの名無しさん :2008/08/06(水) 22:38:31
JAVAってeclipse以外でできますか? 地元ネット喫茶にてeclipse(JAVA)ができなくなってました。 なるべくならJDKの全varに対応してるアプリがうれしいのですが。
意味が解らん
jniで使用するnativeライブラリをjarの中に含めるなどして java.library.pathにパスを追加せずにnativeライブラリを呼び出せることって出来るのでしょうか? なるべく簡単且つすっきりと纏めれたらなぁと思いまして。。
>>865 jdk6というかjre6の方が圧倒的に速い
887 :
デフォルトの名無しさん :2008/08/06(水) 23:54:54
JAVAの再生方法を教えてください
Javaは再生しません
889 :
デフォルトの名無しさん :2008/08/07(木) 00:54:22
ファイルに出力するときに PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("tst.txt"))); という風にやっているのですが、出力が途中で切れてしまい、最後までファイルに出力してくれません。 ・具体的には、ファイル1から文字列を読み込む ・文字列を加工してファイル2に出力 これをファイル1の最後まで行うのですが、pw.println(加工した文字列)では途中できれ、System.out.println(加工した文字列) だと途中で切れずに最後まで出力します。 解決法を教えていただけないでしょうか・・・
closeしてないとか
>>889 終わったらちゃんとpw.close()してる?
892 :
デフォルトの名無しさん :2008/08/07(木) 01:03:54
レスありがとうございます。 closeはしてるのですが・・・ブツッと行の途中で切れます
closeは実際に実行されてる? 明示的にflushを実行した場合はどう?
JVMからJVMって起動出来る?
>>893 よくやっちまうのがこのパターン。
FileWriter fw = new FileWriter("tst.txt");
PrintWriter pw = new PrintWriter(new BufferedWriter(fw));
fw.close(); // これが余計
pw.close();
>>894 外部プロセスは起動できるのだから
896 :
デフォルトの名無しさん :2008/08/07(木) 03:24:00
JAVAでいらない周りの背景を透かすにはどうやればいいのでしょうか? 不必要な白い部分まで写ります。
最終的にフレームの下地が写るから透かすのはuN以降じゃないと無理じゃない? コンポーネントの一部を透かしたいならSwingならできるけど。
>>885 JNI は最終的には Windows で言えば LoadLibrary 関数を呼ぶことになるので、jar の中に入れたままでは
不可能。
もしやりたいなら jar からテンポラリディレクトリに解凍(もしくはリソース読み込み)して、それを読み込ませる
ようにロジックを組まないとダメだと思う。
JFileChooserで得られるファイルが、 FILEオブジェクト固定であることに悩んでいます。 本当は、FileOutputStreamオブジェクトが欲しいのですが...。 file.getPathが返した値を、FileOutputStreamのコンストラクタに 指定するしかないでしょうか。
>899 JFileChooser を使って FileOutputStream を得る、 新しいクラスを作ったらどうでしょう 使いづらい道具は直せるのがプログラミングですよ 治具みたいなものです。
>>900 何か、思いっきり勘違いしていました。
FileOutputStreamのコンストラクタに
取得したFileオブジェクトを指定すればよいだけの話でした。
お騒がせしました。
JAIってどこでダウンロードできますか?
Java Web Startでのアプリケーションのインストール情報を管理するアプリケーションが標準でついてたと思うのですがどなたかご存じないでしょうか?
ネットビーンズとエクリプスは使い方がぜんぜん違いますか?
>>903 コントロールパネルでJavaを開いてインターネット一時ファイルの表示ボタンを押すと出るやつ?
>>905 意味合いは違ったようですがビンゴです
ありがとうございました!!
zipの中身表示するJFileChooser作ったときは意外と苦労したのにSwing Hacksに同じ事やられたorz
908 :
デフォルトの名無しさん :2008/08/07(木) 19:27:06
data.txtというファイルに読み書きするプログラムを作成しました。 このプログラムをダブルクリックだけで実行できるjarファイルにしたいのですが、 data.txtはjarファイルと別に用意しなければ実行できないのでしょうか? jarファイルの中にdata.txtも含めて実行してみたのですが、 data.txtが見つからないと出ました。 data.txtをjarファイルのあるフォルダに置いておけば実行できました。
パスの指定の問題だろ。getResource[AsStreem]()ってメソッドを使うんだ。
910 :
デフォルトの名無しさん :2008/08/08(金) 02:21:52
actionPerformed内での挙動に関する質問です。 Maskクラスに値を詰め、それを利用したいのですが、 private Mask mask; public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if(cmd.equals("Read")){ if(mask == null){ mask = new Mask(); } mask = label.getValue(); }else if(cmd.equals("Write")){ System.out.println(this.mask.getValue()); } としたときに、下の標準出力から「NullPointerException」 が返ってきます。maskのnewはできていると思うのですが… 万策尽きました。どなたかご教授くださいm(_ _)m
if(mask == null){ mask = new Mask();ここでnewしたのに } mask = label.getValue(); ここで代入してるのは何故?
String cmd = e.getActionCommand(); この間にMask mask;とかって行は無い? if(cmd.equals("Read")){ if(mask == null){ mask = new Mask(); } mask = label.getValue(); }else if(cmd.equals("Write")){ System.out.println(this.mask.getValue()); } "Read"の前に"Write"が実行されるとmaskはnullになるよ? そもそも例外が出ているのはどこ?maskが問題なの?
デスクトップにJavaが全然普及しないのはSwingがヘッポコだからですか?
ネイティブな実行形式吐けないからだろ。
C#もVBもネイティブじゃ無いじゃん
MicrosoftNativeです
917 :
デフォルトの名無しさん :2008/08/08(金) 04:18:13
>>911 ,912
ちょっと簡易的に書きすぎました
MaskはTimerTaskを継承していて、裏で常に動いています。
で、これをStopさせたいのですが、このmaskオブジェクトにアクセスできない状態です。
調べたところ、maskは存在していますが、
Write側でmaskのアドレスを認識できないようです。
グローバル部分でnewするとそれはそれで問題がありなので、
この状況からWrite側のmaskオブジェクトを操作させる方法が欲しいところです。
ひどい情報の小出し。 肝心な部分を隠してどこが問題なのじゃないだろ。 maskの実装とTimerの起動箇所を隠さず出せ。
919 :
デフォルトの名無しさん :2008/08/08(金) 07:34:34
>>918 すまん。別のコードともごっちゃになってて自分でも意味不明。
最初から言い直します。
class tTask extends TimerTask{
public void run(){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("ss's':mm'm':hh'h'");
MainPanel.pD.timeLabel.setText(sdf.format(date));
}
}
class actionUpdate implements ActionListener{
Timer ttimer;
tTask ttask;
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if(cmd.equals("Start")){
if(ttask == null){
ttask = new tTask();
}
MainPanel.pB.startButton.setEnabled(false);
MainPanel.pB.stopButton.setEnabled(true);
ttimer.schedule(ttask,0,1000);
}else if(cmd.equals("Stop")){
System.out.println("Time task off");
this.ttask.cancel();
this.ttask = null;
MainPanel.pB.startButton.setEnabled(true);
MainPanel.pB.stopButton.setEnabled(false);
}
920 :
デフォルトの名無しさん :2008/08/08(金) 07:36:50
staticに作ったMainPanel上のボタンを押すとStart、Stopされる仕組み。 このとき、this.ttask.cancel()に対してNullPointerException発生。 しかしttaskのrunは動きっぱなし。 さてこれをどうやって止めればよいのか?という質問でした。
awtならかまわないけど、Swingとjava.util.Timerを使っています? それならタイマーイベントはスレッドになるからTimerTaskのsetTextはまずい気がする。 Swingならなるべくswing.Timerを使った方が無難。
>>920 なんかいろいろ違いそうだが・・・。
「ボタンを押したら始まって、ボタンを押したら止まる。」
という仕掛けに、タイマが存在する理由は全くない。
タイマタスクは、実行内容をスケジュールと合わせて保持するだけで、
「実行中」「停止中」を切り替えるステートオブジェクトではない。
TimerTask#cancel()=次の実行時刻が来ても実行されないように、
キャンセルフラグを立てておくだけ。
今の実行状態を切り替えるためのものではない。
ヌルポはなにがnullなんか調べれば解決できるだろ。
MainPanelが謎のスタティックメンバーを持ってたり、 ActionListenerがメンバ持ってたりでかなりあれだな。 actionUpdateをどこかで作り直してるとかしてないだろうか。 それならヌルポになる。
924 :
デフォルトの名無しさん :2008/08/08(金) 08:38:44
AwtかSwingかアプレットで いくつか画像があって、マウスが特定の画像の上に乗っている状態の時にその画像を変える(その画像から出たら元に戻す。)にはどうしたらいいですか? (変化前と変化後の画像のサイズは同じ)
アプレットでは不可能な技術
ただのマウスオーバーじゃん。mousemotion拾え
>>926 ?
>>927 アプレット領域全部ではなく、特定の画像の上でのみイベントを発生させたいです。
将棋のゲームで、ある駒の上にマウスを持っていくと、その駒が移動可能なマスを薄い黒色でピカピカ点灯させるといった感じです。
画像じゃなくても、ボタンのようなオブジェクトに各駒の画像が表示できるならそれでもよいのですが
mouseMovedは座標を得られるからマウスが画像の上かどうかを判断できるし、 JButtonにImageIconを設定することもできるし、 画像を表示したJLabelにMouseListenerをつけることもできる
mainメソッドとコンストラクタの違いは main - VMが起動した時に呼び出される コンストラクタ - クラスをインスタンス化した時に呼び出される という理解でよろしいでしょうか?
よろしいですよ
934 :
デフォルトの名無しさん :2008/08/08(金) 12:02:00
Javaにおいて、Stringは不変であるからObject.clone()は 実行する必要が無い。 これの実装に関して分からないことがあります。 Javaにおいては 1.protectedメンバは自身の属するパッケージ、 または、所属するクラスのサブクラスからのみ アクセス(利用)できる。 2.全てのクラスはObjectクラスのサブクラス と、認識しています。 ということは、Stringオブジェクトはclone()を実行できると 思ったのですが、protectedメンバなので利用できない旨の コンパイルエラーが出力されます。 なぜでしょうか?
1は 所属するクラスのサブクラス<<の中>>からアクセスできる ってこと Stringクラスの外からはアクセスできない
javaでは継承でアクセス修飾子の範囲(特権)を広げる方向に変更ししてよい。 つまり継承したクラスではclone()をpublicにoverrideできる。 Object.cloneは特別なメソッドでoverrideする場合はCloneableインターフェイスを実装しなければならない。 CloneableはマーキングのみでcloneメソッドはあくまでもObject.cloneである。
937 :
934 :2008/08/08(金) 12:21:46
なるほど・・・ ありがとうございます。
938 :
デフォルトの名無しさん :2008/08/08(金) 12:26:29
"A"のchar型は'A'ですが、"\n"のchar型は何ですか? char c = ;
char c = '\n';
これだとエラーが出てしまうんですけど、どうしたらよいでしょうか JButton[] bt = JButton[100]; //ここでエラー for (int i=1; i<=100; i++) { bt[i] = new JButton(new ImageIcon("ohana.jpg")); }
JButton[] bt = new JButton[100];
String str = "hoge"; このときStringクラスのコンストラクタは一切呼ばれないのでしょうか。以前聞いたことがあって。 リテラル?を保持するなんかのクラスがあるのでしょうか。 あるとした場合、それはmain以降から呼ばれるクラスでアクセスできるのでしょうか?
>>944 呼ばれます。
"hoge"が使用される時に"hoge"に対応するデータがコンスタントプールから取り出され、
その情報を元にString型のインスタンスが生成されます。
その時にStringのコンストラクタも呼ばれます。
>>945 Stringのコンストラクタにでん部ブレークを張りましたが、決して呼ばれなかったです。
new String(chararray);とかすれば呼ばれますけど。"hoge"でどのコンストラクタが呼ばれますか?
ちなみに1.6です。
Stringはランタイムに組み込まれてるからそんなこと考えるのは無意味だよ
気になるなら、javap してみりゃいいよ。 5: ldc #2; //String hoge 7: putfield #3; //Field str:Ljava/lang/String; これだけだね〜
BufferedImageに任意の大きさに拡大縮小した画像を読み込むにはどうすれば良いのでしょうか?
Graphics g = bufferedimage.getGraphics(); g.drawImage(画像, 0, 0, 任意の幅, 任意の高さ, null); g.dispose();
iteratorでまわし途中で、iterator生成もとのリストを削除する方法ってありますか
Iterator#remove
>>950 レスありがとうございます。
えっと拡大縮小した画像を描画するのではなく、
その画像の高さや幅やRGBを取得して他の処理に用いたいので
BufferedImage bi=〜
みたいにBufferedImageのインスタンスに拡大縮小した画像を読み込みたいのです。
欲しいサイズのBufferedImageを作って、その作ったBufferedImage上に描画すればいいだろ BufferedImage bi = new BufferedImage(任意の幅, 任意の高さ, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); g.drawImage(画像, 0, 0, 任意の幅, 任意の高さ, null); g.dispose();
>>954 今までGraphicsってpaintとかpaintcomponentとかで
引数として既知な感じで扱っていたのでよく理解してなかったですが、
これで描画対象をメモリ上のBufferedImageに出来るんですね。
なんかBufferedImageのコンストラクタって引数にImageとかが無いから
今までどう使うものか分からなかったけど、おかげさまでやりたい処理が出来ました。
ありがとうございます!><
956 :
デフォルトの名無しさん :2008/08/09(土) 00:41:50
テキストファイルにコマンドライン引数で入力したデータを書き込みたいのですが 現時点ではテキストファイルにまでは辿りつくけど文字を記入することができない状態です 修正箇所と修正の仕方を教えてください mport java.util.*; import java.io.* public class A23_StrArray extends A22_StrArray { public void writeFile(String path) throws Exception { Arraylist list = new Arraylist File file = new File(path); //Fileのオブジェクトを生成 FileWriter fw = new FileWriter(file); //Filewriterのオブジェクトを生成 //リストの要素が無くなるまでループ for(int i = 0; i < list.size(); i++) { fw.write(get(i)); } System.out.println("ファイルに書き込みました。"); fw.close(); } }
957 :
デフォルトの名無しさん :2008/08/09(土) 00:42:59
//実行クラス mport java.io.*; import java.util.*; pubic class A23_exec { public static void main(String args[]) { A23_StrArray list = new A23_StrArray(); //書き込み処理 if(inputData.equals("12")) System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 list.writeFile(inputData); } private static String input() { //入力用オブジェクト BufferedReader cinBuff = new BufferedReader(new InputStreamReader(System.in)); //コンソールからの文字入力 try { //入力用オブジェクトが文字入力を受付、それをStringクラスに代入 return cinBuff.readLine(); } catch(IOException e) { System.out.println("IOExceptionエラー発生!!"); } } }
958 :
デフォルトの名無しさん :2008/08/09(土) 00:46:05
//書き込み処理 if(inputData.equals("12")) System.out.println("ファイル名は?"); inputData = input();//コマンドラインからの入力 System.out.println("書き込むデータは?"); inputData = input();//コマンドラインからの入力 list.writeFile(inputData); 一部修正。正しくはこうです 家のPCにエクリプスが無くてインデントとかおかしい部分もあると思いますが 勘弁してください
public void writeFile(String path) throws Exception { Arraylist list = new Arraylist File file = new File(path); //Fileのオブジェクトを生成 FileWriter fw = new FileWriter(file); //Filewriterのオブジェクトを生成 //リストの要素が無くなるまでループ for(int i = 0; i < list.size(); i++) { fw.write(get(i)); } めちゃくちゃじゃないか。
そのコードのどこでlistに値を詰めているのか教えて欲しい
961 :
958 :2008/08/09(土) 01:37:34
public void writeFile(String path) throws Exception { Arraylist list = new Arraylist File file = new File(path); //Fileのオブジェクトを生成 FileWriter fw = new FileWriter(file); //Filewriterのオブジェクトを生成 String str; str = //リストの要素が無くなるまでループ for(int i = 0; i < list.size(); i++) { fw.write(get(i)); list.add(str); } strを初期化できれば行くんでしょうか? どうすれば初期化できるかわからない
初期化の方法。 String str = null; もしくは String str = "";;
なんという名前のテキストファイルに、どういう文字列を書き込みたいのか、まずはそれを説明してくれ
//リストの要素が無くなるまでループ 答え: リストに要素はありません><
965 :
958 :2008/08/09(土) 01:48:24
>>962 ありがとうございます。それで試してみます
>>963 あらかじめCドラの直下にテキストファイル(仮にabc.txtする)を置いておいて
最初の引数を入力時にc:\ abc.txtで指定した後に
次の引数でファイルに書き込みたいんです
966 :
958 :2008/08/09(土) 01:51:34
日本語的におかしいので訂正 最初の引数を入力時にc:\ abc.txtと入力して指定した後に 次の引数で書き込む文字列を入力したい
>>966 引数…?Arraylist list=new Arraylist…?
全体を通して頭狂ってるだろ。
968 :
958 :2008/08/09(土) 02:13:42
>>967 >Arraylist list = new Arraylist
この行はいらないのかな?
エクリプスが家にあれば自分でもおかしいってことがわかると思うんですけどメモ帳だと厳しい
出直してきます。
お手数おかけして申し訳ございませんでした
でも初期化の方法がわかっただけでも助かりました
>>956 public static void main(String args[])throws Exception
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("ファイル名入力>>");
String file=br.readLine();
System.out.println(filename);
FileWriter fw=new FileWriter(file);
System.out.println("書き込むデータは?");
fw.write(br.readLine());
br.close();
fw.close();
}
なんか書いてくれたコードが不明だが、やりたいのはこういうことじゃなくて?
970 :
969 :2008/08/09(土) 02:17:19
>System.out.println(filename); 前に書いてたコード消し忘れ。これはナシで。
971 :
958 :2008/08/09(土) 02:26:53
>>969 やりたいこととしてはそんな感じなんですけど
メインクラスの実行文から呼び出してサブクラスにあるBufferedReaderやFileWriterを使いたい
>>971 これだけおかしいのにeclipseが無いと分からないのは初心者未満すぎるので、
人に聞く前に初心者用の本で勉強してください。
まずは引数やサブクラスの意味、それと掲示板で聞く際の常識から。
中堅企業以上の場合 ふつう公開されている初任給データに家賃補助は含まれてませんよね?
974 :
デフォルトの名無しさん :2008/08/09(土) 07:15:01
初任給なんて大手から零細までどこも18〜20万 院卒は+2
975 :
デフォルトの名無しさん :2008/08/09(土) 07:46:49
というかIDE関係ないだろ。
977 :
デフォルトの名無しさん :2008/08/09(土) 15:44:45
SJC-P の試験ですが、試験コード(?)を書くときは、 「310-055J」と「310-055」ではどちらが正式な書き方ですか? (最後に「J」を付けるべきかどうかってことです。)
978 :
977 :2008/08/09(土) 17:02:48
HttpUnitでinnerHTMLはサポートされているのでしょうか? document..getElementById('***').innerHTML = "***"; こんな感じのスクリプトを実行させても、実行できたというtrueは返って来ますが、何が変化したのかさっぱりで・・・ どなたか分かる方よろしくお願いします。
980 :
デフォルトの名無しさん :2008/08/09(土) 19:58:56
コンテンツ産業はGDPの2%、ゲームはその中で更に極僅かな一部分だからな。 産業としてみれば、音楽産業ですら豆腐産業とほぼ同じ市場規模(年間約5000億円)でしかない。
どこの誤爆だ?
innderHTMLはJavaScriptですね、わかります
いやそれは分かってますよ。 JavaScriptはRhinoでサポートされてます。 ですがHttpUnitでの実行のサポートがされているのか気になっているんです。
海外のフォーラムに全く同じ質問がある。ググれカス
あんがと!解決したっちゃ!
986 :
デフォルトの名無しさん :2008/08/10(日) 03:27:40
JavaでWindowsやLinux上で動くアプリケーションソフトを製作する場合、 どのようにして配布をするのでしょうか?
jarで固める
J#
990 :
デフォルトの名無しさん :2008/08/10(日) 15:05:56
Visual Web JSFで データベースのデータをフィルタリングしながら取得するには RowSet←FilterdTableDataprovider←ValueBindFilterCriteria で良いんでしょうか フィルター条件そのものをどこでコントロールすればいいのかも 分からないので ついでに教えてください
javaでwindowsのWaitForSingleObjectのようなメソッドはあるでしょうか。 特定のイベントが発生するまでのスレッドを待機させ、 イベント発生時にスレッドが自動的に動作するようにしたいのです。
もうちょい低レベルの同期手段もあるが、まずは基本のモニターを使いこなそう。 synchronized(Object) Object.wait / notify / notifyAll Thread.interrupt
印刷処理のように、単純にイベントが発生した時点でスレッドを起動させるので済むって話ならば、待機とかやる必要はないぞ。
waitで待機しているスレッドが再び動作するには、 誰か別のスレッドにnotifyを呼び出してもらう必要があると思っています。 notifyを明示的に呼ぶのではなく、 ボタンが押されたら自動的にスレッドが動作するようなことを したいのですが、できるものでしょうか。
JSF(index.jsp)で、テキストボックスに、"foo"と入力して、 フォーム送信したとき、result.jspに飛んで、それ以外が入力された時、 result2.jspに飛んで、未入力でフォーム送信した時、index.jspで、"入力してください。" という処理をするには、どのようなJSPと、faces-config.xmlと、モデルを書けばいいんでしょうか。 おしえてください。
join();
>>994 WaitForSingleObjectもそんな機能はないよ
ボタンが押されたらnotifyすればいいじゃん
>>994 Notifyを明示的に呼ぶのとWaitForSingleObject使うのにそんなに差はないような。
何をやりたいのかよくわからないが、スレッドプールが向いてるのかも。
それならコンカレントAPIにいろいろある。
どんな目的のスレッドをwaitしてんだ?
1000 :
デフォルトの名無しさん :2008/08/10(日) 18:18:14
むしろ次スレをwaitしてるよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。