1 :
デフォルトの名無しさん :
04/01/26 18:18
安産型さっきゅんがよゆうで2げっと  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ 。 。 || || /⌒ ヽ. / ⌒ヽ( /⌒ヾ ) ((゚Д゚,,))ゝヽのノノ ⊂⊂ _____つ )) ))
I.get(3);
星一徹
Swingのコンポーネントにデフォルトで設定されている キーストロークを一部削除したいのですが、どうすればいいでしょうか? 一応ネットで調べてみたところ、 ①javax.swing.plaf.metal.MetalLookAndFeelを編集する ②InputMapを編集してコンポーネントに追加する で可能みたいなんですが、なぜかうまくできません。 わかる方いましたら、教えて下さい。 ちなみにJDK1.3 JBuilder4で開発中です。
>>前スレ976 "3+4*5-7" を計算させるのに、"+"="-"<"*"="/" という優先順位を定義して おいて、左から解析して数字は数字スタックへ、演算子は演算子へ プッシュしていく。 演算子をプッシュする前に次の判定を行う。 ・ 前(左)の演算子が優先度が高ければ、数字スタックからポップして 演算し、結果を数字スタックにプッシュする ・ 式の終わりなら無条件に演算する ・ 演算したら演算子スタックから1つ取り出す これらの処理を再帰的に繰り返せば計算はできる。うまくやればカッコ だってsin()のような関数だって処理できる。優先度を定義するテーブルを いかに上手く作れるかがカギ。がんがれ。
ツリーを作ればいいんでないの?
>>前919
JREはアプリ同梱もできる。ワーキングフォルダにjava.exeを、
ひとつ上のフォルダにJREをコピーして実行してみ。
exeのソースもJDKについてる。
この意味が分からない場合は、とりあえず↓これ使っとけ。
-----------------------------------------------------------------
var WSHShell = WScript.CreateObject( "WScript.Shell" );
try{
var current = WSHShell.RegRead( "HKLM\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\CurrentVersion");
var jre = WSHShell.RegRead( "HKLM\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\" + current + "\\JavaHome") + "\\bin\\javaw";//コマンドウィンドウ出したい場合は最後をjavawからjavaに変える。
var command = "HelloWorld";//ここにjavaの次に打つコマンドを書く。
WSHShell.Run( "\"" + jre + "\" " + command, 1, false);
}catch(error){
var dialog = WSHShell.popup( "Javaないよ、ダウソ?", 600, "info.", 4 + 32);
if( dialog == 6){//YES
WSHShell.Run( "
http://java.com/ja/ ", 1, false);
//WSHShell.Run( "j2re-1_4_2_03-windows-i586-p-iftw.exe", 1, false);//ネットインストーラ。
}
}
-----------------------------------------------------------------
これをコピペして保存。君のアプリがWinMZだとしたらWinMZ.jsにしてダブルクリック。
ただしノートンのスクリプト遮断をオンにしてると停止しちゃうので注意。
ブラウザで見てる人反応したらすまぬ。
9 :
デフォルトの名無しさん :04/01/26 23:02
txtファイルの文字の内容が aaaa bbbb cccc の時、これをファイルの中味のままメールの文章にして送付したい場合、 String yomikomi = "aaa.txt"; BufferedReader br = new BufferedReader(new FileReader(new File(yomikomi))); String s; ArrayList al = new ArrayList(); while ((s = br.readLine()) != null) { al.add(s); } String msgTxt = al.toString(); msg.setText(msgTxt,"iso-2022-jp") ~; このような処理を実行すると メールの内容が [aaaa,bbbb,cccc]のような格納された形の状態のまま送付されます これをテキストファイルの中味と同じ aaaa bbbb cccc みたいにしてメールを出したい場合はどうすればいいのでしょうか?
何でArrayList使ってるわけ?阿呆?莫迦? そりゃArrayList使ってりゃそうなるだろ?莫迦?阿呆?
StringBuffer buffer = new StringBuffer(); while ((s = br.readLine()) != null) { buffer.append( s); } String msgTxt = buffer.toString(); 気持ちは分かるが、こうしてみれ。
SOAPって。。何がすごいのでしょうか、、というか何なのでしょうか。。 プロトコル?と言われても、よくわからない。。 何か参考になるサイトか書籍がありましたら、ご紹介願います。。 もしくは予備知識として必要なことを教えてください。。とっかかりがつかめない。。
13 :
デフォルトの名無しさん :04/01/27 00:52
xercesを使っているのですが、 org.xml.sax.helpers.DefaultHandlerを継承したクラスを作って public void processingInstruction(String target,String data)throws SAXException{ System.out.println(target + ":" + data); } と、記述してパースしても一切このメソッドは実行されません。 他のオーバーライドしたメソッドは呼ばれるのですが、 このメソッドを確実に実行されるにはどうしたらよいのでしょうか?
>>7 作ってみればわかる。ツリーでもできなくは無いが、テーブルの方がラク。
前スレで、 topコマンドやemacsみたいに、コンソール上の一定の場所に出力させ続けたい。 そのために画面をクリアしたいのだが、一体どうすればいいのか? という質問をした人です。 「エスケープシーケンスを使う」、という解決法は盲点でした!! しかし残念ながら当方WinXPのため、 コマンドプロンプトで画面をクリアするエスケープシーケンスが使えず。 しかたがないので、Swingを使って、JLabelをrepaintする方向で行こうと思います。 答えてくださった方どうもありがとうございました。
>>6 =14
>作ってみればわかる。ツリーでもできなくは無いが、テーブルの方がラク。
お前たいしたもん作ったことないだろ。
>>18 そんなもん使う意味がない
s +"\n"で十分
> お前たいしたもん作ったことないだろ。 ドコがお前の琴線に触れたのかわからんのだが、まぁ全銀プロトコルを JNIで作ってるとか説明しても無意味だろうからやめとく。 おいらは前スレ976さんに伝わればソレで充分でつ。おやすみ。
まー、6は痛いね。 いじょ
( ´,_ゝ`)プッ
エラーと警告の区別も付かず importもよくわかってないようなら やめた方がいい
とまでは言わないが、ここに書き込む前にやることはあるはずだな。
28 :
デフォルトの名無しさん :04/01/27 17:00
初心者です。質問させてください。 アプレットにキャンバス乗っけて、ダブルバッファリングをしようと思ってるんですが、 ボーダーレイアウトでその辺に add して、 init() 内で createImage() する際に、 幅と高さに設定している getWidth(), getHeight() の値が0になってしまいます。 それで0以下だと Image 作れないと言われました。仕方なく、キャンバスの paint() 内で createImage() を行ってるんですが、普通はここで作るものなんですか? 何回も repaint() させたいので1回で済ませたいんですが…何とかなりませんか? お願いします。
>>8 これすげー。初めて知った。Java開発者には当たり前のこと?
「Javaないよ、ダウソ?」にちょいと笑ったけど、配布には強烈に便利そうだ。
パクらせていただきます。
30 :
デフォルトの名無しさん :04/01/27 17:18
>>28 init でなくて start ではどうだい? よくわからんが
あるいは、paint 内で作るなら、一度作ったらそれ以上作らないように状況判断すればいい
>>28 > 幅と高さに設定している getWidth(), getHeight() の値が0になってしまいます。
-1 じゃなくて?
質問 int A = 1 char ans = 0; String str = "4"; ans = (str.charAt(0) ); } ans = A + ans; のように ans に数字を代入したあとに計算したいのですが、型が違うため計算できなくて困っています。 どうにかして ans の型を int型か string型に変換したいのですが可能でしょうか?
>>32 変換にもいろいろある。
(int)ans でも "" + ans でも変換だが君の思ったとおりには多分ならん。
1 と 4 を足したいなら
A + new Integer("" + ans).intValue();
だ。
>>33 ご指導ありがとうございます
これから試してみます
35 :
デフォルトの名無しさん :04/01/27 21:50
1~100までの数字があり、そのうちの一つである。 その不明の数字を当てるプログラムを組みたい プログラム中で次の三回の質問を行い、答えを入力する。 「その数は三で割るといくつあまりますか」 「その数は五で割るといくつあまりますか」 「その数は七で割るといくつあまりますか」 これから不明の数字を求め 「その答えは です」 「あってますか?あっているならば1を入力」 と表示して、1の入力があれば終了。 ほかの入力があれば、もう一度実行 と、言うプログラムを誰か教えて下さい!
JavaでXML扱いたいんですが、crimson.jarってファイルはどこから入手できますか?
すいません、ずっと探してたら見つかりました。
import java.io.*; public class Q35 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("その数は三で割るといくつあまりますか"); int x = new Integer(in.readLine()).intValue(); System.out.println("その数は五で割るといくつあまりますか"); int y = new Integer(in.readLine()).intValue(); System.out.println("その数は七で割るといくつあまりますか"); int z = new Integer(in.readLine()).intValue(); int answer = 0; for (int i=1; i<=100; i++) { if ((i%3 == x) && (i%5 == y) && (i%7 == z)) { answer = i; break; } } System.out.println("その答えは " + answer + " です"); System.out.println("あってますか?あっているならば1を入力"); String line = in.readLine(); if (line.equals("1")) break; } } }
WindowsではXMLDocumentとDocumentのクラスキャストができるのですが、 Linuxのサーバ上でClassCastExceptionが出てしまうのは何故なんでしょうか?
41 :
デフォルトの名無しさん :04/01/27 23:42
>>8 ありがとうございます。
初心者なのでイマイチよくわかっていないのですが、書いていただいているのは
javaスクリプトでしょうか?
javaスクリプトでJREをダウンロードしてからクラスファイルを実行?
何れにしろ、JREなしで実行するのは無理ということでしょうか?
市販の開発環境ソフトを使用しても無理なのでしょうか?
VJ++で普通に使えるexeが出来たような記憶がかすかに・・・
exeを作る(orダブルクリックで実行できるようにする)ことと JREなしで実行することを分けて考えること。 で、繰り返すけど、JREはアプリ内に同梱してインストーラに 入れることも可能(ユーザの別インストールなし、ユーザには "普通の"アプリに見える)。 VJ++で作れたexeは実際にはJavaのクラスとMS-JVMを起動するだけのファイル。 つまりVMなしで実行していたわけではない。 JREの同梱さえいや、ということであればそれはちょっと難しい。 ↓つづく
44 :
デフォルトの名無しさん :04/01/28 00:28
ネイティブコンパイルとかAOTコンパイルとか言われる技術もある。 これだとひとつのexeを作れることもあるけどおすすめしない。 Javaの理想とか以前に、JITコンパイルに対して速度的に アドバンテージが全くないかむしろ劣りかねない上に クラスが増えたりコンパイルの最適化度合いを上げると JREを含めたよりも大きなファイルをはきかねないので逆に効率が悪い。 (速度がJIT>AOTになるのはJITが実行時情報をたくさん使えるから、 クラスの動的ロードを多用したときとか あと今だとServerVMはSIMDの動的生成とかするから。) 小さいアプリならスクリプトかexeの中で起動時にJREがないと警告する、 でかいアプリならVM同梱、がおすすめ。 まじれす、しかもなが。
>>44 おいらもJREの扱いで悩んでる。今時のJavaアプリならJ2REのインスコを
導入手順に入れちゃってもいいんじゃないかなぁ。。。特にデカい場合。
んでもアナタの言うJREの同梱にはとっても興味はあるから試してみる。
47 :
デフォルトの名無しさん :04/01/28 13:52
iText を使用し、PDF出力を行いたいのですが、 Solarisでも動作するのですか? 色々調べたのですがわかりませんでした。
48 :
デフォルトの名無しさん :04/01/28 15:50
昨日からJAVA本読み始めた素人ですが質問させて下さい。
Web上の画像を表示させるアプレットを作成しているのですが
画像を表示させる事が出来ません。下記のようなコードを
書いたのですがどこが間違っているんでしょうか?
public void start(){
try{
URL url = new URL("
http://server ");
image = getImage(url,"IMG.JPG");
}
catch(Exception e){
e.printStackTrace();
}
}
public void paint(Graphics g){
g.drawImage(image,0,0,this);
}
>>50 「どうすれば」と聞かれても、細かく言いだすと何千億通りかの方法があり
それを羅列したところで君に役立つものを探せと言っても酷だろうから
既に作ったうまくいかないソースをここに貼ってくれ
量が多いときはうpろだ使ってくれ
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
/**** ここにURL内のプログラムをコピペ ****/
public class ImgTest extends Applet {
Image img;
public void init(){
img = getImage (getDocumentBase(),"Image.jpg");
}
public void paint(Graphics g){
g.drawImage(img,0,0,this);
}
MainFrame window =new MainFrame();
}
>>51 こんな感じです
それで? アプレット内(ブラウザウィンドウ内)に画像とボタンを表示したいのか、 「ボタンの入った別ウィンドウ」に画像を表示したいのかどっちだ
アプレット内に画像とボタンを表示したいのです。 ----------------- IE _□× ----------------- □□□ ←ボタン ∧_∧ ( ´∀`) ( ) | || (__)_) ----------------- こんな感じで
Applet は、プログラマがブラウザ上に何かを表示させる場合の、大本である。 その大本を区画分けして、ボタンなどのコンポーネントを配置する。 画像の表示もコンポーネントに行わせる。また、Appletが直接表示するのではなく、 画像を表示するコンポーネントを自作して、割り当てられた区域のみに表示するようにする。 public class ImgTest extends Applet { public void init(){ MyCanvas canvas = new MyCanvas(getImage(getDocumentBase(),"Image.jpg")); ButtonPanel bp = new ButtonPanel(); bp.setSize(200, 150); setLayout(new BorderLayout()); add(canvas, BorderLayout.CENTER); add(bp, BorderLayout.NORTH); } } class MyCanvas extends Canvas { Image img; public MyCanvas(Image img) { this.img = img; } public void paint(Graphics g){ g.drawImage(img,0,0,this); } } //続く
class ButtonPanel extends Panel {
//MainFrame と、中身はほとんど同じ。
//違うのは、
//1) コンストラクタ名を ButtonPanel に
//2) addWindowListener 以降は不要
}
>>50 のリンク先のソースは、はっきりいって汚い。あまり参考にならない。
また、Button と同じように setBounds で MyCanvas を配置してもいいが、
あんまり実用的ではない。大抵、上記のようにやるか、ScrollPane 内に MyCanvas をおさめるかのどちらか。
どんなソフトでも、普通、コンポーネントは整然と配置されているのだから、
Java でも FlowLayout や BorderLayout を使うほうがよい。
setLayout(null) は最後の手段とでも考えておいた方がいい。
57 :
デフォルトの名無しさん :04/01/28 23:15
今度仕事でIBMのWACSなるフレームワークを使うらしいんです。 マスターしとけといわれてぼーっとなってますが。 使ったことのある方おられますか? どんな感じですか。Strutsをほんのちょっとかじった事ありますが それと似たようなもの?だいぶ違ったりするんでしょうか。 参考になるような資料等ありますでしょうか。 どのような点に注意が必要でしょうか。 ぶしつけではありますがご教授お願いいたします。
58 :
デフォルトの名無しさん :04/01/28 23:35
次のアプレットが友達のパソコンから見れません。原因をどなたかお教えくださいませんか? import java.applet.*; import java.awt.*; import java.awt.event.*; public class TestApplet extends Applet { public void init() { MouseInputmi = new MouseInput(this); addMouseListener(mi); } public void paint(Graphics g) { int w = getWidth(), h = getHeight(); g.setColor(new Color(0, 0, 0)); g.fillRect(0, 0, w, h); g.setColor(new Color(255, 255, 255)); g.drawString("Press Mouse Button", 100, 100); } }
59 :
デフォルトの名無しさん :04/01/28 23:36
class MouseInput implements MouseListener { TestApplet applet; public MouseInput(TestApplet app) { applet = app; } public void mousePressed(MouseEvent me) { Graphics g; int w, h; g = applet.getGraphics(); w = applet.getWidth(); h = applet.getHeight(); g.setColor(new Color(255, 0, 0)); g.fillRect(0, 0, w, h); g.setColor(new Color(255, 255, 255)); g.drawString("MousePressed", 100, 100); } }
君のでも見れるのか? MouseListener の実装が不足してるが省略しただけ?
61 :
デフォルトの名無しさん :04/01/29 01:09
Javaであるディレクトリにある一つの特定のファイルが起動するたびに 一個ずつカウントアップさせたい時はどうしたらいいのでしょうか?
java.awt.Frame, java.awt.Dialogを派生させた public class MyFrame extends Frame public class MyDialog extends Dialog という2つのクラスを作成したのですが、殆ど同じ様な処理をしているので リファクタリングして重複コードをまとめてしまいたいと思っています。 処理を実装したクラスMyWindowを作成して それを両クラスで継承すれば良いかなと思ったのですが、 Javaでは多重継承できないのでこの方法は使えません。 どのようなアプローチがいいのでしょうか?
委譲しなさい、委譲
継承よりObject Composition
>>49 レスが遅くなってスミマセン。
アプレットを実行させているのは
http://serverではなくて LAN上の他のパソコンです。最終的にはWebサーバー上
にアプレットを置く予定ですが現在はアプレットビューア
で動作させています。serverは画像蓄積専用のボード
パソコンなのでアプレットを配置する事は出来ません。
よってgetDocumentBase() は使用出来ないのです。
要はWeb上の画像を取得して表示させるアプレットを
作りたいのです。ネットで調べたかぎりでは48のコード
でOKなハズなんですが・・・・
>>66 アプレットはデフォルトではセキュリティに考慮して
アプレットが配置されたサーバ以外と通信することは出来ません。
>>67 レスどうもです。
デフォルトではということは何かオプションを設定すれば
アプレットが配置されたサーバー以外と通信させる事が
出来るようになるのでしょうか?
>>63-64 どもです。
たとえば、Labelを作ってaddするようなコードを共有したいときは
どのような感じになるのでしょうか?
コンストラクタにWindowを引数とするクラスMyWindowDelegateを作ってそのクラス中でLabel作成とaddを実装し
MyFrameとMyDialogからはthisをWindowでキャストしてMyWindowDelegateを作る
という感じなのでいけるしょうか?
>60 はい、実装はしっかり行っていて、自分のパソコンや学校のパソコンや、 JavaSDK1.4をインストールしてあるパソコンでは見ることができます。 なのに買ったばかりのパソコンとかで見ることができません。 パソコン素人の人にも何の不自由なく見せてあげたいのですが、どうすればいいのでしょう?
Java PlugInのタグを使って起動する。
73 :
デフォルトの名無しさん :04/01/29 13:21
質問です。 Javaを始めて間もないのですが、いきなりつまづいてしまいました。 Cで言うscanfはJavaではどうやって書けばいいのでしょうか? よろしくお願いします。
75 :
Javaカレー :04/01/29 13:59
すみませんが、サーブレットについて教えてください。 www.***.com/servlet/[Servlet名] で利用しているサーブレットを、 www.***.com/abc(任意)/[Servlet名]で利用したいのですが、 サーブレットをweb.xmlに登録せずに、invokerでサーブレットを起動する 方法ってありますか? ちなみに、コンテキストも独自のディレクトリに設定しています。
scanfなどない。System.inでどーぞ。
77 :
Javaカレー(75) :04/01/29 14:09
環境を書き忘れてました。すんません。 Windows2000 Pro Apache 1.3.29 Tomcat 4.1.29 J2SE 1.4.2 J2EE 1.4 コンテキストパス:C:/WebApp サーブレットパス:C:/WebApp/WEB-INF/classes/Test.class URIパターン:/app/* よろしくお願いします。
78 :
デフォルトの名無しさん :04/01/29 14:10
>>74 scanfと全く同じものを探すのはあきらめて、
Javadocの
java.util.StringTokenizer
java.io.StreamTokenizer
java.io.DataInputStream
java.text.DecimalFormat
辺りを読んで目的に適った機能を探すのが得策
79 :
デフォルトの名無しさん :04/01/29 14:16
>>75 Tomcatだったらconf/web.xmlに次のように書いておくしかないと思う。
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/abc/*</url-pattern>
</servlet-mapping>
こういうのは多分サーブレットコンテナ依存なので
JettyとかWeblogicだと別のやり方になるんだろうなぁ
80 :
デフォルトの名無しさん :04/01/29 14:21
WEB-INF/web.xmlと思われ。 web.xmlはJ2EE共通と思われ。
81 :
Javaカレー :04/01/29 14:28
>>79 レスありがとうございます。
web.xmlの<servlet-name>は、このファイル内でサーブレットとサーブレット
マッピングを一意に紐付けするためにあると思うのですが、単純に<servlet-name>に
"Invoker"を記述するだけで、Invokerサーブレットを利用できるのでしょうか?
82 :
Javaカレー :04/01/29 14:30
遅ればせながら、
>>80 さんもレスありがとうございます。
83 :
Javaカレー :04/01/29 15:04
>>79 すみません、こちらが勘違いしてました。コンテキストパスのweb.xmlではなくて、
%CATALINA_HOME%/conf/web.xmlですね。たしかに<servlet-name>でinvokerが
あります。<url-pattern>を変えて試してみます。
最近 Flash や .Net の「リッチクライアント」が話題ですが、 Java アプレットの名前が出てきません。 パフォーマンスや機能的に劣っているのでしょうか?
Java PRESSの増刊(?)でJavaAPIを解説したものが売ってたんですが買うと吉でしょうか。 何せモニターで文章を読むというのがあまり好きでなくて。それに その本に幾らか使用例のソースがあったし。
86 :
デフォルトの名無しさん :04/01/29 16:03
Javaで JavaAppletとServletを繋げて ブラウザに表を表示して、表に入力されたデータを使って サーバで計算を行い,結果をブラウザの表に返信する。 また、表はコピーペースト可能にする というプログラムを一年かけてやっと作れたのですが。。。。 これを、もし、、、、ソフト屋さんに作成してもらおうとすると、どれ位の時間がかかるんですかね 自分が一年間でやってきたことが、、、一体どれ位で、作成されるものなのか知りたくこんな質問させてもらいます また、同じものを、他の言語を使って作成するとき考えられる言語環境は何があるのでしょうか? 詳しい方、意見をよろしくお願いします。
88 :
デフォルトの名無しさん :04/01/29 16:11
>>86 RPC(CORBA,RMI,SOAPなど)系の技術に長けているソフト屋さんであれば
数週間でそこそこの物を作ってくれるでしょう。
Java以外だったらFlashで作ったのを見たことがあるよ。
自己レス。 Securityの設定ファイルをいじって無事に画像を取得する事が 出来るようになりました。
90 :
デフォルトの名無しさん :04/01/29 16:21
Tomcat 4.1.29を使用してるんですが、JSPの出力エンコーディングをWindows-31Jで行いつつも、HTTPヘッダーではcharset="Shift_JIS"と出力することってできないですか?
てか問題にしてることが違うかな… 私のことは忘れてください。ハイすいません。竹島逝ってきます
>>86 規模による。
Query が単純でデバグも雑でいいなら、
2~3時間でも同じものができるかもしれない。
でもこれはプログラミングそのものの時間であって、
金貰ってやるくらいだから、デバグには相当時間をかけるし、
実行環境の検討も必要だから、
>>88 くらいの話になる。
>>61 それって、Webのアクセスカウンタみたいに、
特定のJavaプログラムが起動される度に、
ファイルの数値をカウントアップするってこと?
>>91 漏れも4.1.29って出たところで脊髄反射でそのURL書こうかした。
97 :
デフォルトの名無しさん :04/01/29 19:46
>>90 、
>>94 違うんですよー。
Windows-31Jの一部の文字を、Shift_JISで変換すると?になってしまうのを回避するために、
実質Windows-31で出力しておきながら、HTTPヘッダーではcharset=Shift_JISと騙りたいのです。
と言うのも、古いブラウザだと、charset=Windows-31Jとするとうまく動いてくれず、
また、携帯などでも、Windows-31Jを認識するかどうか不明、と言うのがあるので。
なにかうまい解決方法はないですか?
100 :
デフォルトの名無しさん :04/01/29 22:11
101 :
デフォルトの名無しさん :04/01/29 22:30
>>78 scanfは難しいけど、sscanfならjava.text.MessageFormatをそのまんま使うだけ
でできるです。書式指定が独特だけどできることは一緒。sprintfも同じクラスで
できます。APIドキュよみませう。
>>97 Servletの実装がI18Nでバグだらけであった頃の回避方法を復活させるとか。
即ち、毎回リクエストを自力でデコード。
104 :
デフォルトの名無しさん :04/01/30 01:26
javaで作ったアプリケーションをexeファイル化するにはどうすればいいのでしょうか?
>>101 早速のアドバイスありがとうございます
LIGHTWEIGHTですか・・・なるほど
サンプルコードを動かして実装してみます
ありがとうございましたm(_ _)m
>>97 filter使うとか。
doFilterした後に、response経由でヘッダを書き換えれるんじゃないかな。
>>104 するな。
毎回毎回この手の質問が出るんだが何とかならんかね。
>>104 Excelsior JETとかGCJとかJavaネイティブコンパイラでぐぐれ。
WindowsのDLLのように クラスを遅延ローディングする方法ってあるのでしょうか? クラスパスが通っている所に有るなら ClassLoaderでなんとかなりそうなのですが、 クラスパスの通ってない所からだと どうすれば良いのでしょうか? eclipseとか見てるとプラグインを 遅延ローディングしているように見えたので 質問してみました。
>>109 クラスローダ作ってパッケージ、クラスと class ファイルを関連付けて、
Class インスタンスからコンストラクタを呼んでインスタンス生成、
所定のインタフェースでキャストなどなど。
何もしなくても遅延ローディングしていると思ってたが。 Javaプログラムの実行後に、まだロードされていないクラスを変更してから そのクラスをロードさせる操作を行うとちゃんと変更結果が反映されている。 逆だと無理だが。
112 :
デフォルトの名無しさん :04/01/30 08:03
113 :
デフォルトの名無しさん :04/01/30 08:14
test
114 :
デフォルトの名無しさん :04/01/30 08:46
あるHashMapの中身がkey = objectという関係で, a = 1 b = 2 c = 1 d = 2 e = 3 だったとします。 オブジェクトである1を元に,Mapを検索し, a及びcというキーを返す処理はどのように行えばいいでしょうか。
115 :
デフォルトの名無しさん :04/01/30 09:02
>>114 数字がintならjava.lang.Integerでラップする
文字がjava.lang.Stringならそのままでいいけど、
charならjava.lang.Characterでラップする。
ついでにキーが重複しているようなので、
もし1つの数字を複数の文字に対応させたいならHashMapの要素に
配列かリストを格納するようにしないといかんな。
116 :
デフォルトの名無しさん :04/01/30 09:27
emacsでやってるんですが、画面を振動させる方法ってないでしょうか?
117 :
デフォルトの名無しさん :04/01/30 09:45
>>116 ディスプレイに電気按摩を押し当てるとかいう答えが返ってくる前に
もっと詳しくやりたいことを説明した方がいいぞ
>>109 前スレでも話が出たけどEclipseではURLClassLoaderを継承したクラスローダを
使ってプラグインのロードを行ってる。
>>99 レス番違いませんか?99は私ではありません(w
java.policyファイルを書き換えてアプレットビューア
で外部Webサーバーから画像を取得する事には
成功したのですがHTMLにアプレットを埋め込んで
表示させようとするとエラーが出ます。エラーは
java.security.AccessControlException: access denied (java.net.SocketPermission server resolve)
というものなので95さんの言う署名が必要だと思うのですが
署名を付けるとはどういう事でしょうか?
>>106 さん、その他の皆様ありがとうございました。
filterでServletResponseをラッピングして、最初にWindows-31JをContent-typeとして登録し、
chainを通して、最後に元のContent-type(今回はShift_JIS)を再度setContentTypeすることで
うまくいきました。
ただ、これだけだと、今度は\~∥-¢£¬が文字化けするので対応が必要ですが。
Javaで.wavファイルを再生しようとしているのですが音が鳴りません ソースはこんな感じなんですが、問題ありそうでしょうか? private void playSound(String path) { System.out.println("file:" + path); try { int len; byte[] buff = new byte[16 * 1024]; Line.Info lineInfo = new Line.Info(SourceDataLine.class); SourceDataLine line = (SourceDataLine)AudioSystem.getLine(lineInfo); AudioInputStream ais = AudioSystem.getAudioInputStream(new File(path)); line.open(ais.getFormat()); line.start(); while((len = ais.read(buff)) > 0) { line.write(buff, 0, len); } line.close(); ais.close(); } catch(Exception e) { e.printStackTrace(); } } --win2k sp4 C:\>java -version java version "1.4.2_03" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02) Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
タブが全部抜かれてる・・・・ ちなみに再生しようとしているファイルは C:\WINNT\Media\ringin.wav です
126 :
デフォルトの名無しさん :04/01/30 11:54
>>121 ウィンドウとかダイヤログの
setLocationメソッド
127 :
デフォルトの名無しさん :04/01/30 15:42
自分のMACアドレスを調べる方法おすえて。 ライブラリとかある?
>>124 import java.io.File;
import javax.sound.sampled.*;
public class ClickSound {
private static final int EXTERNAL_BUFFER_SIZE = 128000;
public static void oneClick() {
try {
File soundFile = new File("sound/click.wav");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
AudioFormat audioFormat = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
line.open(audioFormat);
line.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0) {
int nBytesWritten = line.write(abData, 0, nBytesRead);
}
}
line.drain();
line.close();
} catch (Exception e) {
}
}
}
これでどう?ファイル名は書き直してね。
129 :
デフォルトの名無しさん :04/01/30 18:14
javaを始めたのですが、何をどうしたらいいのか さっぱり分かりません。どなたか、教えて下さい。 とりあえず、アプレットってのを体験したいので、 計算した値をアプレットに出すプログラムを教えて下さい。
>>129 とりあえずHellowWorldから始めることをお勧めする
>>129 その内容ならそのままズバリの例題が載っている
本があると思うから、そんな本を買う。
132 :
デフォルトの名無しさん :04/01/30 19:47
Javaアプリで File dir = new File( "." ); String path = dir.getAbsolutePath(); としてカレントディレクトリを取得したとき、取得したパスに 環境変数$HOMEが含まれていた場合 /home/username/ というところを ~/ にしたいのですが何かヒントください。
レス下さった方々ありがとうございます。
>>111 あう、そうだったのですか、
「クラスパスの通っていないローカルファイルシステムから
動的にクラスをロードする方法は?」
の方が質問としては良かったかも知れません。
>>118 前スレにも同様の質問があったのですね。スミマセン
コレを探していましたアリガトウゴザイマス
System.getProperty("user.home")でなんとかできそうです。 よく調べもせず、すいませんでした。
>>128 なりますた。
何処が違うかじっくり眺めてみます~
すみません、初歩的なミスかも知れませんが・・・。 <SCRIPT LANGUAGE="JavaScript"> <!-- today=new Date(); Mo=today.getMonth()+1+","; Mo2=new Array( Mo2[0]="Jan";Mo2[1]="Feb";Mo2[2]="Mar";Mo2[3]="Apr";Mo2[4]="May";Mo2[5]="June"; Mo2[6]="July";Mo2[7]="Aug";Mo2[8]="Sep";Mo2[9]="Oct";Mo2[10]="Nov";Mo2[11]="Dec"); Da=today.getDate()+" "; switch(Da) case 1: Da="1st";break; case 2: Da="2nd";break; case 3: Da="3rd";break; default: Da="Da+th"; Day=today.getDay(); Day2=new Array(7); Day2[0]="SUN";Day2[1]="MON";Day2[2]="TUE";Day2[3]="WED"; Day2[4]="THR";Day2[5]="FRI";Day2[6]="SAT"; document.write("<FONT style='font-size : 16px; color : #666666'>"); document.write(Da+Mo2[Mo]+Day2[Day]+"</font>"); //--> </SCRIPT> どこが間違ってるかわからないんです。・゚・(ノД`)・゚・。 日付をこーゆー書き方してるサンプルって無いんですね。 どこがいけないのか教えて頂けませんか?
137 :
58&70 :04/01/30 21:59
>71,72,73のみなさん 遅くなりましたが、レスありがとうございました。 早速調べてみようと思います。
138 :
デフォルトの名無しさん :04/01/30 22:02
サーブレットを始めたばかりなのですが、 コンパイルが通りません。 ご教授お願いします。
141 :
デフォルトの名無しさん :04/01/30 22:15
142 :
デフォルトの名無しさん :04/01/30 22:23
j2sdk1.4.1_03をwin2000にインストールして サーブレットをJavacでコンパイルしたのですが、 「c:\jcode\test.java:2: パッケージ javax.servlet は存在しません。」 のエラーが出ます。 環境変数かな?とも思うのですが、システム環境変数とユーザ環境変数 の指定の間違えでしょうか?
144 :
デフォルトの名無しさん :04/01/30 22:57
JFrameにPanel1をaddしてボタンをクリックすると それを一旦破棄してから、別のPanelを同じ位置にaddすると言う風に したいのですが、意図的にインスタンスを破棄するような事ってできますか? よろしくお願いします。
145 :
デフォルトの名無しさん :04/01/30 23:05
>>144 フレームに追加したパネルを外したいならremoveメソッドを使えばよろし。
インスタンスを破棄する必要はないよ。
146 :
デフォルトの名無しさん :04/01/30 23:08
>>145 そうなんすか。
有難うございます。調べてみますー。
147 :
デフォルトの名無しさん :04/01/30 23:16
>>143 タコか?
お前は1つ前の日本語も読めない脳テンキか?
サルッ!
148 :
デフォルトの名無しさん :04/01/30 23:19
もちついてTomcatかサンワンか何かを落としてCLASSPATH。
>>147 が何を怒ってるのか分からないのは漏れだけ?
150 :
デフォルトの名無しさん :04/01/30 23:59
>>142 とりあえず環境変数に何を設定したか書いてくれ。
あと、javac コマンドに指定した引数も省略せず書いてみそ。
Javaの効率的な勉強方法を教えてください 本はいっぱい読んだのですが身についていないです
>>152 効率的とは言えないが、漏れはJavaやる前にPHPを覚えて、プログラミングの
勘どころを掴めますた。オブジェクト指向を簡単に体験したければ、PHPは
おすすめです。
ただ、Java特有の仕様(例えば文字列はStringオブジェクトで扱うとか)は、
Java用に勉強し直しました。
>>152 コードを書け。本を読むだけでは何も身に付かない。
>>142 CLASSPATHにカレントディレクトリを通してますか?
CLASSPATHの環境変数に".;"がないと、そういうエラーが出ます。
>>115 何をとんちんかんなことを言っているのかね君は。
>>156 たぶんauto boxingのことじゃないかな
158 :
デフォルトの名無しさん :04/01/31 01:46
>>143 SARU君
ちゅーか君キミ(サルッ)一番プログラム理解していないネ(へへっ)
君は「ろむ」に徹しなさい。これは命令ですヨ。
10日でおぼえるじゃばでも4だらイイヨ。
基本からやり直しな
>>114 逆方向のMapもないとそれはできないと思われ。
最近は頭悪いふりして煽るのが流行りなのか?
tomcatを家のPCにインストールしようと思ってるのですが、 最新のtomcat5を入れるのがやっぱりいいんですか? 4などとインストール方法は一緒ですか?? サイトを見ても英語なので、どれをダウンロードをしたらいいのかすら よく分からなかった。。
>>57 フレームワークスレで話題に上っていた記憶あり
163 :
デフォルトの名無しさん :04/01/31 02:41
ははっ! やっと悟ったでしょ。 偉ぶって書き込むと、君の頭悪さが... ちゅーか、オメーはSARUだって... こういう場所では君みたいな無能(ゾウリムシ)は問題害だって。 質問に答えるならマジメに答えようネ! この場では皆そう思ってるのだから。 キミは外したヨ。タコはタコに徹してネ。タコ君。
>>157 何をとんちんかんなことを言っているのかね君も。
そろそろ答えてやるか。 ArrayList keys = new ArrayList(); Integer value = new Integer(1); Iterator i = map.entrySet().iterator(); while(i.hasNext()){ Map.Entry entry = (Map.Entry)i.next(); if(entry.getValue().equals(value)){ keys.add(entry.getKey()); } } これが嫌なら逆方向のMapも用意するこった。 value -> ArrayList<key>なやつね。
全角でSARUとかタコとか書いてる
>>163 は、
>>143 の何がそんなに気に食わなかったの?
>>163 のこれまでのレスにゾウリムシ以上の有能さは感じないんだけど。
ゾウリムシなんだからそんなもんだろ
168 :
デフォルトの名無しさん :04/01/31 11:09
c:\common\lib\servlet.jar.; とクラスパスをとおしていますが、Tomcatのコンパイルが通りません。
170 :
デフォルトの名無しさん :04/01/31 12:52
a b c d e..z といったようにaからzまでを繰り返し文で出力したい場合 どのようにすればいいんでしょうか? 宜しく御願いします
ASCIIコード前提なら char i; for(i='a';i<='z';i++) putchar(i); そうでなかったら const char *alpha = "abcdef....xyz"; の要素を順になめてやればいい。
172 :
デフォルトの名無しさん :04/01/31 13:19
有難う御座います。 早速試してみます^^ 御手数御掛けしました
>>173 C位読めるでしょう。なんか変なコンプレックスとかある?
素で間違えた。すまん
やだ
>>168 >c:\common\lib\servlet.jar.;
jarの後のドットは何? 写し間違いでなければ、
c:\common\lib\servlet.jar;.
こうしてみたら?
その前にCドライブ直下にcommonがあるというのがなんだかアヤスイ…
CドライブはTomcat専用か
String arg = "test.dat"; String[] test = arg.split("."); のようなかんじで,文字列を"."でsplitしたいのですが,どうしたらいいでしょうか. このソースでは正規表現に問題があるようです.
正規表現についてちっとは調べろよ "." は任意の文字1文字を表す表現だから "." 自身を表すときはバックスラッシュでエスケープしろ。
java はじめたばかりの初心者の質問です arrayList 中に [1, 10, 20, 30] のようにデータを格納することはできたのですが、arrayList の中身すべてに 10 を足しこむことなどはできるのでしょうか? 実行結果↓ [11, 21, 31, 41] できればサンプルソースを書いていただけたら幸いです。。。
>>183 嫌な予感がするんだけど、
ArrayList arr = new ArrayList();
arr.add({1,10,20,30});
とかやってないよね?念のため。
187 :
デフォルトの名無しさん :04/01/31 18:43
>>183 素直にループ書くしかないですな。
for (int i = 0;i<arrayList.size;i++) {
Integer value = (Integer) arrayList.get(i);
arrayList.set(new Integer(value.intValue() + 10));
}
188 :
デフォルトの名無しさん :04/01/31 18:44
()ぬけてたな。
189 :
デフォルトの名無しさん :04/01/31 18:57
スーパークラスで何かクラス固有の変数を使ったメソッドを定義して、 そのクラス固有の変数の値は各サブクラスで設定したいのですが、 public class Super{ protected static int VALUE = 0; public void hoge(){ (VALUEを使った処理...) } } public class Sub1 extends Super{ protected static int VALUE = 1; } public class Sub2 extends Super{ protected static int VALUE = 2; } これだとSubクラスのインスタンスからhogeを使ってもSuperクラスの値が 使われてしまうみたいです。 このクラスは大量に使うのでインスタンス変数にはしたくないのですが、 そうすると、static変数ではなく protected int VALUE(){ return 0; } とかやって、VALUE() の戻り値を使うしか方法はないでしょうか?
190 :
デフォルトの名無しさん :04/01/31 19:00
this.VALUE
>>189 protectedの意味がわからないなら知ったかぶりせずに
最初からわかりませんと書け!
スーパークラスの値を変えたければサブクラス内で新たに宣言せずに直接VALUE = 1だの2だの書け
そうでなければhogeをオーバーライドしろ
あと氏ね
192 :
デフォルトの名無しさん :04/01/31 19:13
すみません。サーブレットのクラスパスはこれだけでいいのでしょうか? 本を立ち読みしたらもっといろいろ書いていたのですが。。 tool.jarとか。 j2sdkで動くのでしょうか? クラスパス c:\Tomcat4.1\common\lib\servlet.jar;.
>>192 すみません。あなたの環境とかディレクトリ構成なんかわからないので知ったことか。
すみません。 OS:XP ディレクトリはC直下に全てつっこんでいます。 j2sdkもTomcat4.1も
c:\\Tomcat4.1\\common\\lib\\servlet.jar;. で試してみなさい。
196 :
デフォルトの名無しさん :04/01/31 19:56
>>189 こうだな
public class Super{
protected final int VALUE;
public Super(int value) {
this.VALUE = value;
}
public Super() {
this(0);
}
public void hoge(){
(VALUEを使った処理...)
}
}
public class Sub1 extends Super{
public Sub1() {
super(1);
}
}
public class Sub2 extends Super{
public Sub1() {
super(2);
}
}
>>189 つーかさ、質問見た限りじゃはっきりしないけど、
クラス固有の値までスーパークラスの値を継承する必要はないというか
メソッドのオーバーライドと概念的に混同してる気がする。
本当にやりたいのはこんなんじゃない?
1. クラス固有の値は個々のクラスごとにstatic変数として定義する(継承はしない)。
2. 値を得るメソッドを1の変数のアクセサとしてサブクラスでオーバーライド。
3. このアクセサを実際にその値を使いたいメソッドで呼び出す。
>>198 に同意。
それ以外の奴はちょっと下がっててくれ。
201 :
デフォルトの名無しさん :04/01/31 21:52
string.indexOfで\の場所を取得したいのですが indexOf("\\")でうまくいきません。初歩的なミスなんでしょうか。。 またindexOfの引数を大文字・小文字区別なしで処理したい場合は どのようにすればよろしいのでしょうか・・
どううまくいかないのかを書きなさい
>>202 この場合、引っかからない。以外にあるか?
String str="abcd\\efg"; return str.indexOf("\\"); 普通に引っ掛かったが。
205 :
デフォルトの名無しさん :04/01/31 22:19
>>201 > またindexOfの引数を大文字・小文字区別なしで処理したい場合は
> どのようにすればよろしいのでしょうか・・
この部分は、toUpperCaseで両者を全て大文字にしてからindexOfを使えばよろし。
逆にtoLowerCaseでも可。
>>201 は元のStringでエスケープし忘れたとみた。
>>185 ,187
バイトに行ってたため返事おそくなりました。。。
レスありがとうございました。。
また分からないことがあったら書き込みにきます
>>208 まぁ、Staticなメソッドだけでプログラムを書いたとしても、それはJavaのプログラムと呼べてしまうものだからな。
悲しいかな。悲しいかな。
211 :
デフォルトの名無しさん :04/01/31 23:18
Tomcat5.0.16をインストールしたのですが、 C:\Program Files\Apache Software Foundation\Tomcat 5.0\conf 配下のweb.xmlの一部を以下のように書き換えました。。 変更前 <!-- ←削除 <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> -->←削除 変更後 <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> 変更前はlocalhost:8080で画面が表示され、 サンプルで入っていた.classのファイルは実行されます。HelloWorldとか。 ですが、自分で作ったクラスファイルは実行されません。 変更後はlocalhost:8080でHTTP Status 404-/になってしまいます。 どこが間違ってるのでしょうか? ネットで調べた通りにやってみたのですが。
213 :
デフォルトの名無しさん :04/01/31 23:35
>>210 private staticなメソッドに実装をかいておいて
publicインスタンスなメソッドから呼び出して高速化に貢献していますが何か?
>>191 スーパークラスの値を変えたいわけではないです。
>>196 finalはstaticのことでしょうか?
そうであれば、スーパークラスの値を変えられるのは困るし
単にfinalを抜かした場合我侭ですみませんがインスタンスごとに
領域を取りそうなのが嫌なのです。。
>>198 1~3は下のようになるのでしょうか?
結局このようなことをやるなら、値を継承して扱ったほうが
自然な気がするのですが。。(Javaではできないみたいですけど)
public class Super{
private static int VALUE = 0;
protected int getVALUE(){ return VALUE; }
public void hoge(){
(getVALUE()の戻り値を使った処理...)
}
}
public class Sub1 extends Super{
private static int VALUE_SUB1 = 1;
protected int getVALUE(){ return VALUE_SUB1; }
}
215 :
デフォルトの名無しさん :04/01/31 23:40
風呂釜洗うやつってなんて言う名前でしたっけ?
>>209 184ではないが
for (int i = 0; i < list.size(); i++) { ... } がよくて
for (Iterator i = list.iterator(); it.hasNext();) { ... } がダメという基準がわからん。
絶対に ArrayList 以外使う可能性がないなら上でもいいが
LinkedList を使いたい、あるいはそもそも Set を使いたいということになったとき
上だと修正が手間かかる。
あと JDK1.5 から導入される enhanced for も内部では Iterator だしな。
>>213 final つけたら早くなるとか信じてるだろ。
>>216 下は俺のよく知ってるC言語っぽくないからな。キモい。
>>216 インデックスで呼び出して毎回クラス内部で線形探索される位なら、状態を保持するイテレータの方が速いしね。
なんでだろ?
>>183 での質問で追加してお聞きしたいことがあります
現在、中位記法から逆ポーランド記法へ変換するプログラムを書いているところなのですが....
if(arraList.get(size) == 1から10までの数字){
//リストのトップが演算子だったらそのままリストに追加
if(arrayList.get(size-1) == "演算子" {
tmp = s.charAt(i); //式中の i 番目の要素を tmp へ
arrayList.add("" + tmp);
}
//(size -1)番目が整数なら { (size -1)番目の要素*10 + (size)番目の要素 }
else{
********************************
********************************
********************************
}
}
となるようにプログラムを書きたいのですが、***で書いた部分がどうしてもできないのです。
charAt() を利用して式の要素を一文字ずつ読み取っているため一つ前の要素が数字だったら
数字を合成してあげないと計算ができないんですよ。。。。
[1, 2, +, 3]
と格納されているものは
[12, +, 3]
と形を変えたいといえばわかりやすいでしょうか?
こちらもできたらソースを書いていただけると助かります
221 :
デフォルトの名無しさん :04/01/31 23:52
>>213 高速化されるわけねぇ。別インスタンスでもコードは共有。。。釣られたのか?
>>216 略さずに Iterator で List 要素に 10 加算するコード見せてくれ。
List#set するときにインデックスはどうする気だよ?
>>214 final と static もわからないのに
>インスタンスごとに領域を取りそうなのが
とか憶測で語られてもこまるなあ。
4バイト程度がクリティカルなほどインスタンス作るのか?
>>213 invokestaticが遅いということも知らない生兵法馬鹿発見。
>>217 finalなんてどこにも書いてないだろ。
そもそもprivateメソッドはfinalつけるまでもなくfinalだろ
莫迦か
>>221 List add10(List list1) {
List list2 = new ArrayList();
for (Iterator it = list1.iterator(); it.hasNext();) {
Integer i = (Integer) it.next();
list2.add(new Integer(i.intValue() + 10));
}
return list2;
}
List list1; [1, 10, 20, 30]
List list2 = add10(list1); // [11, 20, 30, 40]
list1 を保存しておく必要がないなら list1 = add10(list1); でも可
1GBのメモリを積んでいるPCがいくらでもあるこのご時世に、 DOS時代のようなメモリのせこい節約なんぞ、する必要を感 じない。 節約するとしたら、ネットワークの使用帯域幅と通信回数。 最近のシステムのボトルネックはもっぱらそっち。 帯域幅も最近急速に太くなってるので、そのうちコッチも どうでもよくなるのかモナー。
>>224 final にすると早くなるという都市伝説と同じように
static にすると早くなるというのもあなたの思い込みだということです。
>>221 >略さずに Iterator で List 要素に 10 加算するコード見せてくれ。
Integerは書き換え不可なので割とどっちも不正解だな。
>>225 つーかそこまでしてiterator使ったって…
>>227 finalにすると速くなるよ。
staticは知らないよ。
>>225 。。。結果は間違いない。で、お前は List 各要素に 10 加算したいとき
そんなコード書くのか? 俺はループ内でインデックスが必要なときは
i++ を使うが、そうじゃないときは
>>216 の理由で Iterator だけどな。
最近のJVMに実装されている世代別GCは、New領域がコピーGCを やってるので、短寿命のインスタンスの生成についてはあんまり 生成コストを気にしなくていいと思うよ。
>>231 ドッチでもいいと思うけど。あなたの頭の中では何が問題なんですか?
>>222 finalがああいう書き方できるのを知らなかったので何かの間違いだと
思ってしまいました。ごめんなさい。
イテレータオソイデスヨ ツカイカタカンガエマショヨ
初心者スレならではの展開ですね。 実際にシステム構築する場合のボトルネックは きっとここで話されているようなことではないはずなので大丈夫ですよ。
そういや、標準 API で Integer に対する可変クラスって無いのか? String に対する StringBuffer みたいな。
>>237 そりゃそうだろうけど、だからといってないがしろにはできない
241 :
デフォルトの名無しさん :04/02/01 00:18
いや、でもこんなとこでfinalがどうだのstaticがどうだの言っている間に 他にやるべきことは山ほどあると思うよ。
>>220 なんか質問のタイミングがわるかったみたいなので
また明日にでもきます・・・Y(>_<、)Y ヒェェ!
久々に伸びていると思ったら・・・ こんなことだろうとおもったよ・・・
>>237 そうだな。ボトルネックはだいたい藻前のような香具師のオナニー設計や
モデリングに問題があるからな。ここで出てる final とか Iterator は関係ないな。
>>242 だからさ、少なくても
>>237 が話しかけてるような最近のレスでは、
システムが遅いからここで質問している人なんて誰もいないわけ。
的外れだから「自称上級者」と呼ばれるんだよ。わかる?
Javaスレは定期的に荒れるから好きだ。 しかも、VBやDelみたいに敵同士煽り合うんじゃなくて 単なる内戦なのがたまらない。 モットヤレ
249 :
デフォルトの名無しさん :04/02/01 00:41
プログラムを実行した際にMS-DOSの画面に at クラスの限定名(Unknown Source) というのが 何十行か、わさっと表示されるんですが これってどういう状態なんですか?それが表示されてからは 他のプログラムも実行できなくなります。
>>243 おまえが184をスルーしたのがそもそもの原因。
>>249 例外が発生してスタックトレースを吐いた?
取りあえず初めの方の行を見て心当たりのあるメソッドを修正しる。
>>246 は上級者だと思ってるんですね。自分のことを。
253 :
デフォルトの名無しさん :04/02/01 00:54
>>251 怪しい所をコメントアウトしてコンパイルし直したら
出なくなりました。例外が発生するとこうなるんですか??
>>253 キャッチしない場合はそうなりますね。
ソケットとかエラーが発生する可能性のある物を除いて、例外が発生しないようにロジックの
見直しを行う必要があります。配列の範囲外アクセスとか、バグ以外の何者でもないので。
>>246 初心者スレだからこそ都市伝説の流布を防ぎたいという親心なんだろ。
初心者は、最初のうちからきちっと矯正しておかないと変な癖が付くからな。
「可変長配列はVector」とか「final宣言で高速化」とか「ループ変数を使い回して高速化」とかいう
役に立たない知識は早めにつぶしておいた方がいい。
257 :
デフォルトの名無しさん :04/02/01 01:02
258 :
デフォルトの名無しさん :04/02/01 01:02
>>配列の範囲外アクセス もしかしたらこれかも知れないです。 getComponentをコメントアウトしたら、収まったので。 有難うございます。調べてみます。
>>258 atの前が例外名なのでそれで検索すれば原因がある程度分かります。
ぬるぽかも知れませんよ?
263 :
デフォルトの名無しさん :04/02/01 01:16
質問です。 SDKに付いてるsrc.zipを調べれば APIのソースを見ることが出来ますが、それだけでなく Cで書かれているであろうnativeメソッドのソースも 勉強のために見てみたいのですが 見られる方法はないでしょうか?
>>262 「速くなるから」という理由で final にするのが間違っている
265 :
デフォルトの名無しさん :04/02/01 01:27
>>259 >>260 ArrayIndexOutOfBoundsExceptionをキャッチしてみたら
やはり例外発生でした。
ちなみにNo Such Chile:2でした。
ありがとうございました。
266 :
デフォルトの名無しさん :04/02/01 01:28
↑ No Such Child:2の間違いでした。
>>262 「散髪に行って20gのダイエットに成功しました」という程度には高速化される。
その意味では間違いではない。チミの体重が200g程度なら10%のダイエットに成功したと言える。
だが、実際のところ一般的な成人の体重は200gどころかその20~30倍以上はあるわけで、そんな中で
20g減ったところで何の価値もない。
ま、そもそも
>>264 のいうとおりfinalの意味は高速化ではないんだが。
268 :
デフォルトの名無しさん :04/02/01 01:44
newについて、どうして①はnewを付けて②はつけないのしょうか? ①BufferedImage img=new BufferedImage(????); ②Graphics2D gra2=img.createGraphics();
「可変長配列はVector」とか「final宣言で高速化」は意味合いが違うのに 一緒くたにするのが悪い
finalで速くなるにはなるが、あくまでであって目的ではない、って一言書けば済むことを なぜこんなにだらだらとやるのか?
あくまで結果であって、って書こうとしたら抜け落ちた。 おわびにフシアナするから許して
>>267 > 「散髪に行って20gのダイエットに成功しました」という程度には高速化される。
その程度の効果すらあったりなかったりするし。
final で修飾すれば常に速くなるってのを信じるのは、
** を飲めば誰でも *日で *kgやせられるって広告を信じるのと同レベル。
>>270 「実装によっては」「速くなる可能性がある」だけであって
「絶対に速くなる」わけではないことを強調したいから。
>>268 なぜ②に new が付かない事を疑問に感じるのか?
>>268 createGraphics() の中でnewしてるから。
finalでなぜ速くなるかを説明できる人はいるのか? …と煽ってみるw
>>276 たとえ知らずとも探せばすぐ見つかるから
その煽りは意味がない
またfinalかよ。 とりあえず、今のJDK(SUN J2SE1.4.2)では、finalを付けたかどうかではなく、 クラスからメソッドが一意に決定出来るかどうかで、早くなるかどうかが 決まる。 例えば、ロードされているサブクラスでそのメソッドがオーバーライド されている場合、早くはならない。その状態でも、サブクラス側のメソッド 呼び出しは早くなる。 まぁこんな感じで最近のVMは気が利いてるので、ちょっとした最適化の つもりでfinal付けたって、設計に悪影響を与えるだけ。 finalを付ければ、サブクラスでオーバーライドされることはなくなるので、 常に早くなる状態にはできるが。 ほんとに速度を追求するんなら、対象のVMを深く調べて、いろんな 最適化の可能性を探るこった。
>>278 悪い、ソースで示してくれ。お前の意見には興味はない。事実を知りたい。
>>279 VPTRテーブルを見に行くか、直接ジャンプするかの差でしょ?
考えるまでもないと思うけど。
281 :
Javaカレー :04/02/01 11:40
ランダムアクセスファイルにデータの追記をするコードを作っているのですが、 java.io.RandomAccessFileクラスのlength()メソッドでファイルのサイズを 取得できないため、うまく動作しません。ファイルサイズを調べてみたところ、 " ?"(半角スペース7バイトとクエスチョンマーク)が返されています。 理由や回避策をご存じの方、解説よろしくお願いします(コンパイルは通ります)。 // コード例 public static void FileSize() { String file = "C:/java/Test.xml"; RandomAccessFile raf = new RandomAccessFile(file, "rw"); long size = raf.length(); ←ひょっとして、file.length()が正しいですか? raf.seek(size); String data = "</File>\n"; raf.writeBytes(data); raf.close(); }
>>281 質問!longなsizeに" ?"の様な愉快な文字列が格納できるんですか?
String data = "</File>\n"; raf.writeBytes(data); これだとunicode書き込んでるけどそれで良いの?コードページ変換せんと。
284 :
Javaカレー :04/02/01 12:00
レスありがとうございます。
>>282 そうなんです。なんとも愉快なことになっておりますw。どうしましょう...。
>>283 コードページ変換の必要があるのは知りませんでした。試してみます。
どうやって確かめてるんだろう。 long size = raf.length(); System.out.println( "SIZE=" + size ); で、"SIZE= ?" が表示されるの? Windowsのようだけど、Explorerやコマンドプロンプトのdirコマンドで ファイルサイズはきちんと表示される?
>>285 ちゃんと表示されないファイルなんて作れるんですか?
287 :
デフォルトの名無しさん :04/02/01 12:47
質問です。クラスライブラリみたいなのを作りたいのですが、うまく出来ません。 以下のような構造で、classB、C、DはコンパイルできたのですがclassAができません。 classAではclassB内とは別にclassC、Dを使いたいのですが、classC、Dにはアクセスできないと 言われます。classC、Dをpack1、2両方に作ると、それぞれ別のクラスと言われるし、 こういう形だと無理なんでしょうか? どなたかお願いします。 --+-classA (import pack1.*; import pack1.pack2.*) +-pack1 | +-classB (package pack1; import pack2.*) +-pack2 | +-classC (package pack2) +-classD (package pack2)
あう、見にくい。こうです。 ----+-classA (import pack1.*; import pack1.pack2.*) +-pack1 | +-classB (package pack1; import pack2.*) +-pack2 | +-classC (package pack2) +-classD (package pack2)
class Cのパッケージ宣言は以下が正しい。 package pack1.pack2;
>>289 それもやってみたんですが、それだとclassBがコンパイルできなくて…
なんで基本的なことすら勉強しないでここに投げる? classB (package pack1; import pack2.*) ~~~~~~~~~~~~~~ 明らかにここがおかしいだろ? importすら出来ないで何するつもりなんだよ? 本なり初心者向けサイトなり見れば必ず書いてあるだろ?
>>291 すみません。色々本は読んだのですが、どれも package, import については軽く流してるものばかりで
指摘されてる所の間違いが全くわかりません。
>292さんの所にあるサイトで勉強してきます。失礼しました。
>>279 実験してみろよそれくらい。
うだうだ言ってるんだから、ちょっとは調べてるんだろ?
まさかどっかの記事鵜呑みにして終わりか?
答えてる方まで初心者かよ。
>指摘されてる所の間違いが全くわかりません。 (;´Д`)ダメポ・・・
>>294 違うだろ、うだうだ言ってるのはお前だ。
>>279 が言ってるのは、お前のように
どっかの記事鵜呑みにしているような意見聞きたいんじゃなくて、えらそうに講釈
たれるんだったら、せめてマイクロベンチマークの結果を示せ。
297 :
デフォルトの名無しさん :04/02/01 14:41
シューティングゲームで斜め移動をやりたいのですが一つ障害があります。 ↑を押したまま→を押して↑と→の動じ押しの状態にします. このとき↑を離すと→が押しっぱなしの状態になります. しかし→を離すと↑は押しっぱなしの状態になりません. Windows自体がこのような仕組みになっているようです. なんとかなりませんか.
ヤバイ、俺もダメポっぽい。287の答えが分からん。 クラスAにもBにもCとDをインポートしたい…で合ってんだよな? B,C,Dはそれぞれ独立?なら並べて置けばいいんだが… だれか暇な人教えて。
classB (package pack1; import pack1.pack2.*)
>>298 考え方としては相対パスじゃなくてルートからの絶対パスだ、と言われないとわからないか?
確かに初心者スレだがあまりにもひどすぎる…
>>296 ほんとにめんどい奴だな。
実験してみたのか?
出来ないならfinalに関してはもう話すな。誤解を生むだけだ。
呼び出しループは100000000回くらい回せよ。
あとJITだから、毎回計測結果が変わる可能性が高いので、
テスト全体をループでくくって何回も繰り返せ。
そのうち安定してくるから、安定してきた部分で判断しろ。
マイクロベンチて。そこまでこだわるんなら、JITなんか使ってられんだろ。
>>301 実験した結果明らかに高速化していることが判明したのですが、どうすればよいですか?
>>302 はやっ。
対象VM、プラットフォームは?
漏れはnon-finalな方が32msec速かった。
でも1万回回して出た結果だから、普通に使ってる分には無視できそう。
>>302 えぇ~~!
俺もうfinalのこと語るの止めようかな。
306 :
デフォルトの名無しさん :04/02/01 15:44
テキストファイルのn行目を書き換えるってのは どうやったらできますか?お願いします。
>>301 だから、ちゃうっちゅうに。今更 final 付けても速くならないという
分かりきったことを、もういちいち説明するなって。説明したくてしょうがないなら
なんらかの結果を示せって言ってんだ。なんの検証もせずに final 付けて
速くなるっちゅう香具師はほっとけ。
俺は仕事でプロファイラ使って、さんざん評価済み。
309 :
デフォルトの名無しさん :04/02/01 16:03
eclipseで作ったAppletをMSJVMで動かしたいのですがどうすれば良いでしょうか.
eclipseから直接MSJVMを使いたいのです.
>>306 1. テキストファイルを開く。java.io.FileReader、java.io.BuffererdReaderあたりを使う。
2. 出力用の一時ファイルを開く。java.io.FileWriter、java.io.BuffererdWriterあたりを使う。
3. 元のファイルから1行ずつ読んでは出力用の一時ファイルに出力。
4. n行目だったら別の内容を出力。
5. 出力が全て終わったら、元のファイルを消して、出力用の一時ファイルの名前を変更する。
FAQだな。
>>311 ありがとうございます、やっぱり全部読んでいかないといけないんですね。
FAQだったようなのに、答えて下さってありがとうございます。
助かりました。
>>309 appletを埋め込んだHTMLファイルをブラウザで開く。
設定画面で、「ワークベンチ」→「ファイルの関連づけ」の項目で
*.htmlや*.htmに適当なブラウザを関連づけておくと、
ナビゲーターから右クリック→「アプリケーションから開く」でブラウザが出るようになるから、
それを選べばブラウザが起動する。
>>313 なーるほど,
アプレットウィンドウのように表示したかったですが,
その方法をやることで大幅に楽になりそうです.
ありがとうございます.
Swing スレで final について語りたがるやつがいて、どうしたもんかと思っていたのだが、 このスレに議論の場を移したのか?
>>316 ごめん、間違えた。そっちだ。
…読んでるスレがバレるな。
318 :
デフォルトの名無しさん :04/02/01 17:21
じゃが島がうまくできません. コツを教えてください.
やっぱりアプレットビューワが使いたいです. 実行→実行→appletviewerクラスの名前 というところが一番怪しいのですが,何を入れればいいのでしょうか.
クラス自体がMSJVMに対応してないようなのでどうせ無理のようです. オリジナル→jad→改造→jar でゲームを改造したのですが無理でした. SunのJVMだと遅い・・・
javacでコンパイルするとMSJVMでは動かないのでしょうか? MSJVMで動かすにはどうすればいいでしょうか. バイナリエディタで直接いじろうとしたら死にました・・・
appletviewerってSDK付属のVMで動かしてるんだろ?
>>323 appletviewer(SunJVM)では動くんです,でも無茶苦茶重いんです.
そこでブラウザ上(MSJVM)でアプレットを実行したいのですが,
eclipse(javac)でコンパイルするとclassファイルの構造がおかしくなるらしく,
ブラウザ上(MSJVM)で動いてくれないのです.
>>324 おお!それはいい情報を聞きました!
さっそくやってみます!
ありがとうございます.
無茶苦茶重いってなんだろうな。 Swingとかバリバリ使ってるのかな。
いや,MSJVMだと快適に動きます.
できました! 皆様ありがとうございました!
331 :
デフォルトの名無しさん :04/02/01 19:42
(゚д゚)<シメジ
332 :
デフォルトの名無しさん :04/02/01 20:22
BigDecimalの scaleってどういう意味があるのですか? 短順に10進数の場合の小数点以下の桁数と とらえてよいのでしょうか?
>>332 >短順に10進数の場合の小数点以下の桁数と
>とらえてよいのでしょうか?
そう思ってよいですよ。
BigDecimalの内部値VALUE×10^(-SCALE)という形式だと、10進数の小数部
を常に正しく表現できるのです。doubleやfloatは、例えば"きっちり0.1"を表現で
きません。
財務計算とか工学の計算とかで、高い精度の10進演算が必要な場合、常にBigDecimal
を使用するべきと言えると思いまふ。
public class D{ public static void main(String[] args){ byte op1 = 0x21, op2 = 0x55; System.out.println("op1 & op2 = " + (op1 & op2)); System.out.println("op1 | op2 = " + (op1 | op2)); System.out.println("op1 ^ op2 = " + (op1 ^ op2)); System.out.println("~op1 = " + (~op1)); } } すみませんが、↑の記述で何故一番下の System.out.println("~op1 = " + (~op1)); が「-34」になるか分かる方いらっしゃいます? ぜひともお願いします。「-94」なら分かるのですが(^^;
0x21 = 33
演算子 ~ は、以下の式で定義できる。 op1 + ( ~op1 ) = -1 むしろ-94になる理屈がワカラン
0x21 = 00100001 01011110 = 94 最上位ビットが正か負かを表すんだけど、 最上位ビットを立てるとマイナスをかけたことになるのは 確か1の補数って言ったと思う。 引き算を足し算でできる2の補数を普通は使う。 x + ~x = -1 = 11111111 (全ビットが立った状態) 1 + -1 = 00000001 + 11111111 = 00000000 = 0
>>334 むしろなぜ-94になると思ったのか、そっちの理由が気になる。
遅くなりましたが、レスありがとうございました。
結局コードページ変換をしなくても、なぜかうまく動きました。
>>285 ちなみに、ファイルサイズは raf.writeBytes(size); を1行加えて、同じ
ファイルにはき出して確認しました。int型にキャスト変換したりして
いろいろ試してみましたw。
341 :
デフォルトの名無しさん :04/02/01 23:06
レスありがとうございました。 「-94」は思いっきり勘違いでした。 でも反転して「-33」だとしっくりくるのですが、「-34」というのがどうも・・・ もう少し補数の勉強をした方が良いですね。
すみません。 私がJ-Builderで作ったJavaアプリケーションが文字化けするらしいのですが、 もっともありそうな理由ってなんでしょう? (当然swing使用。jarになった状態。JDKのバージョンは1.3.0 Windows98で作ったけど、MacOS-Xでも動作確認済み) 自分で調べてみても、ケースが多過ぎ(るように見え)て解らない… そもそも、この質問してきた人の環境がわからないんで、答えにくいと思いますが。 で、もし質問者にこちらが質問するとしたら、どの辺を確認すれば良いでしょうか? (OS、JSDKまたはJREのバージョン、あと何か?) ついでに、この件と関係あるかどうかわかりませんが、複数のJDKまたはJREを持っている環境の場合、 Jarはどのランタイムを使うのでしょう?
UNICODEになってない。
GUIのBean貼り付けたときにJBuilderがフォント名直書きしちゃってない?
すみません。JavaってCでいうprintf()みたいなものってないんですか? 出力する数字の桁揃えをしたいのですが…
桁揃えなら java.text.NumberFormat java.text.DecimalFormat
0010 0001 = 33 1101 1110 = 1の補数 1101 1111 = -33 0010 0010 = 34 1101 1101 = 1の補数 1101 1110 = -34 よって、System.out.println("~op1 = " + (~op1));は「-34」になる。 ・・・・・の解釈で良いのかな?
お尋ねしたいのですが、JSPでコンボボックスを <select size="1" name="su<%=i%>"> と記入した場合、受け側のrequestの記述はどう書けばいいのでしょうか? ちなみに request.getParameter("su"+i) ではエラーになってしまいました。初歩的な質問ですみません。
すみません、解決しました。お騒がせしました。
よく見かけるのですが、あるオブジェクト(Objとする)のフィールド(Aとする)の値を受け取るときに直接 int a = Obj.A; みたいな書き方ではなく、メソッドを通じて int a = Obj.getA(); みたいな感じで値を受け取るのには何か意味があるのですか?そういう習慣なんですか?
そうです。カプセル化といいます。
>>353 おお、そうなんですか。
アクセス修飾子とか全然無視して(ダメっすかね)プログラム作ってる俺には
無意味っぽいですね。わざわざレスしてくれてありがとです。
>>352 しかもフィールドを直接アクセスするよりも
setter/getter を通す方が実は高速です。
>>355 setter/getterにfinalをつけるとさらに高速になったりしますか?
ソース示さずに速度の話するの禁止
そもそもfinalは高速化のために使うものではない。 ロジックの最適化にまさる最適化なし。
そーっすね
360 :
デフォルトの名無しさん :04/02/02 03:34
361 :
デフォルトの名無しさん :04/02/02 03:47
class primenumber { public static void main(String args[]) { int max,i,j,num; boolean p[]; max=Integer.parseInt(args[0]); p=new boolean[max]; num=0; for(i=2;i<max;i++) { if(p[i]==true) continue; for(j=2;i*j<max;j++) { p[i*j]=true; } num++; これは素数を見つけるプログラム(の一部)らしいのですが、何をやっているのか全くわかりません。 boolean p[]の部分とか、true…とか、ほぼ全部わかりません どなたか、バカ丁寧に解説してもらえませんか?
簡単にいうと、Pの配列の添え字がfalseのやつには、素数が入るようになる。 なんでかっていうと、二回目のFOR文でI*Jつまり(素数じゃない)のにfalseを いれてるから
でもこれかなり効率悪いと思うよ。
配列?添え字? boolean p[]; max=Integer.parseInt(args[0]); p=new boolean[max]; この3行とか if(p[i]==true) continue; この2行とか意味不明です。 boolean なんて聞いたことなく、検索したけどtrue…false…意味不明です。 ちなみにこのプログラムは、どんなクラス・メソッドを用いてることになるんでしょうか??
booleanなんて基本中の基本なんだから調べれ
>>364 Javaの入門書持ってないの?その5行とも入門書の前半の方を読めばわかるはずだが。
あなたの質問は、「微積分やりたいけど足し算わかりません」と一緒。
367 :
デフォルトの名無しさん :04/02/02 09:58
非常に基本的な質問で申し訳ありません。 アプレットから外部プログラムをキックしたいのですが アプレット内にどのように記述すればいいのでしょうか?
369 :
java3D超初級者 :04/02/02 10:58
text3Dで3Dな文字列を作成するときに なんか位置の指定の方法ってありますか?
>>202-206 ありがとうございます。
>>202 \がない(-1)と返されましたんです。203さんのとおりです。
原因は以下スレみたらわかりました^^;
細かくはファイルパスを取得して
そのファイル名だけを消した値を取得しようと思ってたんです。
そのパスに\が入ってたので・・初心者すいません。
>>205 ありがとうございます。使ってみます。
>>368 ありがとう御座います。アプレットと同じ場所に置いてある
プログラムを実行するにも署名付きアプレットが必要なんですね。
リンク先見てもよく分からないんでググってみます。
372 :
java3D超初級者 :04/02/02 12:00
>>369 追記
位置のほかに、文字列を回転もさせたいのですが・・・
x軸を -90度 回転させたいんですけど
どうやればできますか?
回転行列 x'=x*cosΘ-y*sinΘ y'=x*sinΘ+y*cosΘ あとはなんとか汁w
大名行列 <「下~に~!下~に~!」 orz _o/|_ ○| ̄|_ あとはなんとか汁w
375 :
デフォルトの名無しさん :04/02/02 13:55
Javaで?と:使う文法ってなんて呼ぶんですか? String str = i == 0 ? "zero" : "other"; のようなやつ。
三項演算子かな
三項演算子
378 :
デフォルトの名無しさん :04/02/02 14:06
saxとDefaultHandlerを使ってXML解析を行っています。 DefaultHandlerのcharactersイベントって1回でタグに囲まれた文字列を全て取得しますよね?。 1回では全ての文字列を取得できないのか、まれに2回続けてcharactersイベントが呼ばれることがあります。 ↓ <hoge>12346578</hoge> 1回目のcharacters()・・・"123456" 2回目のcharacters()・・・"78" 何故?
>>370 ファイルやパス名は機種依存しないようにjava.io.File 使ったほうがいいと思う
381 :
java3D超初級者 :04/02/02 14:24
>>373 すみません;まったくわかりませんw
//省略
String text = "初心者ですよ!ええ初心者ですいませんw";
float sl = text.length();
Font3D f3d = new Font3D(new Font("dialog",Font.PLAIN,1),new FontExtrusion());
Text3D txt = new Text3D(f3d,text,new Point3f( -sl/2.0f,0.f,-1.f));
Shape3D sh3 = new Shape3D();
sh3.setGeometry(txt);
obtrans.addChild(sh3);
//省略
以上
これは普通に3Dテキストを表示させるプログラムです(動作確認済み)
その3DテキストをX軸に-90度回転させて表示させたいんです;
どなたか分かる方いたらご教授お願いします。
385 :
java3D超初級者 :04/02/02 16:16
>>382 すいませんが、単なる3D物体を回転させたり、視点を変えることは知ってすよ?(rotX()とかはもうすでに知ってます)
ですから
>>381 でText3Dにより作成した3D文字をX軸を中心に-90度回転させて表示させる方法が分からないんですよ?
386 :
java3D超初級者 :04/02/02 16:24
ようやく回転させることができました。 どうも^^
死んでいいよ
JSPサーブレットで質問なですけど サーブレットがフォームからGet/Postされたデータを値をいじってフォワードすることはできないんですか? getParameter()で取得してsetAttribute()で値をセットしてJSPにフォワードすると JSP側からはgetParameter()ではいじる前の値しか取れないのでgetAttribute()でとるしかないのか? ということです よろしくお願いします
389 :
デフォルトの名無しさん :04/02/02 16:53
391 :
デフォルトの名無しさん :04/02/02 17:10
392 :
デフォルトの名無しさん :04/02/02 17:10
「初級者」って時点でさあ、
控えめに言って、
どう解決したのかも書かず、如何なる情報も他者に提供せず、
唯無意味な文章を投下し続ける
>>386 はこのスレに存在を許されない。
Servlet・JSPでfilter大活躍だよ。 filter様々だね。
397 :
デフォルトの名無しさん :04/02/02 17:42
ソースをms-dosでコンパイルしたらたくさんエラーが でて、上のほうを見ようとしても見ることができないのですが、 どうしたら見ることができますか? OSはwindows98です
MS-DOSなのかWindows98なのかはっきりしろよ。
>>397 javac hoge.java | more
もしくは,
javac hoge.java > hoge.txt
とかしてメモ帳で開く。
あ,すまん。コンパイルエラーはこれじゃ無理だった。 javac hoge.java 2> hoge.txt とかしてメモ帳で開く。
Win98のDOS窓では標準エラー出力はどうしようもなかったような・・・ 最近2000に入れ替えたから確かめようがないけど。
402 :
デフォルトの名無しさん :04/02/02 18:00
>>397 前すれで同じ質問してた人がEclipse入れるって結論だった。
java.util.Calendar を CMP のフィールドにマッピングできますか。 できるとすれば database での型には何を指定すればいいですか。 ちなみに eclipse で Lomboz (ないし XDoclet) 使ってます DB は JBoss 付属のか PostgresSQL を予定・・・・
>>397 >>401 氏も書いているけれど
何かシェルを入れないと標準エラー出力のリダイレクトは昔のWindowsではどうにもできなかったように思うよ。
具体的にはCygwin辺りをインストールするのが常套手段の一つなんだが、
CygwinにはCygwinで、これをインストールするとまた学ばなければならないことが増えるのがアレゲ。
>>397 ぐぐったらこんなの出てきた。
JDK1.1: javac -J-Djavac.pipe.output=true foo.java > errors.txt
JDK1.2: javac -Xstdout foo.java > errors.txt
JDK1.3: oldjavac -Xstdout foo.java > errors.txt
JDK1.4: javac -Xstdout errors.txt foo.java
>>405 わざわざぐぐってもらってすみません
ありがとうございます
大変お世話になりました みなさんありがとうございます
GUIでTextFieldに日本語入力すると文字化けしてしまいます。 どうしたらよいでしょうか。(jdk1.1.8)
すみませんもう一つ質問があるのですが このような文を int x = (int)(Math.random() * 10 + 1); for(int i = x ; i < x; i++){ 中身 } なぜ、この↓のようにできないのかがよくつかめないので int x = (int)(Math.random() * 10 + 1); for( x ; 0 < x; x--){ 中身 } 教えてください
>>412 そういうときはこう。
int x = (int)(Math.random() * 10 + 1);
for(; 0 < x; x--){ 中身 }
変数xをforループの外で使わないのなら、こちらがより望ましい。
for(int x = (int)(Math.random() * 10 + 1); 0 < x; x--){ 中身 }
どちらにしても、手元の入門書をもう一度よく読めってこった。
414 :
アニーです。 :04/02/02 21:25
アニーです。 知っている方がいらっしゃいましたら教えてください。 1.親フレームに対してPOSTすると親フレームでcontext typeがないとのことで null pointerの例外になってしまいます。お助けください。 2.親フレームから子ウインドウにPOSTする方法を教えてください。 HIDDENに値を持ってPOSTしたいのです。 以上
415 :
アニーです。 :04/02/02 21:28
414ですが 親フレームから子ウインドウにたいしてPOSTすると context typeがないとのことでした。失礼しました。
416 :
デフォルトの名無しさん :04/02/02 21:51
VisualJ++の使い方をやさしく書いてあるWebページ知りませんか?
417 :
アニーです。 :04/02/02 21:53
414の自己レスです。 1.サーブレットでcontext typeに対する不正な参照があったのが原因でした。 if文をかましたら直りました。失礼しました。自作になってしまいすいません。 2.についてはまだ解決できてません。すいません。
418 :
デフォルトの名無しさん :04/02/02 22:42
どなたかお願いします。 JOptionPaneのダイアログって JPanelには配置できないんでしょうか?
420 :
デフォルトの名無しさん :04/02/03 04:12
JSPでjavaのメソッド(?)にリンクする方法はどうすれば良いのでしょうか?
すいません。 ファイルのタイムスタンプを取得するのはどうすればいいのでしょうか? fileNameのタイムスタンプを取りたいときは Timestamp?lastModified? どれも上手くいかないのですが・・・ System.out.println(fileName.lastModified());とかやってもだめで・・・・ もう1つフロッピーディスクのボリューム通番やラベルを得る方法とかありますか?
>>418 JOptionPane.showXXXDialog()(XXXにはMessageとかConfirmとか入る)の
第1引数はjava.awt.Componentなので、そのサブクラスのjavax.swing.JPanelを指定できます。
423 :
デフォルトの名無しさん :04/02/03 10:17
Tomcat+Apacheでバーチャルホスト設定を行った時CGIが動きません。 ■開発環境は下記の通りです RedhatLinux 8.0,j2sdk-1_4_1_01,tomcat-4.1.24,apache-2.0.43,perl v5.8.0 ■apacheとtomcatの連携を行い、バーチャルホストの設定をしました。html,jspファイルは問題なく動くことが確認できました。しかし、cgiがでフォルトの場所以外では動きません。 (バーチャルでcgiが動きません。)どのファイルの何を変更すればよろしいでしょうか? ■server.xmlの設定 <!-- hoge.○○.co.jp--> <Host name="hoge.○○.ne.jp" debug="0" unpackWARs="true" autoDeploy="true"> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/> <!-- test Project Context --> <Context path="" docBase="/home/hoge/public_html" debug="0" reloadable="true" crossContext="true"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_std_log." suffix=".txt" timestamp="true"/> </Context> </Host>
424 :
デフォルトの名無しさん :04/02/03 10:18
>>423 の続き
■httpd.confの設定
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
AddHandler cgi-script .cgi .pl
<VirtualHost 192.168.xxx.xxx>
ServerName hoge.○○.ne.jp
DocumentRoot /home/hoge/public_html
ScriptAlias /cgi-bin/ "/home/hoge/public_html/cgi-bin/"
</VirtualHost>
■workers2.properties
[uri:hoge.○○.ne.jp/*]
info=Map
http://hoge. ○○.ne.jp/
よろしくお願いします
俺も前に同じような状態になったことがある。 過去ログ見てみ
>■apacheとtomcatの連携を行い この時点で禿げしく尊敬する。mod_jkの実装は2度トライして 2度ともシパーイしたよ。できれば手順書とか欲すぃなぁ。。。
>>427 いや、mod_jkの実装って書いてるから、
彼はたぶん、mod_jkを自分で作ってるんだよ。
429 :
デフォルトの名無しさん :04/02/03 14:58
JavaかFlashかと言われたらみんなFlashって言うんですけど…やっぱりそうなんですか? Java勉強し始めたんですけど…でもFlashって無料じゃないんですよね? あぁ…このままJavaで突き進むべきですか?
何を作りたいんだ
>>430 やりたいことによるよ。
むしろ、FlashもJavaも覚えて、リッチクライアントなWebシステムとか作れるようになろうぜ。
>>431 Web上でかっこよく動いてるやつです。ちょっとしたムービーみたいなの。
あとゲームなんかも作ってみたいと思ってます。
>>432 それが一番いいんでしょうけどね。なかなか打ち込める時間がなくて…
えてしてプラグインのロードに時間がかかったりするから 意味無く動いてるのとかサイトのナビゲーションとかは Flash がよかろう
サイトのナビゲーションにFlash使うのは最悪。やめれ。 リンクを開く際にブラウザの機能が使えなくなる
そりゃ Flash の仕様じゃなくてプラグインの実装じゃないかい
GUIでウインドウを作りTextFieldに日本語入力すると文字化けしてしまいます。 どうしたらよいでしょうか。(jdk1.1.8)
>437 Flashの仕様について言及した記憶はないんだが
441 :
デフォルトの名無しさん :04/02/03 20:33
finallyって外部リソースのクローズ以外に何か用途ありますか? こんなふうに使ったよ、みたいのあったら紹介してくださいな。
>>422 遅くなったけど有難うございます。
ボタンを押すとJPanelにshowDaialogするというものだったんですが
ただ単にActionListenerをAddするのを忘れてました。
すいません。。。
>>443 質問が漠然としすぎてるのかな、と思ってたところにレスどうもです。
で、finallyで高速化ってのは私の質問の意図とはちょっと違うん
ですが、面白そうなので深追いしちゃいます。
finally使うと遅くなりそうな気がするんですが、どんなふうに使う
のですか?
はじめまして int a = 10; char b = '3'; int c = a + b; の結果を13にしたいのですが、charがunicodeとやらで、うまくいかないです char→int に型変換するにはどうしたらいいでしょうか?
>>444 final と勘違いしてる
>>443 はほっとけ。ツラレタノカ?
finally の用途は例外スローや途中で return など途中で制御を抜けたいときに
使うから組み方次第だな。当たり前の回答ですまんな。。。
>>445 別にUnicodeであろうがなかろうが普通の文字コードは'3'は0x33だから
その文字が数字であることをあらかじめ確認した上で
int c = a + b - 0x30;
とやればいい。
>>444 コードの複雑化
try {
return 0;
} catch(Exception e){
} finally {
return 1;
}
return 2;
しまった、コンパイルエラーだ・・・
450 :
デフォルトの名無しさん :04/02/03 21:57
importするときに 全体をあらわす*はつかわずにできるだけクラス名を特定するほうがいい と言われましたが 実際この両者でメモリとかの影響はどれくらい違うのでしょうか?
>>447 初心者にはコッチのが解りやすくない?
int c = a + ( b - '0' );
そんな間違えそうな書き方しないほうがいい
>>445 Character.digit(b, 10)
これでOK
>>447 ありがとうございます!!
要するに文字コードでの 0 = 0x30 とあらわせるわけですね。
たしかに文字コードの '0' を引いたらその差で求めたい整数が出せるということが
直感的にわかりました。
Character.digit(b, 10)ですか・・・ それについてもこれから調べてみます レスありがとうございます
455 :
デフォルトの名無しさん :04/02/03 22:14
ネットワークを使用したプログラムを作成しようとしたのですが、 ServerSocket ss = new ServerSocket(port); Socket s = ss.accept(); という部分で、「シンボルを解決できません」というエラーが出てしまいます。 J2SEのバージョンは1.42です。 どなたか解る方お願いします。
初心者未満だな
アプレットで表示した画像の座標を取得したいのですが どのようにすればいいでしょうか? 簡単に取得できる命令なんかはあるのですか?
461 :
デフォルトの名無しさん :04/02/03 23:32
ServletのどこかでDBクローズし忘れてるらしく > java.net.SocketException: Too many open files という恥ずかしいエラーが出たため、servletが動かなくなりますた。 で、tomcatを再起動すればいいかと思って再起動してみますたが 動かないままです。 鯖再起動はそう簡単にはできないので、それ以外の方法で 復旧させる方法を教えてください。 OS:赤帽9 Tomcat5.x DB:postgres7.4x です。足りない情報がたたあると思いますが、何を言えばいいか わからないような状態なので、あればご指摘ください。
>>460 レスありがとうございます。
左上です。
質問です。 自作のインターフェースって意味なくないですか? 本とかの例題見ても別に必要ないじゃん、ていうものばかりで… イベント系のものは内容は未設定だけど呼び出し条件みたいなのがあるからいいけど、 自作のもので有効的な使い方ってあるんですか?
内容は未設定だけど呼び出し条件みたいなのがあるのを自分で作る場合
まあしかし、インタフェースを教えるとそういう疑問持つ人もいるんだよね。それはそれで健全なことだと思う。 入門書のサンプルは現実的でなくて役に立たないし、 自作の小さいフレームワークでも作らせたら理解するかな?
なんとかして、Aドライブのボリュームラベルとその中にあるファイルの更新時間を取得したくて 下記のプログラムを組んだのですが、まるでだめでした。 なんとかAドライブのボリュームラベルとファイルの更新時間を取得する方法は無いでしょうか。 import java.io.*; public class Cmd { public static void main(String[] args) { try { String[] cmdarray = {"command.com", "/c", "dir"," a:\\"}; Process process = Runtime.getRuntime().exec(cmdarray); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { } } }
468 :
デフォルトの名無しさん :04/02/04 00:52
>>448 returnをメソッドからの局所脱出と考えて、脱出先や返却値を変えるのに
使えるっつうことですね、参考になりました。手元の環境で次のような
メソッド作ってみました。
public int foo () {
label:
try {
return 0 ;
} finally {
break label ;
}
return 1 ;
}
=> 1
471 :
デフォルトの名無しさん :04/02/04 01:41
Actionインターフェースについて詳しく調べています。ActionのputValue(String key,Object value)メソッドで keyという引数があり、この具体的な値としてACTION_COMMAND_KEYとDEFAULTというのがありますが、これらの 使い方がよくわかりません。SMALL_ICONやNAMEなど他の値については使い方がわかったのですが、この2つだけ 意味がわかりません。当然オンラインのドキュメントを調べましたが、次のようになっていました。残念ながら、私の 思考力では、これらがなんのためにあるのかよくわかりませんが、もしかして、とてつもなく便利なものなのでしょうか。 ACTION_COMMAND_KEYの説明 「JComponent に関連付けられた Keymap に常駐している結果として、Action が通知されるときに生成される ActionEvent のコマンド文字列の判定に使用するキーです。」 コマンド文字列って何のためにあるのでしょうか? DEFAULTの説明 「オブジェクトのプロパティ (テキストまたはアイコン) を設定または取得するときに、記憶取得キーとして 使うと便利な定数です。」 テキストの設定はNAME、SHORT_DESCRIPTION、アイコンの設定はSMALL_ICONなどがありますが、この説明のテキストまたはアイコン は何をを指しているのでしょうか。 お分かりの方がいたらよろしくお願いします。
>>464 クラス数が2,3ですんでしまう程度のサンプルじゃなかなか有り難味がわからないけど
まったく別系統の継承関係のオブジェクトを
同じ変数に入れて同列に扱いたいときってけっこうあるんよ。
あと、呼び出す側と中身実装する人が別で同時平行で開発するときに
文字通りインターフェースだけさきに作ったりね。(>465が言ったりしてるけど)
>>473 DBを停止させても反応ナシです・・・(T_T
全くブラウザ上に返事が返ってこなくなりますた。
Servletが入ってるところのものは一切反応がないです。
htmlさえでてこないです。
apache2のエラーログをみると [notice] channelUn.close(): close unix socket -1 [notice] mod_jk2 Shutting down が大量に・・・。これが悪いのでしょうか? ぐぐってみたけどそれっぽい情報もなし・・・。
476 :
デフォルトの名無しさん :04/02/04 09:07
jdkの最新バージョンの1.4以上をインストールしたいのですが、 それ以下のバージョンがインストールされていると何か問題がありますか? jdk1.5はなんかjavaじゃないみたいですが、それまで待っていようかも迷っています
477 :
デフォルトの名無しさん :04/02/04 09:08
質問です 3つの要素を関連付けしたくて ArrayListを3つ使ったクラスを作ってみたのですが このクラスからArrayList1つを持って来たいと思ったらどうしたら良いのでしょう? 作ってみたのはこちら class ABC { List a = new ArrayList(); List b = new ArrayList(); List c = new ArrayList(); public void seta(Object x) { a.add(x); } 省略同様のsetb,setc public Object geta() { return a; } 省略同様のgetb,getc } これだとjava.lang.IndexOutOfBoundsExceptionがでてしまうので return文の書き方、このコーディングのまずいところを教えてください おねがいしますm(_ _)m
ごめんなさい。1.4の内の最新バージョンということです。 自分のバージョンだとjavax.swing.spinnerを宣言してもだめなのです。 これは古いバージョンだからなのでしょうか。 他のコンポーネントを使うと2,3行長くなるし、全然まだ無知なので 誰か教えてください。お願いします。
呼出側はこんな感じです ABC abc = new ABC(); List list = new ArrayList(); list = (ArrayList)abc.geta(); System.out.println(list.get(1));//ここで例外エラーになります
482 :
デフォルトの名無しさん :04/02/04 09:42
CMP について質問いいですか。 こんな感じのフィールドがあって(Lomboz 自動生成) * @ejb.persistent-field * @ejb.persistence * column-name="customerid" * sql-type="int" こんな感じの finder 作ると * @ejb.finder * signature="java.util.Collection findByMemberid(Integer memberid)" * query="SELECT OBJECT(a) FROM Association AS a WHERE (a.memberid = ?1)" deploy しようとするとこんな感じで WARNING 出ます。 Every finder method except findByPrimaryKey(key) must be associated with a query element in the deployment descriptor. しかも deploy 失敗してます。 この WARNING まわりが原因かどうかもよく分かりません。 とりあえずこの WARNING を出ないようにできますか?
追記 使ってるのは Eclipse 2.1.1 Lomboz 2.1.1 (これって対応eclipseのバージョンかな?) JBoss 3.2.1 です 宜しくお願いします
>>478 別にムシしたわけじゃないんけど473とかぶってるので、474の時には番号つけてなかっただけです。
スマソ。
>>482 xdocletの記述が全て書いていないみたいなので、推測ですが@ejb.finderの数
とfiderメソッドの数があっていないということかな。
486 :
デフォルトの名無しさん :04/02/04 11:20
質問です ブラウザの×ボタンを押されたり javascriptでwindow().closeを発行した場合に セッション情報が生き残ったままなのか tomcatを再起動してやらないと アプリケーションが正常に動作しなくなります tomcatを再起動させずに済む方法を 教えて頂けると何よりです
>>481 目の前でunko喰ったら教えてやってもいい
33
↑うそ!書き込めるよ!ラッキー♪
てことで
>>481 新で!
初めまして、ネットワーク周りを勉強中の者です。 HTTPリクエストヘッダの書き換えはJavaで可能なのでしょうか。 自身から発信する情報なので、IPなどの情報以外は変更可能だと思うのですが……。 現在はURLクラスを使ってリクエストをしてみていますが、 もっと低レベルなところから実装するべきなのかもしれません。 よろしければ、助言をお願いします。
URLConnection con = url.openConnection(); con.setDoOutput(true); OutputStream os = con.getOutputStream();
492さん、具体的な方法提示ありがとうございました。 色々試してみたいと思います。
>>426 バージョンがちょっと違っていても
無理してconnectorsのソースからコンパイルしてmod_jkをつくらんでも連携して動く。
>>446 仮に
>>443 がfinalと勘違いして「高速化」をいっとるとしても
藻前も
>>443 もfinal都市伝説を信じる香具師であることに変わりなし
>>448 Javaの鉄則によれば「try-catch節にreturnは使うな」だ
>>464 デザインパターン本を読めばインターフェースの必要性を
あっという間に理解できる。
>>485 お答えありがとうございます。解決しました。
finder メソッド自体は Lomboz が作ってくれてたので整合はとれてました。
原因は、メソッドのパラメータの Integer に、
パッケージ java.lang が抜けていることだったようです。
まだ別の原因があって deploy できませんがとりあえず。
public class E{ public static void main(String[] args){ int arabicNum = 3; switch (arabicNum){ case 1 : romanNum = "I"; break; case 2 : romanNum = "II"; break; case 3 : romanNum = "III"; break; case 4 : romanNum = "IV"; break; case 5 : romanNum = "V"; break; default : romanNum = "unknown"; break; } System.out.println(arabicNum + " → " + romanNum); } } ↑の文をコンパイルしようとすると「シンボルを解決できません」という エラーが出ます。原因がわからないので困っています。
>>500 変数(romanNum)の宣言せずに、いきなり値の代入してるから
>>501 レスありがとうございます。
ですが、
int arabicNum = 3,romanNum = III;
int arabicNum = 3,romanNum = 3;
などとやってみたのですが上手く行きません。
int i =2,j = 3などならばわかるのですが・・・
>>480 ありがとうございます。
インストールする場合,前にインストールした古いバージョンのjdkは問題にならないのでしょうか
>>503 J2SDKは共存できます。
環境変数の変更忘れとHDDの容量さえ気にしなければ追加でインストールできます。
消す場合は普通にアプリケーションの削除をすれば消えます。
>>502 変数は使う前に宣言する必要があるということと、
変数およびリテラルの型の違いを意識することから始めましょう。
1はint型、"I"はString型、IIIは文字列でも数字でもない、未定義のシンボル
(変数やクラス名、メソッド名など)です。
もう一度手元の初心者本を読み直してください。
>>502 JavaScriptとかのスクリプト言語しか使ったことないタイプか?
int arabicNum;
String romanNum;
とかって書いたときにarabicNumとromanNumはどう違うか分かってるか?
あと,コンパイルエラーはよく読め。おおよそどこがおかしいか表示されるだろ。
>>504-505 レスどうもです。
無事にコンパイルできました。「III」はStringで宣言しなければならなかった
のですね。整数型と文字列型の違いだったんですね。
ありがとうございましたm(_ _)m
>>504 やはり、古いバージョンは無駄になってしまうのですね.
新しくインストールしてから、古いバージョンは消すことにしました.
お答えいただき,ありがとうございました.
508 :
デフォルトの名無しさん :04/02/04 22:23
どなたかお願いします。 import javax.swing.*; import java.awt.event.*; class Fra1 extends JFrame implements ItemListener{ JComboBox cbo1; public static void main(String[] args){ Fra1 fra1 = new Fra1(); fra1.setSize(100,100); fra1.setVisible(true); } public Fra1(){ super(); cbo1 = new JComboBox(); cbo1.addItem("あ"); cbo1.addItem("い"); cbo1.addItemListener(this); getContentPane().add(cbo1); } public void itemStateChanged(ItemEvent ie){ Object obj1 = cbo1.getSelectedItem(); String str1 = obj1.toString(); System.out.print(str1); } } これでコンボボックスをクリックすると何故か "ああ"のように2回続けて文字が表示されます。 どこかおかしい所があるんでしょうか
509 :
デフォルトの名無しさん :04/02/04 22:41
public class Assertion { public static void main(String args[]){ int a = 1; int b = 1; assert b == 0 ; "変数が0なので除算できません" a= a/b; System.out.println("a/ b = " + a); } } アサートを実行しようと本に書いてあるとおり上記を実行したのですが トークン "==" に構文エラーがあります。正しくは ";" です。 が出ます 実行するためには何かインポートとかしなければならないのでしょうか?
>>508 ItemStateChangedのイベントが2回起きるので、正しい振る舞い。
気にくわないならActionListenerを使うか、以下のようにする。
public void itemStateChanged(ItemEvent ie) {
if(ie.getStateChange() == ItemEvent.SELECTED){
Object obj1 = cbo1.getSelectedItem();
String str1 = obj1.toString();
System.out.print(str1);
}
}
511 :
デフォルトの名無しさん :04/02/04 22:54
Vb歴6年、せそうに乗じてJavaに移行しようと思うが いまいち、Java、Javaと騒いでいる意味がわからない。その効用性を 具体的に説明してほしい。
512 :
デフォルトの名無しさん :04/02/04 23:03
>>510 お答えありがとうございます。
何で二回起きるかがわからないんですが、
ItemListenerは選択解除時と選択時に
2回呼び出されてるって事ですか?
VB厨は来なくてよろしい。 6年経験があるからと、偉そうにVB風の開発でJavaの現場を荒らされてはたまらん。 VB厨はオブジェクト指向の概念も分かってない人間がほとんどだしな。
>>511 Webアプリと呼ばれる、3、4層C/Sシステムの仕組みを作るのを手助
けするさまざまな仕組みが掃いて捨てるほど出回っていて、開発が
結構簡単。みんながよってたかってWebアプリを作っているので、
開発要員の確保も容易。でもって.NETと違ってOSを選ばない。
大きなとこではこんなもんでしょうか。
>>512 そういう理解でいいんじゃないかな。
>>510 多分その本にも書いてあると思うけど、コンパイル時と実行時にオプション指定が必要。こんな感じ。
javac -source 1.4 Hoge.java
java -ea Hoge
アサージョンに触れていながらこれが書かれていない本なら捨てていい。(そんな本はないと思うが)
516 :
デフォルトの名無しさん :04/02/04 23:34
>>510 ,515
>assert b == 0 ; "変数が0なので除算できません"
途中にセミコロンが入ってるから構文エラーだろ。
途中をコロンにして最後をセミコロンにしろ。
518 :
デフォルトの名無しさん :04/02/05 00:51
明日、テストにでるみたいなんです。 どなたか教えてください。 描画画面に円を描くプログラムを作成せよ。 ただし、マウスのボタンを押した場所に円の中心を、また、押した場所と離した場所を線でつなぎ、その距離を円の半径とするような円としなさい。
円の方程式を思い出せ
520 :
デフォルトの名無しさん :04/02/05 00:53
aa,ab,ac... ba,bb,bc...zzと文字を順々に出力したいんですが for(char i='a';i<='z';i++){ System.out.println(i); } 文字の一列表示ならコレでいけたんですが(因みに以前質問した内容です) 二列以上に表示しようと思って for(char i='a';i<='z';i++){ for(char e='a';e<='z';e++){ System.out.println(i+e); } } とやってみたんですが、数字しか表示されないです。 どのように解決すればいいんでしょうか? 何方かアドバイス御願いします。
>>517 何も変わりませんが・・
同じコンパイルエラーが出ます
522 :
デフォルトの名無しさん :04/02/05 01:04
IISでTOMCATなしでjavaサーブレットって動くのでしょうか?
>>522 ほかのServletエンジンを使うとか。
IISだけだとできないんじゃないかな
>>520 String.valueOf(char);
>>522 うんこ喰ったら答えが見えてくる!
>>520 Javaのchar型は、符号なしの2バイト整数のことを指します。
なので、'a' + 'b' は0x61 + 0x62 = 0xc3 = 195 となります。
文字列(String型)として扱いたい場合はこうしましょう。
Character.toString('a') + Character.toString('b')
これでもいいですが。
'a' + "" + 'b'
>>520 char + char は int ってことかね
o + "" + e にするとか
>>524 のように、Stringクラスの関数valueOfで
どちらかをStringにしてしまえばいいかも
527 :
デフォルトの名無しさん :04/02/05 01:13
>>522 ほかのServletエンジンとは具体的にどんなのでしょうか?
TomcatってIISに組み込んで使えるよ。
529 :
デフォルトの名無しさん :04/02/05 01:15
あるパッケージ内にあるいずれかのクラスを実行したら そのファイル名と時間をファイルにログとして出力したいのですが 時間を出力させるのは簡単なのですが 実行したクラス名を出力させるにはどうすればいいのでしょうか? またそのパッケージ内にあるクラスのどれを実行しても 同じように同じファイルにログとして出力させたいのですが 可能でしょうか?
530 :
デフォルトの名無しさん :04/02/05 01:20
>>524 String.valueOf(char); (笑)
はっ?もっと勉強してからレスしろ
>>527 Jetty とか WAS とか JRun とか Weblogic とか Regin とか。他にも JonAS とか Orion とか。
よくワカランうちはとりあえずTomcatつかっとけ
String.valueOf(char); (笑) ^ エラー 1個
>>530 はいはい釣られてあげるから、糞喰って寝てくださいね
534 :
デフォルトの名無しさん :04/02/05 01:28
明日、テストにでるみたいなんです。 どなたか教えてください。 本当にお願いします。 描画画面に円を描くプログラムを作成せよ。 ただし、マウスのボタンを押した場所に円の中心を、また、押した場所と離した場所を線でつなぎ、その距離を円の半径とするような円としなさい。
円の方程式を思い出せ
>>529 これか。
java.util.logging.Logger log = java.util.logging.Logger.getLogger( "俺ログ");
log.info( "ふがああ");
getLoggerのところをパッケージ名にすれば
パッケージごとで分けて出力可能。
537 :
デフォルトの名無しさん :04/02/05 01:32
>>533 まだ寝ないって。
お前の馬鹿スレが読みたい。
でもお前はじゃば入門読んでくそでも喰ってろ。
もっと面白い無知なスレを知ったかぶって書いてね?
お願い。うっフッ
String.valueOfあってるよ。 System.out.println( String.valueOf( 'あ') + String.valueOf( 'ふ')); あふ
>>537 char unko = 'し';
char kuso = 'ね';
System.out.println(String.valueOf(unko)+String.valueOf(kuso));
>>532 ワラタ
>>537 今から馬鹿スレ立てなきゃいけませんか?
541 :
デフォルトの名無しさん :04/02/05 01:35
自作自演するな。 とにかくJAVAにゅうもんよんでね。
それより宿題スレッドの新スレッド立ててもいいですか?
メソッドの呼び出し元のクラス名を取得。1.4以上で可能。
Exception e = new Exception();
System.out.println(e.getStackTrace()[1].getClassName());
または、メソッドの引数に呼び出し元のオブジェクトを渡すようにしておいて、
そのオブジェクトに対してgetClass().getName()するとか。staticメソッド中じゃ使えないか。
public void hoge(int someId, Object caller){
log(caller.getClass().getName()); // ログに呼び出し元のクラス名を出力。
// 実際の処理
}
>>534 J2SDKをインストールしたディレクトリの下に
demo\applets\DrawTestというディレクトリがある。ここにあるアプレットは
直線と曲線を引くドローソフトなんだが、これをちょっと修正すれば円を書くようにできる。
Graphics.drawOval()を使って円を書け!
マウスの座標とdrawOvalで指定する座標は違うので変換が必要だが、そこは自分で考えろ。
健闘を祈る。がんばれ。
・わざとらしくJavaが全部大文字 ・わざとらしくJavaが全部全角 ・わざとらしくJavaが平仮名 ・その他にも多い平仮名 ・今時無い 「(笑)」 ・レス→スレ さあ、これらの事実が示す物は?
そして黙るw
546 :
デフォルトの名無しさん :04/02/05 01:49
数値の絶対値をとるにはプログラムではどうすればいいのですか?
Math.abs
>>524 ,525,526
レス有難う御座います
'a' + "" + 'b'で成功しました^^
String.valueOf()
Character.toString()
についても、今から調べてみようと思います。
プログラムって奥が深いですね(汗
でも、面白いから頑張ってみようと思います。
皆さん御親切に有難うございました^^
すみません。JDBCのリソースの開放について聞きたいのですが、 try { conn = dataSource.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("..."); // ... } finally { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ・・・と、finally節に長々とリソースの開放を書います。 しかし、これだけでソースの大半を占めてしまいそうな勢いで、 もう少しスマートな書き方をしたいと思うのですが、 みなさんはどのように書いてますか?
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } だけでいい。
>>550 ありがとうございます。
Connectionに依存するリソースも開放されるということですね。
ということは、コネクションプールを使ってる場合には、
Statementのclose()は行った方が良さそうでしょうか?
教えて欲しいのですが、 JLabelのような、入力を受け付けずに長文を表すような方法はありますか?
setEditable(false) した JTextArea
>>549 JavaDocを見れ。Statementを閉じた時にResultSetも閉じられるとあるが、
Connectionを閉じた時にはStatementもResultSetも閉じられるとは書いてない。
実際、hsqldbのJDBCドライバのソースを見ると、
Connectionを閉じた時には何もやってない。
コネクションプールの方も、DBCPを見るとプールにConnectionを戻しているだけ。
というわけで、StatementとConnectionは閉じとけということだ。
スマートなやり方については、漏れもJDBCは専門じゃないので良く分からん。
識者の意見を参考にすべきだと思うが、
Connection取得とSQLの実行までやってResultSetを返すメソッドでも作って、
ResultSet#getStatement()して、Statement#getConnectionして、
呼び出し元で両方とも閉じるのはダメかな?
・・・なんかダサいな、やっぱり。詳しい人、お願いしますだ。
EJB の例、例えば CMP の場合は、よく create の引数として、 Integer(1) だの Integer(2) だの、定数をプライマリキーとして与えています。 実運用上でこんなことをするわけないと思うのですが、さて、 クライアントはどうやってプライマリキーを決めたらいいのでしょう? 自分でロジック組まなきゃだめなのでしょうか? それとも、EJB コンテナが対応するテーブルを漁って、 使われてないキーを自動で生成してくれるような機能があったりするのでしょうか?
JAVA言語初心者なんで聞きたいことあります。 //出力用のエリア String area_TELL[]; String area_DAYTIME[]; String area_MONEY[]; String area_PLACE[]; area_TELL = new String[rec_cnt]; area_DAYTIME = new String[rec_cnt]; area_MONEY = new String[rec_cnt]; area_PLACE = new String[rec_cnt]; * rec_cntはカウント数によって変わります。 現在上記のように配列を持っています。 arraylist(?)を使用してC言語みたいな構造体を 作りたいのですがどうすればいいか分かりません。 教えてください。
>>556 その4つのStringを持つクラスを作ってそのクラスをArrayListに入れる
558 :
デフォルトの名無しさん :04/02/05 17:59
Javaを初めてまだ3日目の初心者です. Javaではオブジェクトや配列の引数は全て参照のコピーで渡されるのですか? その参照自体をコピーせずに渡す方法はありますか?
559 :
デフォルトの名無しさん :04/02/05 18:04
560 :
デフォルトの名無しさん :04/02/05 18:24
>>559 ありがとうございます.わかりました.
それとインスタンスメソッドの中で,thisはそのオブジェクト自身を指しますよね.
静的メソッドの中では,thisはそのクラス自身を指しますか?
>>560 やってみればわかると思うけどエラーになるよ
562 :
デフォルトの名無しさん :04/02/05 18:37
>>561 静的メソッドの中でそのクラス自身を表現する方法はないのですか?
>>558 どーしてもやりたきゃ
new Object[]{ obj }
とかするしか。
>>562 class Hoge { static void hoge(){ Class c = Hoge.class; } }
記念カキコはどのスレですか?
566 :
デフォルトの名無しさん :04/02/05 20:41
567 :
デフォルトの名無しさん :04/02/05 21:41
JdbcOdbcDriverを使ってAccessデータベースを操作してるんですが、 ResultSetのgetStringメソッドを実行したときに SQLExceptionがThrowされてエラーの内容が カーソルの状態が無効です。と出るんですが、 対処としてはどういう事が考えられますか? レコードは取得できてると思うんですが。。。 お願いします。
>>567 ResultSet#next() を呼んでないとか。
569 :
デフォルトの名無しさん :04/02/05 23:31
>>568 呼んでませんでした。
んでもって呼んだらいけました。ありがとうございます。
また質問なんですが、SQLを実行してすぐのResultSetの
カーソルって最初のレコードにはないんですか?
こういうイディオムで使いやすいように作られている。 ResultSet set = null; set = statement.executeQuery("..."); while(set.next()){ // ResultSetから1レコード分読み出し } VBでもこんなだったし、RDBを使うライブラリでは一般的なのかも。
571 :
デフォルトの名無しさん :04/02/05 23:42
自分のHPをサーブレットかJSPで作り直したいと思うのですが、 プロバイダから与えられてるWebスペースを使って、 サーブレットやJSPを動かす事は出来ますか? 出来るならどうやったらよいのでしょうか?
572 :
デフォルトの名無しさん :04/02/05 23:43
>>570 なるほど。と言う事は最初にnextメソッドを
呼び出さないとレコードをまだ読み取っていない状態
なんですね。
ありがとうございます。
>>571 できない。レンタルサーバか何かに逝くしかない。
>>571 プロバイダのWebスペースが使っているHTTPDに対して、Servletコンテナを
起動して接続する。Tomcat+mod_jkとか。
…なんてことが許されるようなレンタルスペースはあんまりないと思うけど
なー。
1.Servletコンテナを常時起動してくれているプロパイダを探す。現時点では稀少
ですが。
2.Javaは諦めて、PerlなりRubyなりPythonなりで書こう。それならサポートしている
プロバイダがいっぱいあるからさ。
3.サーバを丸丸借りて、Webサーバの機能を自分で全部セットアップ&管理。マンドクセ
ーことこの上なし。好きなら気にならないとおもうけどね。
自宅鯖でもいける
576 :
デフォルトの名無しさん :04/02/06 00:41
別々あるいは同じ階層のフォルダにある 二つ以上のファイルを読み込んで 指定のファイルに一つのファイルとして追記したいばあいはどうすればいいのでしょうか? 書き込みはわかるのですが 二つ以上のファイルの読み込みがわかりませんので教えてください
>>576 えぇ?なして?
二つファイルをオープンしてreadするだけじゃん。
578 :
デフォルトの名無しさん :04/02/06 00:54
>>577 2つならそれでもいいけど
二つ以上というのは
100個の時もあるのでそんなのいちいち書けないし
ファイルが常に同じ名前とは限らないので
特定の名称にはできないのです
例えば同じ階層にあるaで始まるファイルだけを読み込んで追記とか
本月に更新されたファイルだけを読み込んで追記とか
>>578 そんなの、更新日時なり正規表現なりでディレクトリを検索しろよ。
java.io.File使うべし。
>>578 ファイルなんて何個開こうが一緒。ファイルをオープンする記述を100回書かないと
100個のファイルを開けないと思ってるのならファイル操作以前の問題。
プログラミングの勉強を1からやり直すことになる。
今API見てて気付いたんだけど、java.io.File#listFiles(FileFilter)なんてあったんだね。 名前なり更新時刻なりの条件指定が簡単にできて便利。 Javaでioパッケージ使ってローカルファイルを使った経験がなかったから知らなかった。
582 :
デフォルトの名無しさん :04/02/06 02:52
他人が作ったのグラフィックスアプリケーションの動作が軽くなるようにリファクタリングをしたいと思っています. どこが重いかを検証するには通常どのような作業をするのでしょうか. よろしくおねがいします.
583 :
デフォルトの名無しさん :04/02/06 02:58
どのメソッドがいつ呼び出されたかのログを取れば良さそうですが, いちいち全部のメソッドに書き込むのだろうか・・・(´д`: アスペクト指向というやつならすんなりできるのかな,よくわかんないけど.
584 :
デフォルトの名無しさん :04/02/06 03:02
public void method(){ System.out.println(このメソッド名+":"+System.currentTimeMillis); //処理 } せめてこれを貼り付けていくだけにならないだろうか・・・ リフレクション?
585 :
デフォルトの名無しさん :04/02/06 03:18
>>582 オプティマイザまたはプロファイラを使ってみるとか
public class I{ public static void main(String [] args){ int sum =0; for (int i = 0; i < arrayOfInt.length; i++){ sum += arrayOfInt[i]; // sum = sum + arrayOfInt[i] } System.out.println("sum = " + sum); } } 4行目と5行目でシンボルを解決できませんになる。 誰かーーーーーーーー
arrayOfInt
なんでこういうのが絶えないの? Javaの質問じゃなくてプログラミングの初歩じゃん? 変数の宣言がいらないVBだとしてもこんなコードはロクに動かないだろ?
うどん屋 { 店に入る: たいらげる; } みたいなプログラムだな
591 :
デフォルトの名無しさん :04/02/06 10:20
592 :
デフォルトの名無しさん :04/02/06 10:58
lengthって import java.lang.String; で使用できますか? System.out.println("\n" + length(person.getName()) + "\n" ); シンボルを解釈できませんとのことで表示されません。
>>592 メソッドの呼び出し方
out のクラスで定義されている場合: out.println();
str のクラスで定義されている場合: str.length();
person.getName() が返すインスタンスのクラスで定義されている場合: person.getName().length();
ただ length と書いた場合、その文を書いたメソッド (ex. static void main) を定義しているクラス (ex. class Test) に
同名のメソッド(ex. static int length()) が呼び出される。
そんなもの定義されていないとき「シンボルを解釈できない」云々と怒られる。
594 :
デフォルトの名無しさん :04/02/06 11:13
>>593 わかりやすく丁寧かつ迅速な解答ありがとう御座います
解決いたしました
556です。 arraylistを使用してオブジェクトを格納したのですが、 オブジェクトを取り出し、オブジェクトの変数を使用したいのですが できません。。。教えてください。。。
フリーのJavaVMってどんなのがあるの?
597 :
デフォルトの名無しさん :04/02/06 13:48
互換性のない型 検出値 : java.lang.Boolean 期待値 : boolean なんで怒られてるのかわからないです... 教えてください
>>595 キャストする。
ArrayList list = new ArrayList();
list.add("例えばStringのインスタンス");
Object obj = list.get(0);
String str = (String)obj;
str.charAt(0); // これは '例' になる
もちろんこれでもよい
String str = (String)list.get(0);
599 :
デフォルトの名無しさん :04/02/06 14:12
>>597 booleanは型、Booleanはクラス。
Boolean b_o = Boolean.TRUE;
boolean b = b_o.booleanValue();
みたいに使う。
dosからは実行できるのにieからは実行できない なぜだー
>>600 MS JVMみたいなJava1.1の環境で動かしたいなら
javac -target 1.1 Hoge.java
でコンパイル汁。
これもいい加減FAQかも。
..."sage"ってコテハンなんだよ、俺は
606 :
デフォルトの名無しさん :04/02/06 16:18
JDK はソース公開だし
ソースを.txtでうpしてそれを添削してもらうと言うのはスレの趣旨に反するでしょうか?
610 :
デフォルトの名無しさん :04/02/06 16:35
>>609 それはお前が何が問題なのかわかっていないと言うことか?
だとしたら、問題をまず見つけることから始めるがいい。
すでに問題はわかってるが、ソースを見せた方が(お前にとって)手間が少ないと言うなら、それは考え違い。
(ここで質問するレベルの)人のソースなんて誰も見たくないから、答えてくれる人はほとんどいないだろう。
要点だけを聞くようにしろ。
要点がわかってないのに、ソースさえ貼らないまま、 わけ分からん質問する奴よりはましだがな。 しかし長たらしいソースは却下。 つまり「要点」すら分からん奴は、 長たらしくならざるを得ないものを目標にしないでほしい。
アニメーションで速く動く物体と遅く動く物体をそれぞれclassで作って 二つを同時に走らせたいのですが、どうくっつけたらいいのかよくわからないので スーパークラスで強引にまとめようとしたら Xは abstract として宣言する必要があります。run() を X で定義しません。 というエラーが出ました。 わかることはこのくらいなのですが、これで伝わりますか?
>>615 要点がわかってないな・・・きっと
「動く物体」それぞれのスーパークラスを設計するのはアプローチとして正しいが、
二つ同時に走らせるためには、別にそれをする必要は無い
「くっつける」意味は無い
例えば、それぞれのインスタンスからスレッドを作ればいいだけだ
もっと言うと、「物体」と「動く」といっしょのクラスにするんでなくと 「物体」と「動き」と「動かす」をそれぞれ別のクラスにするといいと思うんだが・・・ ソースも見ないでぐだぐだ言っても仕方ないのでここで終わり
>>615 class SuperClass implements Runnable {
}
class ButtaiA extends SuperClass ....
としてるんだったら、
class abstract SuperClass implements Runnable {
}
と宣言する。SuperClass が実装しなければならなかった run メソッドは、
サブクラスで宣言しさえすればいい。その代わり SuperClass そのものはインスタンスを作れない。
>>615 動くクラスを作る
速いか遅いかはコンストラクタで値与えてあげるとか
うーん・・・スレッドにコンストラクタですか? やっぱり勉強不足ですね・・・ アドバイスを参考に見直してみます。
>>620 強引にまとめる前に、どうやって別々に動かすかを聞いた方がよかったかもな。
今となってはむごいソースになってそうな予感。
「アニメーションで動く物体をclassで作って走らせる」ことは出来るのか?
623 :
デフォルトの名無しさん :04/02/06 20:52
>>514 丁寧な答えありがとうございました。
>>513 VB6年といって自慢しているわけじゃねーぞ、俺たち好きでPGしているわけ
じゃない。仕事で技術計算の必要性があるからやっているんだ。Javaという
ものの効用性を確認して何が悪い、てめー気をつけろ。
6年もやってて(ry
626 :
デフォルトの名無しさん :04/02/06 22:48
ResultSetのレコードカウントを返すメソッドって ないんですか?
すいません。 調べてもなさそうだったので、 while文でいけました。 お騒がせしました。
・ResultSet#last()してからResultSet#getRow()の戻り値を取得 (結果セットの型がTYPE_FORWARD_ONLYの時はだめ) ・事前にcount(*)するSQLを投げて数える。 …とか書いてたらもう解決したのね…
>>620 作り直した方がいいね。物体と動きで分けなさい。
物体と動きをくっつけるんだよ。
>617の方法でいいと思うよ。
自分なりに調べて頑張ってみます。いろいろありがとうございました。
631 :
デフォルトの名無しさん :04/02/07 00:47
>>629 620じゃないんですが
オブジェクト指向とか良く判ってないんで、
物体クラスに、動くメソッドを用意するのかと思ったんですけど。
物体クラスと動きクラスを用意して、その後どうするものなんでしょうか?
できた。
>>624 うわ、URLまでありがとうございます。
634 :
デフォルトの名無しさん :04/02/07 01:23
特定のフォルダ内のの指定した拡張子だけを読み込みたい時は どうすればいいのでしょか? またそのときにサブフォルダも調べたい時はどうすればいいのでしょうか?
>>634 拡張子は、FilenameFilterを調べれ。
>>628 どうもです。そういう手もあったんですね。
ありがとございます。
SwingのJTabbedPaneの背景色について教えてください。 setBackground()で背景色を付けたのですが、タブの耳の部分だけ色が付かず、 デフォルトの灰色のままになってしまいます。 何か特別なつけ方が必要なのでしょうか? よろしくお願いします。
639 :
デフォルトの名無しさん :04/02/07 02:08
BirdとfBirdがお互いに視界に入らなくていいなら、これがやりたいこと? 入るようにするならBirdとfBirdをひとつにすべし。int speedとかの値を持たせる。
641 :
デフォルトの名無しさん :04/02/07 05:03
SwingであるContainer以下のコンポーネントのフォントを一括して指定したいのですが, 今は以下のようなコードを書いています. もしかしたら,L&Fなどを使えばもっとスマートな方法が あるかも知れないと思い質問しました. ご存知の方,教えて下さい. private static void setFont(Container target, Font font) { for (int i = 0, n = target.getComponentCount(); i < n; i++) { Component child = target.getComponent(i); child.setFont(font); try { Container pane = (Container)child; if (pane.getComponentCount() > 0) setFont(pane, font); } catch (ClassCastException e) { continue; } } }
×SwingであるContainer以下 ○Swingで,あるContainer以下
L&Fを使ってできるのかどうかはおいといて Container でキャストして失敗したら投げられる例外をキャッチするという コーディングは最悪です。 こういう場合は instanceof を使いましょう。
instanceofについて
instanceof演算子を使いたくないという意味不明な私の癖です.
というのもJava3DのPoint3dクラスだったと思いますが,
大体以下のような書き方がありまして,
計算速度が重視される3Dな世界でtry...catch構文の方が速いのかな,
と勝手に解釈した背景があります.
public boolean equals(Object obj) {
try {
Point3d p = (Point3d) obj;
return x == p.x && y == p.y && z == p.z;
} catch (ClassCastException e) {
return false;
} catch (NullPointerException e) {
return false;
}
}
もし,よろしければ
>>641 の書き方が悪い理由も合わせて
教えてもらえると嬉しいです.
>>644 自分で調べて見ればすぐわかりますが
例外が投げられると投げられない場合に比べてかなり遅くなります。
JIT の最適かも働きにくくなります。
Point3d の場合は
・equals は非常に何度も呼ばれる可能性がある
・しかも引数は Point3d である確率が非常に高い
という特殊な事情があることを考えないといけないでしょう。
例えば int[] is = new int[1000]; があるとき 添え字を毎回チェックする for (int i = 0; i < 1000; i++) { ... } の方が添え字をチェックせずに例外を使ってループを打ち切る try { for (int i = 0;; i++) { ... } } catch (ArrayIndexOutOfBoundsException e) { } よりもだいぶ高速です。
>>631 >>629 じゃないんだが、State/Strategyのパターンかな?
動きはアルゴリズムを定義したクラス。物体はその動きを持って、自分の位置を知るクラス。
アプレット: 物体をいっぱい動かそう。物体を10個作るか。
アプレット: 同じ動きじゃ詰まんないし、5個にはこの動き、残り5個にはこの動きをやる。
アプレット: おい物体ども。動け。そして、どこにいるか教えろ。
物体ども: えーっと、私の中の内なる動きクラスよ。次はどう動くべきですか?
物体ども: アプレットさん。心の声が聞こえました。私はx, yに行きます。
アプレット: よっしゃ。定期的に聞くぞ。俺が描画しといてやるからな。
アプレット: なんかユーザが飽きたみたいだ。物体ども、今度はこの動きクラスを食ってみろ。
物体ども: ああ、今度はもっとラジカルに動ける気がします。
物体が動きメソッドを持つと、最初から動きに合わせて違う物体を作らないといけない。
途中で動きを変えようとするなら、作った物体を消して、新たに作らないといけない。
動きクラスを切り替えてやる方法なら、物体は常に同じで楽できる。
>>645 で,すごく納得出来ました.
分かりやすい説明ありがとうございます.
>>620 そうだな。自分でやるのも大切だ。漏れは今日からスキーだ。
Applet { Mover[] void paint } Mover { private MovingStrategy public void setMovingStrategy public Position nextPosition() { return movingStrategy.nextPosition(); } } interface MovingStrategy { Position nextPosition } 恐る恐る書き込むけどこんな感じ? これにStateパターンか・・・俺には無理
>>647 なるほど~ イメージできました
判りやすい説明、ありがとうございます
物体クラスは同じで、違う動きを実現できるようになるんですね
ここはオブジェクト指向に反する書き方を教えるんですね…
653 :
デフォルトの名無しさん :04/02/07 13:02
>>631 なんのためのポルモルフィズム・・・
俺は基本的に自分のインスタンス変数(属性)に関わることは自分でやらせる
ように書く.
そうすると綺麗に書ける.
まず,オブジェクト指向の前に,属性や属性値などの勉強をした方がいいよ.
つか、
>>615 って、そもそも二つに分ける必要があるのか?
class Buttai1にspeedフィールドを切って、
固定速度でいいなら、それに好きなスピードを初期設定すればいいだけなんじゃ?
後の動作はmove(direction)とでも何とでも適当なmethod書いて、
その位置をgetX, getYとでもして、上に返すだけでは?
ついでに言うと、俺も「動作」クラスはないと思うんだけど。
ばらばらの動作パタンを設定するんなら、その動作を定義しているmothodを、
オーバーライドする、サブクラスをきる。
ただ。
>>647 が言うデザインパターンの有効性が理解できない人間の言うことだ!
>>654 何でもかんでもデザパタ使えばいいってもんでもないけどな。
とGOFの一章に書いてあったりするわけですが。
設計時に振る舞いのカスタマイズを可能にする方法として
継承とオブジェクトコンポジションとの2種類の方法があり、
それぞれ利点・欠点があります。
継承の場合はクラスの数が(多少)減るとか、
delegationメソッド(
>>647 の「私の中の内なる動きクラスよ…」のくだり)を
わざわざ書かなくていいというメリットがあります。
オブジェクトコンポジションの場合は、実行中に切り替えができる、
継承により余計な振る舞いを引き継ぐ必要がない、というメリットがあります。
今回の場合、実行中に振る舞いを変化させたいと思ったら
オブジェクトコンポジションにすべきでしょう。
曲線軌道を描いて動くある物体の動きを、インスタンスはそのままで
カクカクした直線軌道に変更、というのは、継承を使っている限り実装が難しいですね。
もちろんパラメタ指定で曲線が直線に変えられるようにしておく、という方法を使えば
不可能ではないですが、事前にカスタマイズの範囲を想定し狭めるという点で
非現実的で不便です。
ここで出てきたState/Strategyパターンは設計に関するのパターンなので、
分析時とは異なる手法を使うこともあります。
振る舞いやアルゴリズムをクラス化、という考え方は、
ユースケースから抽出された概念オブジェクトだけを扱っている分には
なじみにくいでしょう。でも設計時には便利なパターンなので覚えると吉。
まぁ、継承は伝家の宝刀と考えるべき。 あまり抜くものじゃない。
あと、コメントの「単項演算子には非対応」ってのは、嘘です
>>658 設計に関しても問題点が多すぎるが
そもそもなぜ一つのファイルにまとめようとするのか?
661 :
デフォルトの名無しさん :04/02/07 17:24
あの~、文字列をメソッドに変える方法ってありますか? obj.method( "string()")って感じで・・・
>>661 無い。
obj.getClass().getMethod("string", new Class[0]);
>>660 実はやりかたがわからない('A`)
ぐぐってもさっぱり。
内部クラスを別のファイルに追い出すことってできるんですか?
それともこの実装が糞過ぎるだけか
>>663 Java は C++ 違って「1 クラス 1 ファイル」が基本。
class ABC だったら ABC.java というファイルに書け。
>>664 いや、それはわかってるんだけど。
その1クラスの中で内部クラスを20個くらい定義してるせいで非常に長くなっている訳です
だから、その内部クラスをそれぞれ別ファイルで定義するのが基本。 Operation.javaとかExpression.javaとか
軽く目を通してみたけど,おもわず目が点になるようなソースコードだ・・・。
abstract classのstatic make()を呼ぶのね。。。
>>666 でもそれだとスコープが変わっちゃわない?
はっ、もしかしてpackageってそのためにあるのか(;´Д`)
c++でnamespace使ったこと無い?
最近は package 使わんでメンバ型てんこ盛りにするのが流行ってるのか?
672 :
デフォルトの名無しさん :04/02/07 18:27
JavaAppletについての質問です。 アプレットがブラウザ上で表示されません。 コンパイルもちゃんと通り、アプレットビューアでも問題なく動作します。 クラスファイルは同ディレクトリ上にありますし、HTML側も間違っていません(Swingは使っていません)。 しかし、ステータスバーには「load:class Rectgame not found」(Rectgame.classという名前です)と表示されてしまいます・・・。 設定の違いかと思い、ウェブにアップし友達に見せても同じ結果が得られました。 なぜだか全く分かりません・・・。
>>672 javac -target 1.1 applet.java
とかしてコンパイルせんと MSJVM でも動くクラスファイルは生成できんよ。
>>668 駄目なのか(´・ω・`)
なんでこんなことになったか説明します。
最初は new Expression(式) で生成できるようにしようと思ったんですが、
実際に式を表現するのはExpressionのサブクラスである Operation であったり Constant であったりするわけです。
ということは Expression のメンバとして、Expression への参照(って言うのか?)を持つ必要があると。
でも、サブクラスじゃそんな変数使わないんですよね。 Constant なら値を表すのに double だし、
Operation は Expression への参照を2個持つ必要があるし。
↓
ファビョーン
↓
abstract classのstatic make()を呼ぶ(・∀・)
っていうかこの場合どうするのが正解なんでしょうか。
最初にいいところから。Expressionとそのサブクラスの関連は面白いと思った。 ただ、Expressionが式と計算機の2つの役割を持っていて、詰め込みすぎているね。 Expression クラスと Calcurator クラスに分けて、字句解析等の役割を Calcuratorクラスに移した方がいいと思う。 Operation.isOperator()も、字句解析のためのメソッドだからOperatorよりは Calcuratorに持たせる方がいいんじゃないかな? それからstatic使いすぎ。make()とかvariable_tableはstaticである必要はない。 39行目に v.variable_table=variable_table; なんて意味のない代入してるし。 機能の振り分けをもう少し練れば、スコープをどうするとか悩むことが少なくなりそうな予感。
>>675 > 最初にいいところから。Expressionとそのサブクラスの関連は面白いと思った。
構文木の独自版でしょ。珍しくも無い。
設計の話で言えば、構文解析部分のアレなので拡張が面倒臭そうだなと思った。
>>674 Expression に public static Expression parseExpression(String) とか作れば?
>>673 動きました!本当にありがとうございました!
>>677 そう思って public static Expression make(String) を実装したところ
>>668 にプクスされたわけだが…
ところで、Function と OneArgument 及びそのサブクラスとの関係はどんなもんでしょう。
ネストし過ぎかな? package使うともっとなんとかなるんだろうか。
>>675 × Calcurator
○ Calculator
>>668 の方ががおかしいのでその点は問題ない。
しかし根本的に問題が山積している。C++ もホントはろくに使えないだろ?
>>679 関数が増えるごとに Function のサブクラスが増えるのか…
まぁ、計算器程度だったらいーんじゃないの?
684 :
デフォルトの名無しさん :04/02/07 19:34
getText()メソッドで受け取るStringの型を int型に変換し、演算したいのですが、どうすれば変換できますか? (int)だと変換できない型と出てしまいます・・・
>>688 そうか?
おまえのほうがおかしいと思うが
まあそもそも根本的な設計の問題なのだが
Cから入ったらあんなコードになるのも納得できる …か?
>>684 とりあえず、CやC++を出来ていたからって、Javaを全く勉強しないで入るのはやめてくれ。
いや、684がそうとは限らないが、そういう実例をたくさん見てきたから。
設計にそういうのが入ってくると辛い。
685 名前:デフォルトの名無しさん[sage] 投稿日:04/02/07 19:43
>>688 そうか?
おまえのほうがおかしいと思うが
まあそもそも根本的な設計の問題なのだが
688 名前:デフォルトの名無しさん[sage] 投稿日:04/02/07 20:19
>>685 俺は毎日風呂に入るよ。
>658 >C++しか知らんので設計の方向性がこれでいいのか不安。 正直、Javaソフトウェアとしての方向性がマズいと思う。 2chという場に晒してアドバイスをもらおうとした勇気と向上心は讃える。
C++しか知らない、ってあたりが既に嘘っぽい。 または知っている つもり だとか、文法だけは知っているとか。
694 :
デフォルトの名無しさん :04/02/07 22:33
引数に void aa(final String aa) こんな感じでfinalをつけてるのを見かけたのですが こうすることによってどのような効果があるのでしょうか?
>>694 そのまま,メソッド内でaaの参照先は変わらないという意図なんだろうけど,
自分の場合,
void aa(final double[] aa)
この場合,aaの配列の中身も変わらないという意図を込めてる.
一人でやってるコーディングしてるから,俺規約くらいで.
引数はそのメソッド内で変更されることが無くなる。 でもStirngの場合意味がない。
697 :
デフォルトの名無しさん :04/02/07 22:44
テキストフィールドやボタン等を paintメソッドで描かれたグラフィックの上に表示させることはできますか? どうしても隠れてしまいます。
>>695 ,696
ありがとうございます。
なるほど、使いようによっては
後からコードを読む人にとって
便利なのですね。
>>697 テキストフィールドやらボタンやらのある領域を描画しないで
テキストフィールドやボタンの paint を適切に呼ぶ。
>>699 696の説明は思いっきり間違ってますね。
>>694 > コードを読む人にとって便利
思いっきり間違った認識です。
695の言うとおり参照先が変化しないという明確な意味があります。
(695の意図とは異なり final double[] aa の配列の中身は final でないですが
695はその点を意識しているのでまあいいでしょう。
特にメソッド内でインスタンス化する無名クラスに
変数を渡したい場合なんかは final である必要があったりします。
704 :
デフォルトの名無しさん :04/02/07 22:58
Fileでファイルを作って PrintWriterでコマンドを書いて Runtimeで実行しても端末の環境によっては 実行されない場合があります。 ファイルがディスク上に出来上がるタイミングって 少し時間がかかるのですか? 出来上がる前にRuntimeが実行されたのでしょうか?
>>696 は認識が間違っていると言うよりも、只の言葉足らずな気がする。
>>696 はStringが不可変クラスであることは知ってるが,
final宣言されたインスタンスのフィールドはfinalではない
という点が説明(認識?)不足.
>>704 PrintWriterのインスタンスでcloseもしくはflushを
Runtime実行前に呼んでない可能性がある
>>704 File#createNewFile() は atomic のはず。
PrintWriter でコマンド書いてって部分が理解できん。
>>707 その部分は何度も確認したのですが、ちゃんと
close()などをしてても起こってしまいます。
>>708 ごめんなさい。
atomicのはずといわれても当方の勉強不足で意味がわかりません。
よかったら詳しく教えていただけないでしょうか?
>>656 なるほど、インスタンスの生存中にその動作を切り替えようとする場合は、
>>647 の仕組みが有効なんだ。
うっかりためになってしまった。
712 :
名無し@沢村 :04/02/07 23:31
これからSwingを使ったJavaアプリケーション作成を学ぼうと思っています。 参考に出来るオープンソースのものを教えていただけないでしょうか。 特にGUI部分の設計がよくわからなくて困っています。
atomicを見てきました。 atomicの意味するところはなんとなしに理解したつもりですが、 これが私の問題とどのように結びつくのでしょうか。 また708さんのおっしゃりようですと、 そもそも私のやりかたそのものに問題があるようですが、 他に最適な手段があればご教授をお願いします。
>>716 もうちょっと自分で考えるか、調べるかした方がいい。
>>715 オープンソースだから綺麗に書いているとは限らない罠
719 :
デフォルトの名無しさん :04/02/08 00:06
Servlet で、セッション接続中のユーザを調べる方法はないでしょうか?
>>716 そもそも何でファイルに書き出す必要があるんだよ!
>>720 もうしわけない。少し落ちて付いて聞いていただきたい。
コマンドが何十行もあるので
バッチファイルを作って一括で処理しようと思ってたのです。
1行ずつexec(String command)をやってたら、
プロセスがすごいことになるなーって思って。
だけど、もしかしてexec(String[] cmdarray) で事足りたりするのでしょうか・・・。
>>719 サーブレットコンテナの提供する認証(BASIC、DIGEST、FORM)を使うのなら、
javax.servlet.http.HttpServletRequest#getRemoteUser()が使える。
723 :
デフォルトの名無しさん :04/02/08 00:29
厨な質問Deth。 オンラインのhtmlファイル上のボタンからservlet(A.classファイル)を呼び出す時に htmlファイルとA.classファイルがtomcat配下にあれば <a href='/netjv/servlet/A'>(←htmlファイルのソース) でA.classが稼動しますよね。 で、これってそもそもtomcat配下でしか動かないんでしょうか。 たとえばYahooGeocitiesの自分のホームページで動かしたりとかは できるんでしょーか?
Runtime#exec()でn個のコマンドを実行するにしろ、 Runtime#exec()でバッチファイルを実行して、その中でn個のコマンドを実行するにしろ、 n個のプロセスができることに変わりはないと思うが。 むしろ、バッチファイルの分1つプロセスが増える。
>>724 コマンドごとにプロセスが発生してるとは思いませんでした。
実際バッチファイルに書いてるのは
ローカルにフォルダを作って
ftpでサーバにアクセスして
任意のディレクトトリからフォルダに
ファイルをダウンロードする処理なんです。
これらをexecで実行する方法でやってみます。
>>725 カレントディレクトリが違うとか、パスが通ってないとか。
Runtime#exec(String[], String[], File)を見ろ。
で、Runtime#execが返すProcessの標準エラー出力をどっかに出して、
バッチに書いたコマンドの中でエラーになってないかも見た方がいい。
>>723 Servletの仕組みを理解していれば、答えは自ずと理解できる。
初心者だけじゃないけど勝手な自分の思い込みで不適切な最適化をやるやつは もっといろいろ調べる、あるいはもっといろいろ試してみるべきだ。
>>727-728 その辺はケースバイケースでいろいろな事情があるだろうから、
「javaでかけ!」は気の毒な気がする・・・
うーむ確かに。オープンソースプロダクト使用禁止という 謎制約を課せられたプロジェクトもあるらしいからな。
ftp プロトコルなんてそんな大したもんじゃないから再実装してもいいじゃない
>>729 サーバにトム君が入ってることが前提なのですね
再実装なんてめんどくせぇ…。使えるものは使おうぜ。 新しいコードはバグの温床になりかねないし。
>>734 つかまあ、JSP/Servletエンジンがあるかないか、ってことだよね。
別にtomcatである必要はないよね。
apacheだけでは、相応のモジュールが組み込まれてないと、
phpもperlも動かないのと同じ理屈で。
時に話は戻るけど、ファイルに落として、ストリームもちゃんとクローズして、
それでも、そのファイルの中身を実行することが出来ない、ってのは、
当然ありうる話なのかね?
なんか出来てもよさそうなんだが。
今基本情報技術者の勉強しています。 JAVAを言語のとして選びました この資格受かった人に聞きたいのですが、この資格に受かる程度はJAVAの基礎がわかったぐらいですか?
基本情報技術者を受かる程度にJAVAがわかったくらい。
_| ̄|○
>>737 ポリモフィズムがかろうじて分かってる人レベル。
Stringの比較はString#equals()を使えとか賞もない問題も出題されたり。
C#がを知っていて、 「Stringの比較はString#equals()を使えとか賞もない問題」が分かるくらい。 _| ̄|○
>>737 普通の人はどの言語でやっても受かります。
743 :
デフォルトの名無しさん :04/02/08 08:52
JavaAppletとServletを繋げてWebページ作ったのですが これって、あまり使われてないんですかね? やり方頑張って探したけどなかなか見つからなかったものでして あと、 この接続(?)は、Appletの使い道が広がったって事で,Javaを選択する理由になりますか? 変な質問ですいません。
>>736 >時に話は戻るけど、ファイルに落として、ストリームもちゃんとクローズして、
>それでも、そのファイルの中身を実行することが出来ない、ってのは、
>当然ありうる話なのかね?
ファイルサイズがでかければありえなくも無い話
>>743 このところのリッチクライアントの流れを考えるといいと思うけど、
そもそもApplet自体が下火だからなぁ…
深夜にもかかわらず、お返事いただきありがとうございました。 そもそも実行手段そのものにも問題があったようですね。 で、話を戻すのですが、 736さんも書いてますが、 ちゃんとflushもcloseもしてるのにファイル実行できないって そんなイレギュラーな問題でもない話なんでしょうか。 バッチコマンドを数行書いただけなので、 そんなにファイルサイズはでっかくないんですが・・。
>>747 うんにゃ。すげーイレギュラーだ。
動かない理由を、ファイルがRuntimeで実行する以前に出来ていないからだと断定する理由は?
>>726 は試した?エラーが出たりしてなかった?
>>748 726さんの方法は明日試してみます。
ソースを会社に置いてきちゃったもんで・・・。
ファイルがないと判断したのは、エラーでそのようなことが
かかれてたからです。
createFileがatomicだって、誰かが書いてるのになぁ
ああ、そうか。 ファイル作成に失敗して例外吐いてるんじゃないか?
752 :
デフォルトの名無しさん :04/02/08 12:14
今、SwingでGUIを作成してるんですが、 何かいいレイアウトマネージャはないでしょうか? GridLayout,BorderLayout,FlowLayoutなどを 入れ子にして使ってるんですが、結構大変なので。 よろしくお願いします
今atomicについて勉強してるんですが、 ひとつのスレッドしか制御できないってことは わかるんですが、それが私の場合どのように影響してるかって ところまで結びつかなくて・・・。 も少し調べてみます。
>>751 とは言うものの、彼はflushもcloseもちゃんとできたと言ってるし、
さすがにファイル作成に失敗してるわけではなさそうな。
>>753 なんか勘違いしてそうだが、「原子性」とか「atomicity」でググってみろ。
File#createNewFile()が終わったら、
そのときにはファイルは「できた」か「できなかった」かのどちらかだ。
「しばらく経ってできた」って選択肢はない。
JavaSDK SE1.4.2_03 をインスコしました。 HelloWorldのサンプルプログラム等がコンパイルできるのを確認したので、 今度はネットから適当にJavaAppletのソースコードを拾ってきて、コンパイ ルしてみました。コンパイル時にエラーは出ませんでした。 いざアプレットを実行してみようと、適当に書いたHTMLをブラウザに表示さ せたのですが、"load : class test not found"とステータスバーに表示され るだけで、実行されません。HTMLの方には、(W3Cの勧告には従っていな いけれど)間違いは見あたりません。アプレットのコードに問題があるのか とも考え、様々なところからDLしてきて、コンパイルしてみたのですが、ど れも実行されませんでした。ところが、ほとんどのサンプルに付属してい る中間コードは、なぜか実行されるのです。もしかして、アプレットをコン パイルするためには、何か特別な準備が必要なのでしょうか? 色々と 検索してみましたが、見つかりませんでした。 一体何が悪いのか、どうしたらよいのか、教えていただきたいと思います。 なお、当方の環境は、WinMe・IE6.0です。
classをhtmlと同じフォルダに置いてる?
>>757 とりあえず
>>673 1.2.2とか使ってコンパイルすれば、普通にMS VMでも動くようなんだけど。
作法のレベルだけどクラス名testって全部小文字にするのやめれ。
761 :
デフォルトの名無しさん :04/02/08 13:18
>>759 ありがとうございました! きちんと実行されるようになりました!
>>760 なるほど、そうなのですか……知りませんでした。
作法や文法についても、これからじっくりと学んでみたいと思います。
java全然知らなかったが、Eclipce 使ってたら 細かい作法まで日本語で指摘されるんで 覚えちゃったよ
767 :
デフォルトの名無しさん :04/02/08 15:30
継承とsuper()関係で 親クラスと子クラスのコンストラクタの引数は 親クラスが引数有りコンストラクタしかなければ 子クラスも必ず同じ引数をもつコンストラクタを実装しなければならないのでしょうか?
768 :
デフォルトの名無しさん :04/02/08 15:31
770 :
デフォルトの名無しさん :04/02/08 15:35
interfaceの使い道について教えてくれ。 いまいちわからん
>>770 全然関係ないクラスに同じような付加機能を付けてそれらを統一的に処理したいとき。
772 :
デフォルトの名無しさん :04/02/08 15:42
>>771 いいたいことはわかるのが、必要なのか?
サンプルを見せてくれ。
>>769 なんで?
親が引数有りコンストラクタ持ってるのなら
子供はsuper()が使えないから、引数有りコンストラクタを実装しなければ
コンパイルエラーになるんじゃないんだっけ?
>>771 その説明だと、なくてもいいって話になる
>>773 的はずれな煽り入れてないで質問に答えてやった方が有益だと思われ。
>>770 使う側にはインタフェースだけ提供して、
実装(処理)は裏で何やってるかわからなくしたい場合。
JDBC APIなんかそうだね。使う側には共通のAPIだけ提供して、
実装はDBMS固有のことをやっているが、使う側にはそれを
意識させない。
Servlet APIもそう。
インタフェースだけ仕様として決めてあって、実装は各コンテナ任せ。
使う側はコンテナ内部で何をしているのかは意識する必要がない。
インタフェースだけ知っていればよい。
継承のかわりにインターフェイス使う。
多重継承の代わり、とかじゃなくて?
継承に縛られるよりはインターフェイスの方がいいでしょって意味。
779 :
デフォルトの名無しさん :04/02/08 15:55
多重継承の方がよくないか?
多重継承は継承ではないと強く言いたい。
>>779 AppletとThread継承したときに、
start()ってどっちのが呼ばれるんだ?とかさ。
>>774 俺も773のとおりだと思ってたけど
違うんだっけ?
多重継承の代わりと言っている奴はオブジェクト指向を勉強し直せ
785 :
デフォルトの名無しさん :04/02/08 16:02
Javaには多重継承あるけど けど正式にはインターフェース多重継承があるっていう んで禁止されているのは実装多重継承 といったほうがええ
何がなんだかわからんくなってきた。
>>767 子クラス側のコンストラクタを同じ引数にする必要はなくて、引数が無くてもいい。
中でちゃんと親のコンストラクタをsuper(親の要求する引数)で呼んでやれ。
>>785 あるの?
extends Class1, Class2? みたいのと同義のが?
つーことで、extendsを継承する、 implementsを実装すると呼べば混乱も少なくならない? 多重継承は不可。インターフェースは複数実装できるということで。
790 :
デフォルトの名無しさん :04/02/08 16:08
ResourceBundle.getString()でプロパティファイルから読み込むとき、 スペースを含んだ文字列を渡すと、MissingResourceExceptionが発生してしまいます。 どうしたら言いのでしょうか?
どうでもいいよ。大事なのは定義よりも成果物。
extendsを拡張と呼び続けてはや、3年。 ・・・まいた種は地中で朽ちたらしき。
サンプル interface hoge { public void foo(); } class bar implements hoge { public void foo() { System.out.println("bar"); } } OK?
インタフェースはインタフェースを多重継承できるよ interface hoge extends aa, bb, cc { } とか。 ちなみに、public も abstract も省略可。
>>790 ちゃんとエスケープしてるか?
key\ with\ spaces=value
>>796 でも、interfaceじゃ、中身全部abstractだから、classの多重継承とは意味違うんじゃ。
800 :
デフォルトの名無しさん :04/02/08 16:56
あげ
802 :
デフォルトの名無しさん :04/02/08 17:00
>>801 『Java言語で学ぶデザインパターン入門』結城浩【著】?
803 :
デフォルトの名無しさん :04/02/08 17:08
質問です。 あるstatic変数を持ったクラスがあります。 これをApplicationServerの複数のアプリそれぞれにjarで配置して 各アプリがそのクラスのstatic変数にアクセスした場合 やはり変数は複数のアプリを通して同一の参照になるのでしょうか? それとも値は各アプリ内で別々に持たれるのでしょうか?
804 :
デフォルトの名無しさん :04/02/08 17:12
>>803 static変数は、そのクラスがロードされているクラスローダにつき一つ存在していると
考えてください。クラスローダの階層構造はアプリケーションサーバの実装によって
異なるので必ずこうだ、ということは言えませんが、Webアプリケーションそれぞれに
jarファイルを配置してあるのなら、別々のクラスローダにロードされる可能性が高い
でしょう。
>>805 なるほど。そうなんですか。具体的な解説どうもです。
同じVM上なら一つかと思っていました。
そう考えるとアプリ外においた一つのjarファイルを複数アプリから使用する形にした場合は
同一の参照になるのでしょうか?
>>798 Chinkoクラスを作ったとしよう。
これは、体の一部なので、BodyPartクラスを継承した。
BodyPartクラスには、栄養を送ったりする基本的な機能が備わってる。
ある日、君は手でこれをさすると気持ち良くしたら面白いと思った。
そこで、Handクラスにsasuru(Chinko)を実装した。
さらに次の日、Chikubiだってさすって気持ち良くしたいよな、と思った。
でも、Hand#sasuru()はChinkoを引数にとる。このままでは、
sasuru(Chikubi)を作らないといけない。だが、そうなったらMankoの立場はどうなる?
そこで君はKimochiyokunaruインターフェースをChinko,Chikubi,Mankoに実装することにした。
そしてKimochiyokuraru#kimochiiの実装をそれぞれのクラスにさせることで、
Chinkoならデカく、Chikubiなら硬く、Mankoは濡らすことにした。
全て、Hand#sasuru(Kimochiyokunaru)のおかげでわけ隔てなく愛撫できるようになった。
もちろん、Shita#nameru(Kimochiyokunaru)を加えることで、君のテクにもバリエーションが出る。
後日、自分が以外と敏感だと知った君が、ShiriやAnalにも実装させることにより、
同じShitaやHandでイカせることができるようになるだろう。
MankoとAnalの両方にInsertableインターフェースを用意しておくのもいい考えだ。
マニアな人々は、Chinko#insertTo(Insertable)により、両方への挿入が可能となる。
おっと、Mouthにも当然実装させておくべきだね。
最後に、ChinkoにはComparableも実装しておくことだ。
彼女に、君のが前彼のモノより長いことを知らしめるためにもね。
では、楽しいオブジェクト指向ライフを!
//インターフェイス public interface Interface { public void foo(); } //実装クラス1 public class Class1 implements Interface { public void foo() { System.out.println("class1"); } } //実装クラス2 public class Class2 implements Interface { public void foo() { System.out.println("class2"); } } // 実装クラスを使うクラス public class Test { public static void main(String[] args) { //↓この部分を文字列でクラス名指定したインスタンス作るようにすれば動的に実装クラスを Interface class1 = new Class1(); Interface class2 = new Class2(); class1.foo(); class2.foo(); } }
途中で押しちゃったよ・・・ //↓この部分を文字列でクラス名指定したインスタンス作るようにすれば動的に実装クラスを切り替えられる。 例えばDBのConnectionを取得する方法としてデータソース使ったりフリーのCnnectionPoolのライブラリ使ったりと 簡単に切り替えられるようにしたい場合、 定義ファイルに使用する実装クラスの型を定義(Class1、Class2等) 生成するインスタンスをその定義ファイルの文字列を元に生成すれば定義ファイル書き換えるだけで ソースの修正無しに使用するクラスを簡単に切り替えられる。 また新しくClass3を作ってそれを使うこともできる。 807の書いた方法なら 引数の型をインターフェイス型にすることによって複数の型を一つのメソッドで処理できる。
>>808 それ、別にInterfaceはインターフェースじゃなくて良いんじゃない?
途中で押しちゃったよ・・・ //↓この部分を文字列でクラス名指定したインスタンス作るようにすれば動的に実装クラスを切り替えられる。 例えばDBのConnectionを取得する方法としてデータソース使ったりフリーのCnnectionPoolのライブラリ使ったりと 簡単に切り替えられるようにしたい場合、 定義ファイルに使用する実装クラスの型を定義(Class1、Class2等) 生成するインスタンスをその定義ファイルの文字列を元に生成すれば定義ファイル書き換えるだけで ソースの修正無しに使用するクラスを簡単に切り替えられる。 また新しくClass3を作ってそれを使うこともできる。 807の書いた方法なら 引数の型をインターフェイス型にすることによって複数の型を一つのメソッドで処理できる。
あ、ゴメソ。そういうことね。
>>810 確かに適当な実装しててもいいね。
よく見たら多重継承と絡んだ話だったのか。スレ汚しすまそ
そういう意味じゃ、
>>807 も全パーツがBodyPartを継承してることを前提に読まないと分からんな。
>>807 は内容はいいと思うんだがいかんせん読みづらいなw
>>807 俺は深く読み込もうとすると、口の中でぼそぼそ文章を読みあげる癖があるんだ。
迷惑な文章書かないでくれ、誤解されただろ。
817 :
デフォルトの名無しさん :04/02/08 18:17
>>807 例がわるいですねw
しかし、interface 難しいな…
>>817 クラスを継承するのは機能(メソッド等)をそのまま引き継ぐため。
インターフェイスを実装するのは違う型のものを同じように扱えるようにするため
(もしくは呼び出し元のソースの修正無しに機能を差し替えられる)
と思っておけばいいんじゃないかな。
そういう意味では複数のクラスを多重継承して複数のクラスの持つ機能を自身で持つということはやっぱりできない。
インターフェイスは自身が何かをすることができる機能を持つためではなく
自身が他のクラスと同じように扱われるための機能を持つってことではないだろうか。
#言ってることおかしかったら誰か指摘よろしく
知った直後に完璧にマスターしなくても共通化を意識して書いてるうちに
「こいういう時に使うのか」って気がつく。
だから今無理にマスターしようとしなくてもいいと思う。
共通化を意識するってのが大事。
ただ機能を実現するだけなら
>>807 の例で
sasuru(Chinko)
sasuru(Chikubi)
をそれぞれ作ってオーバーロードすれば別にインターフェイス使わなくても同じことができる。
しかし新しくさすりたいクラスを作ったらHandクラスにそのクラスをさするための新しいメソッド追加しなきゃならない。
そこでインターフェイスを使えばもうさするためにHandクラスを修正する必要はなくなってウマーというわけだ。
>>819 長文ご苦労。
まともな本買って読めってこったな。
>>820 俺の文がわけわからんから本が必要ってことか?(つД`)
本買わなくても共通化意識して書いてればそのうちわかるって言いたかったんだが・・・。
822 :
デフォルトの名無しさん :04/02/08 18:45
わかりやすい例考えてみた。どうかな? interface 食べられる { public void 食べる(); } class キムチ implements 食べられる { public void 食べる() { System.out.println("辛くてうまい!!"); } } class チョコ implements 食べられる { public void 食べる() { System.out.println("甘くてうまい!!"); } } class Sample { static void main(String[] argv) { Sample.試食(new キムチ); Sample.試食(new チョコ); } public static void 試食(食べられる 何か) { 何か.食べる(); } } <<結果>> 辛くてうまい!! 甘くてうまい!!
>>819 >インターフェイスは自身が何かをすることができる機能を持つためではなく
>自身が他のクラスと同じように扱われるための機能を持つってことではないだろうか。
前半のこれと、
>ただ機能を実現するだけなら
>>807 の例で
って、同じことじゃないの?
Chinko,ChikubiもKimochiyokunaruとして、Handに同じように扱われるための機能とは違うの?
Swingアプリ作ったり、java.util.Collections.sort(List, Comparator)メソッド使ってみたりすれば インタフェースの目的と使いどころが分からないか?
インタフェース使ってるとなー。
後で共通の機能を実装したくなったときになー、いまいちなんだよなー。
>>822 で言うと、キムチとチョコに賞味期限表示機能を付けたくなったりとか。
そういうとき、ああ、食べられるインタフェースでなくて、
食べ物クラスにしとけばよかった、とか思う。
>>824 同じだよ。
Chinko,Chikubiを引数に持つメソッドを複数持たずにすむように
Kimochiyokunaruインターフェイスを実装して同じように扱われるための機能を持つってこと。
>>826 それ俺もあるよ。
最初はクラスを継承して親クラスの型で扱うようにして
後から別のところで必要になったらインターフェイス実装するってのはダメかな?
>>826 それは初心者が陥りやすい罠だ。
食べられるものの本質として賞味期限が表示できるわけではないだろ?
スーパークラスを何でもできる便利クラスに設計してはいけないよ。
831 :
デフォルトの名無しさん :04/02/08 19:19
>>829 >スーパークラスを何でもできる便利クラスに設計してはいけないよ。
え、そうなの?
>>829 >それは初心者が陥りやすい罠だ。
何様?
食べ物beanクラスがある。 →クラス設計時:じゃあ、購入日フィールド、有効期間フィールド作っておくか。 →消費期限が必要になりました →購入日と有効期間から算出できるな・・・よし、賞味期限取得メソッド追加、と。 別におかしくない気が。
835 :
デフォルトの名無しさん :04/02/08 19:29
そんなに、継承やらinterfaceやらつかうか?
>>833 、>834
各食べ物クラスのフィールドに食べ物Beanを持たせるってこと?
>>835 業務ロジックの実装段階になるとあまり使わないけど
共通ロジック書いてる時にはよく使う。
複数のクラスを動的に切り替える例なら
Jakartaのcommons-loggingなんかわかりやすいかもしれないな。
あ、わかった!
>>829 は食べ物クラスに消費期限を「表示」するメソッドを追加するのかと勘違いしたんだ!
多分、printSyouhiKigenみたいのを。
商品管理クラスにコンポジションするなぁ。
>>830 賞味期限をインターフェースにして、
「public Date ゲット賞味期限」にして、
表示はSampleクラス側でさせる。賞味期限の無い食べ物があっても、
食べ物を要求するメソッドだったら実行できる利点がある。
氷クラスを継承したカキ氷クラスはどちらも「食べられる」が、
カキ氷クラスは賞味期限も実装する。
商品を扱うクラスからは賞味期限が必要な商品としては、氷クラスはNGだが、カキ氷はOK。
>>832 気を悪くしたらゴメン。煽るつもりはなかった。
漏れも最初の頃、そんなことやってて後で困ってたから。
クラスの設計時に、責任の分担を明確にしておいた方が、
後々再利用したり変更したりしやすい、柔軟な設計ができるよと言いたかった。
>>830 の何でもかんでも追加して、便利クラスにしてはいけないというのもそういうこと。
>>838 ビンゴだ。
デザパタ読めば、ここの会話は理解できるの?
>>836 食べ物beanつか、各クラスにget消費期限()だよね。
食べ物の下位クラスに食べ物(くさるもの)クラスを作って、
その下位に各食べ物クラスを配置とか、しないだろうし。
システム上で扱う食べ物が全て腐るものなら、
当然食べ物クラスに消費期限プロパティか、取得メソッドが乗りそうに思うし。
>>841 少なくともこの数レスに関しては、ぜんぜん関係なし。
単純にクラスのデザインの話。
>>833 その場合は、例え食品会社のシステムを作っていても、
購入日や有効期間を食べ物beanに持たせるべきではない。
その上に、商品クラスを作っておくべきかと。
その後、食器を売ることになりましたでも、
今まで商品を扱っていたクラスなら問題なく売ることができる。
有効期限取得もインターフェースにしておいた方が、
あとで飲み物を売ることになりましたとかでも、
賞味期限があるものインターフェースを持ってれば、
今まで賞味期限をチェックしていたクラスなら、どっちもチェックできる。
>>840 取得と表示で間違ってたってことかな。
例えば商店の在庫管理システムだった場合
システム的に全ての食べ物に「public Date ゲット賞味期限」が必要な場合には
スーパークラスに賞味期限のフィールドとそれを返すメソッドがあってもいいんじゃないかって
思ってしまうんだけどこれってダメ?
スーパークラスが「食べ物クラス」だからダメで
スーパークラスが「食べ物在庫クラス」で在庫としての機能だけを持たせるならOKってことなのかな。
インタフェースの存在を「共通化のため」って思っている奴は オブジェクト指向勉強し直せ
>>845 的なインターフェイスの正しい使い方を教えてくれ
すみません、ちょっとUMLで言ってもらえませんか?
>>845 あなたの成果物を教えて下さい。
威張るのはそれからでも遅くないです。
>>846 ,848
設計の課程で共通部分を抽出してインタフェースにするなんていうのは
本末転倒なんだよ。
ポリモーフィズムがわかっていない。
インタフェースの型で扱えるようにするためにある。
インタフェースを設計してから別クラスで実装するのが筋。
そのクラスを使う方がインタフェースの型だけ知っていればよく、
実装型を知らなくてよいことにするために使う。
そうすれば、使うほうに影響することなく実装クラスの入れ替えも自由自在。
サンプルはSunのライブラリに腐るほど転がっている
java.sql.Connection しかり(RDBMS依存しないコードが書ける)
javax.servlet.http.HttpSession しかり。(コンテナ依存しないコードが書ける)
※ちなみに、Sunではインターフェースではなく、インタフェースと
書くことになっている。
>>850 JDBCのインタフェース(Sunに習っとく)は
DBごとに実装を切り替えることによってクラスを使う側から同じように使えるようにするっていう意味で
>>808 、
>>811 の例と同じだよな。
>>837 に出てるcommons-loggingもそう。
同じように扱えるようにする考え方は共通化って言わないの?
>>853 853には同意だよ。
設計の過程で共通部分を抽出するなんてのが本末転倒だと言いたいだけ。
>>850 >設計の課程で共通部分を抽出してインタフェースにするなんていうのは
ってのは、
>インタフェースを設計してから別クラスで実装するのが筋
の前段階ではないの?
誰かが責任の分担をとも言ってたし、別に共通だから、
インタフェースにしちまおうという議論をしてるわけではないと思うよ?
ついでに、別に実装が先にあって、そこからインタフェースが生まれることもあるだろ?
J2SDK1.4には新たにCharSequenceが加わったぞ。
>>854 すまんがこの辺結構気になってるところだからもうちょっと付き合ってくれ。
俺は
>>807 みたいなやり方もアリだと思うけどダメなん?
>ついでに、別に実装が先にあって、そこからインタフェースが生まれることもあるだろ? 日本語じゃねぇ。 ついでに言うと、実装が先にあって、そこからインタフェースが生まれても別にいいだろう? ということで。氏んでくる。
>>857 一般的なリファクタリングの流れにも、そういうのあるね。
既存クラスからインターフェイス抽出→別実装を作成→差し替え。
859 :
デフォルトの名無しさん :04/02/08 20:44
java認定資格などで ヤマハットとかシフト演算子、ビット演算子など必ずといっていいほどありますが 実際、開発などでこれらを使う機会ってあるのでしょうか?
>>859 >ヤマハットとかシフト演算子
言葉すら知らないけど仕事で困ったことはない。
>ビット演算子
しょぼい暗号化(一般人にパっと見わからない程度)で一回だけ使った。
が、それ以降使う機会はないしすっかり忘れたけど全く困らない。
>>853 そういうのは「仕様を統一する」っていうんじゃないか?
CPUソケットの仕様を決めておいてに好きなCPU刺すイメージ。
部品や機能は「共通化」というけど
インターフェースは「統一」しておくものだと思う。
間違い。仕事で一度使ったのはシフト演算子だ。あとは知らね
>>859 シフトやビット演算は普通に使うでしょ。アルゴリズム高速化の最初の一歩。
JSPだのJ2EEだので、データを箱から箱に移し変えるだけの馬鹿コードしか
書かないような仕事なら、いらんけど。
>>861 なるほど。言葉の解釈の違いか。
そうやって使い分けた方がわかりやすいかもな。
>>859 事務業務系アプリなら
>>860 の言うとおりだが
ゲームやマルチメディア、制御系(携帯とか含む)なら使いまくり。
>>863 耳が痛いな。オマイはどんな仕事やってるの?
>>865 デジタル点とかめんどいのでパックしないで欲しいです。by通信アプリのプログラマさん
>>865 そうなんだ。俺が業務システムしかやってないからなのね。
ヤマハットって 二つの数値を2進数にして 同じビットなら1を返す、違ってたら0ってやつか?
あれ?Javaって func(FLAG1 | FLAG2); とか if(func() & FLAG3){ やる必要のあるメソッドとかって無かったっけ?
>>868 グラフィックをビットマップで扱う時点で必須だし
通信プロトコルとかもビット単位でフォーマットが決まってる事多いし.。
>>871 Webで業務システム作ることばっかりだからどっちもやったことない。
サーバーと通信して何かやりとりする時もソケットつないで普通に文字列のやりとりしかしてないなぁ。
>>870 その手の処理はなるべく避けるようにAPIは作られているな。
どっかに残ってるかもしれんが。
>>872 まあ逆にいえば、そういう実装を自力でしないですむよう各種環境が
充実しているというわけだけどな。
Webアプリっつったって、ほんとはhttpだの分散オブジェクトだの
セキュリティだのでイロイロやってるんだけど、そういうのを気にしない
ですむようAPサバなり何なりに隠蔽されているわけで。
>>874 なるほどね。
まあ使う機会が来たら覚えるわ。
>>856 なんか飯食ってたら、
>>850 の言いたいことがちょっと分かったかも。
確かに、これまでは実装を隠蔽するためのインターフェースの役割について、
議論がほとんどないからね。
>>807 の例で言えば、
>Chinkoならデカく、Chikubiなら硬く、Mankoは濡らすことにした。
を、kimochiiの挙動をそれぞれのクラスに実装させたことを強調して、
HandやShitaからはその実装を意識することなく使える利点を強調すべきだった。
まぁ、
>>807 は設計手法云々ではなくインターフェースの有用性について語ってるだけだから、
あのやり方をアリですかと聞かれても困ってるのかもしれん。
>>858 が言ってるように、後からインターフェースが生まれるのはもちろんアリだろうけど。
877 :
デフォルトの名無しさん :04/02/08 22:13
ファイルを関連付けられたアプリケーションで開くにはどうしたらよいのでしょうか?
>>877 標準APIだけじゃ無理。
JConfig で出来たかもしらん。
でなきゃ、JNI経由で ShellExecute なりなんなり呼び出せ。
879 :
デフォルトの名無しさん :04/02/08 22:28
>>878 てっきりピュアで出来るかと思ってました。
ありがとうございます。
880 :
デフォルトの名無しさん :04/02/08 22:45
>>877 Runtime.getRuntime().exec( "cmd.exe /c start \"\" hoge.txt");
Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler hoge.txt");
>>877 ,878
SWT 使えばできる (Program クラスだったかな)。
Windows だけでよければそのファイルを Runtime で実行させようとすると開けなかったっけ?
>797 できました。ありがとうございます。
↑のやりとり見てるとクライアントJavaってもはやWindows専用だよな。
>>884 ってかクライアントに Windows 以外使うのは自己満足だからな。
。。。Mac はどうか知らんけど。
>>885 貧乏企業用にLinuxというのはありでしょ。
貧乏企業は自作で作って複数のマシンに一つの(1ライセンス)のWindows放り込んでそうな気がする。
888 :
デフォルトの名無しさん :04/02/09 00:25
参照ってのは ポインタ自身の値(アドレス)をいじれないポインタってことですか?
>>888 ,890
実体へたどることさえできればいいので (C 言語などでいう) ポインタ
でない実装でも構いません。
>649 亀レスですがありがとうございました。
893 :
デフォルトの名無しさん :04/02/09 05:25
auでアプリを製作しています。 javaSEの1.4にはメソッドがあるみたいですけど… Stringの一部を置換は、どのように実現すれば良いですか? たとえば、「あいうえおかきくけこあいうえお」の「えお」を「あ」に置換する 結果→「あいうあかきくけこあいうあ」 など、長さが違う文字でも可能にする。
>>893 タグ辞典でも引いてください。
その前に、レス違いでは?
>>893 1.4以降使えるなら、replaceAll( String, String )
使えないなら、char配列にして、文字列検索して置換。
dir a:\ という外部コマンドを呼び出したときに、 フロッピーディスクがセットされていないと、固まってしまいます。 これを固まらずに、エラーメッセージを受け取る方法はありますか? それとも、エラーメッセージを受け取らずに固まるのはうちの環境だけなんでしょうか?
>>896 その外部コマンドを読んでるところのソースを晒しあげするがいい。
898 :
デフォルトの名無しさん :04/02/09 11:28
仕事で使うToolはJavaで書きますか?
>>898 人によるんでない?
会社の先輩はperl厨なので、perlで書いてるよ。
>>898 VCで仕事してた頃はVBとかCで書いてたけど、
Java使うようになってからはJavaでしか書かなくなったなぁ。。。
900じゃないけど、ツールってそんなに速度気にする? Javaなら途中から人に任せても大丈夫だけど、 Perlは自分が書いたのでも読みたくないな。
901じゃないが、Perl使ってる人間は Javaに移行しても、速度は気にならないと思う
901だが、C/C++から移行してきた
905 :
デフォルトの名無しさん :04/02/09 13:23
速度を気にするようなツールってどんなのだ?
906 :
デフォルトの名無しさん :04/02/09 13:53
Javaでenumみたいな機能を使いたいのだが、何か方法はないですか?
907 :
デフォルトの名無しさん :04/02/09 13:54
908 :
デフォルトの名無しさん :04/02/09 13:57
JAVAを始めたばかりのド素人でございます。 まずはJ2SE環境を作ろうと考え、サンのDLサイトに 行き、最新バージョンである、 「j2sdk-1_4_2_03-windows-i586-p.exe」を 入手し、Win2kにインストしました。 無事に終わったので、確認の為、 C:\>java -version と入力した所、 java version "1.3.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01) Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode) と出てきました。何故1.4.2_03をインストしたのに 1.3.1_01なんて出てくるの? 最初の一歩で躓いてしまったお馬鹿な私を 誰か助けて下さい。
1.5を使う
Javaでenumみたいな機能を使いたいのですが、何か方法はないですか?
あ、
>>906 宛てね
>>908 元からそのバージョンが入っていたと思われる
system32の下あたりに、java.exeとjavaw.exeが入ってないか?
>>910 enumはApacheJakartaProjectのCommonsみるか1.5をまつか
ポストして10分も待てないやつは質問なんてするな
>>911 1.5って、もうでてたんですか?
ありがとう御座います。
914 :
デフォルトの名無しさん :04/02/09 14:11
>>906 enumがどの言語のどんなものか知らないが、JavaにはEnumerationというインタフェースがある。
今は、それを使わず、Iteratorを使うことが多いけど。
915 :
デフォルトの名無しさん :04/02/09 14:11
Java初心者です. スレッドって何のためにあるんですか? それと,メソッドで名前が+,-のものを作りたいのですがどうすれば出来ますか?
>>enumがどの言語のどんなものか知らないが enumといや、Cだろ? 列挙型だっけ?
現状で列挙型に一番近いのは、、、 public final static な定数を持ったクラス、、かなぁ
ありがとうございます!解決しました! ご指摘の通りSYSTEM32の下にJAVA.EXEがいました。 その他、オラクルをインストした時にJRE版がインストされて いることも判明しました。 SYSTEM32配下のJAVA*.*を削り、環境変数で %JAVA_HOME%\binを優先させるよう順番を 変えた所、無事に C:\>java -version java version "1.4.2_03" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02) Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode) となりました。ありがとうございました。
class Class { public final static int A = 10; public final static int B = 20; public final static int C = 30; public final static int D = 40; } こうするのか? だるいな…
class Clazz { public final static int[] A = { 10, 20, 30, 40 }; } でもいいぞ。だるさは同じか?
安全性のためにC言語風のenumは導入されていない。 間に項目を追加したら順序が変わるためにコンパイルし直しが必要になるから。 ヘッダに書くこと多いので結局コンパイルし直しになることが多いけどね。 javaは動的クラスロードを基準に考えないといけないからこれは厳しい。 とはいえ引数で型の指定じゃなくて結局intとか使ってるのでコードとしての見栄えは悪い。 このへんを解決したのが1.5のtypesafeEnum。
926 :
デフォルトの名無しさん :04/02/09 14:54
つまり、キャストを明記しないと他の型に変換できないプリミティブ型を、 新たに作れるわけですか。
>>923 enumは名前で解決するのが目的の一つだけど、これだと意味がない
1.5未満でやろうと思ったらApacheみてくるべし
ITPROでもちょうど今日これ書いてある
クラスの代わりにインターフェイスにするとちょっとだけ良い気がする
class Clazz { public final static HashMap enumFake = new HashMap(); static { enumFake.put( "A", new Integer( 10 ) ); enumFake.put( "B", new Integer( 20 ) ); enumFake.put( "C", new Integer( 30 ) ); enumFake.put( "D", new Integer( 40 ) ); } } これだと、取り出しにキャストが必要でアレだな。 だるさも倍増だしな。
定数という意味では
>>930 もダメだな。
あきらめろ、ってことか。
>>930 取り出しにキャストが必要なのもそーだが、
java.util.Collections#unmodifiableMap(java.util.Map) とか使って不変にしとかんと
enumFake.put("A", new Integer(0)); とかして上書きできちゃうんだが…
>>930 enum だったら
EnumType {
public static final EnumType E = EnumType("E");
public static final EnumType N = EnumType("N");
public static final EnumType U = EnumType("U");
public static final EnumType M = EnumType("M");
private final String val;
private EnumType(String v){val = v;}
}
とかやるよね。
あとは java.io.Serializable を実装する時は readResolve() も書いておくとか、
toString() をオーバーライドするとかお好きにどーぞって感じで。
Eclipse のプラグインで雛形生成してくれる奴なかったっけ?
936 :
デフォルトの名無しさん :04/02/09 15:42
リテラルって何ですか?
937 :
デフォルトの名無しさん :04/02/09 15:46
1.96f, .072F
938 :
デフォルトの名無しさん :04/02/09 15:51
939 :
デフォルトの名無しさん :04/02/09 15:53
>>938 ちょっと違う
public static final int MAX = 10;
「定数」は普通 MAX の方
リテラルは 10 の方だけ
940 :
デフォルトの名無しさん :04/02/09 15:55
>>939 では「値」と解釈してよいのでしょうか?
整数リテラルは整数値ということですか?
なんどもスミマセン。
942 :
デフォルトの名無しさん :04/02/09 16:01
943 :
デフォルトの名無しさん :04/02/09 16:39
944 :
デフォルトの名無しさん :04/02/09 16:43
仕事以外でJavaって、使うことあるか? 漏れはないんだが。
945 :
デフォルトの名無しさん :04/02/09 16:45
946 :
デフォルトの名無しさん :04/02/09 17:09
>>945 なるほど。。。
では、例えばJavaの認定試験で
「次のうちキーワードを選べ」
という問題が出たら、null,false,trueは
選ばないほうが良さそうですね。
ただ、IDCジャパン発行の
「直前必修問題集 Java2 プログラマ1.4」を
見ると予約語・キーワード一覧にこの3つが
含まれていたのです。
だから、Javaではこの3つの単語を
リテラルとして使用するために
キーワード(または予約語?)として
いるのかなと思いました。
>>943 予約語は keyword の訳語として使ってるんじゃないの?
そうでなければ文章書いた人間に聞くのが手っ取り早い。
949 :
デフォルトの名無しさん :04/02/09 17:49
取り合えずいきなりソース丸写しで申し訳ないんですが、直角三角形をアスタリスクで生成する問題は出来たのですが 正三角形(又は二等辺三角形)を作るのがわかりませんです、丸投げですけど誰かおしえてくらはい、解説付きで(爆 public class Lesson { public static void main(String[] args) { int x = Integer.parseInt(args[0]); int i; int count=0; //三角形の高さに達するまでループ、iはループカウンタ for(i = 0; i < x; i++ ) { //通常処理(高さ-1の空白を挿入) for(int a=0; a<i-1; a++) { //行の最初に挿入 if(a==0)System.out.print("*"); System.out.print(" "); } //行の最後に挿入(最初の一行目は終点の書き出しは無し(!=0)) if(i != 0)System.out.println("*"); //底辺の処理(三角形の高さとループカウントが一致したら全部出力) if(i==x-1) { for(int a=0; a<x ;a++) { //最後の行の出力 System.out.print("* "); } } } } }
951 :
デフォルトの名無しさん :04/02/09 17:52
952 :
デフォルトの名無しさん :04/02/09 17:56
>>948 認定試験の勉強をしてたら気になったもので。
<<952 そか、がんばれよ
で、宿題スレは無人君みたいなのでだれかおながいします
955 :
デフォルトの名無しさん :04/02/09 19:26
javaやりたいのですが質問いいですか. 友達に聞くとjdkというのをSunから落としてくればいいと教えてくれたのですが, J2SE v 1.4.2しかありません. jdkと2SEは違うのですか? それとNetBeans IDE v 3.5.1 Cobundle とは何ですか?
>>955 それでいいよ
NetBeansIDEは開発環境。でも今はEclipseの方が人気だね
957 :
デフォルトの名無しさん :04/02/09 19:32
>>955 J2SEでいいよ。
NetBeansはJavaの開発環境なので、使いたければ同梱のヤツにするがいい。
いらなければJ2SE単品で。
開発環境はプログラム経験が全くないんであれば、無い方がいいと思われ。
言語と開発環境の勉強両方一緒にするのはちょっとどうかな、と俺は思う。
そもそも昔SUNがJDK1.2を出した時にこれはJava2だとか 言い出したのが混乱の原因。SUNはばかですね、昔から。
まずは、エディタでガリガリと
961 :
デフォルトの名無しさん :04/02/09 21:17
パッケージ java.awt.eventのActionPerformedの引数に(ActionEvent ae)とあるのですが この ae ってなに?
J2SEはJAVA2の基本プラットフォーム J2SE以外には小型デバイス向けのJ2MEやエンタープライズ向けのJ2EEってのがある そしてJ2SEははランタイムのJ2REと開発キットのJ2SDKと分かれている SDKは昔JDKと呼ばれていてJava2になったときJ2SDKと読ぶようになった JDK=J2SDKだと思っていい こんなもんでいいかな?
>>961 ActionEventじゃないのか?そういう話じゃなくて?もっと深い話?
965 :
デフォルトの名無しさん :04/02/09 21:53
>
>>963 まあそっちかな すまそ
そこいまいち理解してない
966 :
デフォルトの名無しさん :04/02/09 22:10
コメントの書き方でいつも迷うんですが、 人が見てわかればいいんですか? それとも何か絶対必要な情報とか、書式とかってあるんですか? 教えて下さい。
967 :
デフォルトの名無しさん :04/02/09 22:13
>>960 これは便利ですね。
今までずっとMS-DOSのeditコマンドで書いてました。。
前々から気になってたのですが、何故
>>962 をはじめ、
一部の方々の書かれる文章は、英数字が全角になってしまうのでしょうか。
FEPの問題でしょうか。それとも、何か意図があるのでしょうか。
英数字を全角で書く皆様方、よろしければ、何故わざわざ全角を使うのか、
その理由を教えてください。
>>967 >今までずっとMS-DOSのeditコマンドで書いてました。
そういうこと言うと「viで:!javacとか:!makeとかしてる」って人が出てくるぞ。
971 :
デフォルトの名無しさん :04/02/09 22:29
こういうのなんだが public void actionPerformed(ActionEvent ae) { この ae とはいったい何なんだ?教えて
972 :
デフォルトの名無しさん :04/02/09 22:32
>>968 ありがとうございます。
この辺も勉強してみます。
>>972 Javadoc コメントに具体的な処理を書いてはいけない。
外部から見た仕様を書く。JDK API ドキュメントが手本になる。
それから必ずコメントを先に書いて、後で中身のコードを書くくせをつける。
974 :
デフォルトの名無しさん :04/02/09 22:44
public void actionPerformed(ActionEvent ae) { この aeとは何かを私はしりたい このaeはいったいなに?
短時間に何度も同じことばっかりききやがって ローカル変数の名前くらい自由に付けろよ
actionPerformedの中で使わないなら別にaeは気にしなくていい。 なぜそこにあるかは"interfaceの実装"について調べること。
頭文字
978 :
デフォルトの名無しさん :04/02/09 22:57
>>973 レスどうもです。
コンストラクタ、フィールド、メソッドとかの
概要みたいな感じに書くって事ですか?
あと、変数や配列なんかもコメントって必要?
980 :
デフォルトの名無しさん :04/02/09 23:02
>>970 viって何?
Linuxか何かのエディタ?
>>974 それはボタンを押したときなどに発生したイベントを表すオブジェクトで、
どのボタンがイベントを起こしたのかとか、何かキーを押しながらクリックされたのかとか、
そういった情報がとれる。actionPerformedの中にそのイベントが起きたときの処理を書いて、
3つあるボタンのうちどのボタンからイベントが来てるのか判定したいとか、
一緒にCtrlキーが押されたのか知りたいときとかに、aeに聞けば分かる。
>>979 appleのaの発音にも似てるよね。
>>978 JDK をインスコしたディレクトリにある src.zip を解凍して
java/lang/String.java とか参考にしてみて。
英語に抵抗があったら、Mergedoc とかで日本語にできる。
適当にコメント書いてみて javadoc コマンドで
API ドキュメント作ってみるのも良いかも。
983 :
デフォルトの名無しさん :04/02/09 23:12
>>982 やってみます。
ありがとうございます。
984 :
デフォルトの名無しさん :04/02/09 23:14
985 :
デフォルトの名無しさん :04/02/09 23:23
自分は数値への変換で例外処理を書くときに catch(NumberFormatException nfe)と catch(Exception e)を書く場合と 大雑把に catch(Exception e)を書く場合があります。 事細かに処理をしたい場合は前者の書き方を。 ですが職場には catch(NumberFormatException nfe) しか書かない人がいるんです。 自分的には "もし"、NmberFormatException以外の例外が きたらどうするんだろう・・・って思ったりするんですが、 こういう書き方はありなんでしょうか? 皆さんは例外処理はどのようにされてます?
全くの杞憂。 Integer#parseInt(String)はNumberFormatExceptionしか投げないんだし、 Exceptionのcatchは不要。 ちなみにInteger.parseInt(null)はNumberFormatExceptionが発生する。 "もし"とか考える前にAPIドキュメント読んだら?
APIドキュメントを読んだから、"もし"っていってるんだが・・・。
>>985 予期しない実行時例外の処理を普通は的確に書けないでしょ。
書けたとしても、それじゃそこらじゅうのいつ飛ぶかも分からない
実行時例外をキャッチしなければならなくなる。
Runtime 系を防ぐためにある程度、事前に自分で検査する。
例えば NullPointerException を防ぐために != null だったらって
書くでしょ。自分でキャッチしないよね。
まー、NumberFormatException がなんで Runtime 系なんだっちゅう
のは知らん。
viは普通。DOSでもedlinなら・・ editってIBMのDOSじゃなかったか
>>986 ??? API ドキュメントに実行時例外なんか書かれていないことがあるが。
実行時例外って分かってる?
>>985 どっちでも結果は同じだけど、数値変換に限らずそこで何の例外が発生する可能性があるのか明示的に示して欲しい。
Integer#parseInt(String)だけが並んでるならまだしも複数行を囲んでいて別の処理が少しでも入っているならなおさら。
それならパっと見た瞬間発生する例外がわかっていいでしょ。
自分しか読まないソースならどっちでもいいと思うけど職場なら必要最低限例外処理にして欲しいと思う。
>必要最低限例外処理 必要最低限の例外処理
>>985 君が全てのExceptionをcatchして、いついかなるExceptionが来ても、
呼び出し元が望む通りの復帰処理をさせるコードを書いているなら問題ない。
でも、例えばSocketExceptionなんかをcatchしてしまってると、
呼び出し元はネットワーク通信が失敗していることを知るすべがなくなるだろ?
一概には言えないけど、自分がハンドルすべき例外でもないのに、catchするのは良くない。
ちゃんとさらに上位の呼び出し元に通知してやって、
最終的にハンドルする責任のある呼び出し元がcatchして、復帰処理を行うべき。
Object[] obja = new Object[x][y]; Object objb; Integer data; obja[x][y] = (Integer)objb; 以上のプログラムで (Integer)objb のキャストが出来ないんですが、何故ですか?
すいません、Object[][] obja = new Object[x][y]; が正しいです。 省略してありますが、objbにはきちんとObject型のデータが入ってます。
>>997 え?よくわかりませんが、Object型の配列に
Integer型の変数を入れたいんですが。
そのInteger型にしたい元のデータはObject型なんです
xとyはどこから出てきた。話はそれからだ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。