【初心者】Java質問・相談スレッド120【歓迎】
3 :
デフォルトの名無しさん :2008/10/10(金) 17:15:42
4 :
デフォルトの名無しさん :2008/10/10(金) 17:29:28
数字とカンマのcsvをBufferedWriter.write(String)で書き込んでいって、 RandomAccessFileで読み取りモードで開き、seek(0)して、readChar()しても、読み取り値が?になってしまいます。 どうしたらいいのでしょうか?
5 :
デフォルトの名無しさん :2008/10/10(金) 17:51:53
プログラムの中で整数nを用いた物を書いてあって、そのnをjavaコマンドラインで指定することは可能ですか? nを指定して出来た結果をファイルに保存したいのですが全くわかりません。 どのように書けばよいのでしょうか?
mainメソッドの引数。
前スレ
>>955 私もつい最近それで困っていた。
今でも原因は不明だけど、(image.getType()がBufferedImage.TYPE_BYTE_GRAYの時に起きる)
RasterにgetPixelすれば正常な色が取得できると思う。
BufferedImage image = ImageIO.read(bmpFile);
Raster raster = image.getData();
int[] color = new int[4];
raster.getPixel(x,y,color);
(byte)color[0];で正常な色。
8 :
デフォルトの名無しさん :2008/10/10(金) 22:49:53
前スレ955です。
>>7 おお、助かります。
TYPE_BYTE_GRAY の時だけ処理を変えることで対応してみます。
ありがとうございました。
9 :
デフォルトの名無しさん :2008/10/11(土) 00:00:45
Windowsでiアプリ開発をおこないたいと考え、NetBeans6.0.1とdoja5.1をインストールしました。 簡単なプログラムでテストしようとすると、次のようなエラーが出ます(一部)。 Error loading class Files\iDKDoja5.1\lib\classes.zip;C:\Program Error loading class Files\iDKDoja5.1\lib\doja_classes.zip dojaのインスコ先をもとにNetBeansが自動生成するdoja.propertiesでのパスの設定は以下(一部) doja.home=C\:\\Program Files\\iDKDoja5.1 doja.classpath=${doja.home}/lib/classes.zip;${doja.home}/lib/doja_classes.zip 要するにWindowsのパスに含まれる空白文字(Program Files)が正しく解釈されない様子。 c:/iDLDoja5.1にインストールしなおしたところ、うまくいきました。 パス中の空白文字って他のケースでも問題になるんじゃないかと思うのですが、 プロパティファイルで空白文字をエスケープするなど、一般に回避方法はあるでしょうか?
Javaでデスクトップフォルダを取得するライブラリはありますか? ホームディレクトリから辿っていく方法だと確実性はありませんし、 主要OS分をサポートしたライブラリを探しています。
FileSystemView.getFileSystemView().getHomeDirectory()
>>11 レス、ありがとうございます。
user.homeとgetHomeDirectoryは返す値が違っていたのですね。
13 :
デフォルトの名無しさん :2008/10/11(土) 03:12:23
経験半年ぐらいのレベルってどれぐらいの知識で どういうことをするんですか?
>>13 レベル10くらいでアリアハン脱出するくらい
レーベの町でレベル32ぐらいまで上げた記憶がある。
phpで作ったアプリなら鯖とめなくてもファイルコピーで更新できるけど Javaサーブレットだととめないといけないの? なんかあれだよね
半年の知識: 使ってるライブラリの仕様はよく分からんが、 用意されているクラスを使って、とりあえず業務ロジックは書ける。 しかしコード品質が悪く、レビュー者を内心いらつかせる。 Effective Javaやデザパタ本を読ませたくなる頃かな。
>>16 正しくは止めなきゃいけないものもあれば、止めなくてもいいものもある。
使ってるフレームワークにもよるが、
基本的にページクラス/テンプレートは止めなくていい。
MVCの中を動き回るようなクラスなら、
むしろ止めてくれないとバグを残すので困る
デバッガで見えてる値がいつの頃の値が見誤るからね。
デザインパターン使ったことないな 何か良いことあるの?
デザパタのいいとこ。 ・ソースコードの読み方がある程度画一的になり、他人が見たとき悩まない(パターンによる恩恵) ・クラスの役割が明確になり、概念や制約、実装を分けて管理できる(鉄板による恩恵) ・上記の恩恵のため、設計に時間を掛けられない時に悲惨なミスをせずに済む(リスク制御の恩恵)
おお、サンクス
「例外をスローするときのメッセージやコメント文は英語で書いてくれ」と指示されたのですが英語が苦手過ぎます… そこで英語のテンプレみたいなのがそろっているサイトなどを知りたいのですがご存知ないでしょうか? throw new FooException("I can NOT speak English !");
名詞+(not/cannot)+動詞 もしくは 形容詞+名詞 file not exist file cannot open bad filename 例外メッセージなんかこれだけでいいんじゃね?
例外メッセージなんて直訳英語で十分通じる。
25 :
デフォルトの名無しさん :2008/10/11(土) 19:49:38
>>26 いるよ。
ヒントは2バイト。下位のバイトが最初ね。
27 :
デフォルトの名無しさん :2008/10/11(土) 20:43:39
>>25 RandomAccessFile#readChar() は UTF-16BE で読み込む。
BufferedWriter の基礎となる Writer の出力エンコーディングが何か知らんが
それが UTF-16BE でなければ化けて当然。
28 :
デフォルトの名無しさん :2008/10/11(土) 23:08:26
%% Name Address Phone %% Name Address Phone %% Name Address Phone のように、特定の文字列 (ここでは%%) のみの文字列で区切れているデータファイルをプログラムから読み込んで処理したいのですが、 Buffered
29 :
デフォルトの名無しさん :2008/10/11(土) 23:10:53
アプレットで複数個の描画をしたいのですがうまくいきません。 g1とg2に分けるには public void paint(Graphics g1,g2) としたらいけないのでしょうか。
すいません。質問の途中で送ってしまいました。 うまく全体を読み込んで各データを別個にするのに何かうまい方法はありますか? 今は、とにかくreadLineで全部読み込んでから、分けてるのですがどうも効率悪いような気がして…。 Perlの、$/を書き換えるみたいに、入力レコードのセパレータを、\nから%%にすることが出来たらいいのですが。 Javaならではのやり方みたいのがあったら教えてください。
>>30 その例を見る限り4行ずつ読んでいけば良いように見えるけど。
java.util.regex.Pattern と java.util.regex.Matcher 使って正規表現で取れば? コードはすっきりするかも決して速いとはいえないけど。
33 :
25 :2008/10/12(日) 00:04:27
>>26 >>27 ファイルは、メモ帳やエクセルで普通に開ける、.csvのテキストファイルなんですよ。
なんで、Shift_JISだと思うんですけど、
File csvFile = new File(aaaa.csv);
BufferedWriter bw =
new BufferedWriter(new FileWriter(csvFile, false));
bw.write("0,1,2,3,4");
としてかきこんだファイルなんですけど、どうやって読み取ったらいいですかね?
>>32 そういうことはソースを見て言ってるんでしょうね?正規表現は速いですよ。
35 :
デフォルトの名無しさん :2008/10/12(日) 01:00:09
Java と、“正規表現が得意”なスクリプト Perl、 どっちが早いんだろうかw
Javaの正規表現は最適化までしてくれるわけじゃないよ。 \\d*をcompileするより、Character.isDigitを回した方が5倍速い。 Matcherの生成コストをベンチマークの対象から外しても Character.isDigitを回した方が3倍速い。
37 :
デフォルトの名無しさん :2008/10/12(日) 01:48:59
おまえの言う3倍とか5倍は具体的に何秒速くなるんだ? 何か言いたいなら、まずは実測してから言えよw
perlのこと知らないんだけど、perlは正規表現の最適化をしてくれるの?
>>37 ベンチマークってのはマシンスペックを書かない場合は比率で表現するもんだ。
>>36 isDigit()で済むようなメソッドなら、なにも\\d*とかregexなど使わんな。
おまえ、何倍速いとか寝言みたいな旧世代なこといってるけど、そもそも正規表現ってのをイマイチ勘違いしてないか?
それと速さ気にするような鼻糞野郎なら、\\d*でいいんだし、isDigti()なんかより '0' <= ch <= '9' の不等式をつかうだろ。
おまえはプロでも職人でもない糞ガキ以下だなww
というか突っ込みどころ多すぎでワロタw
頭が悪すぎ。最適化してるかしてないかの話で何を言ってるんだ。
42 :
デフォルトの名無しさん :2008/10/12(日) 01:58:49
みのもんだ
てか
>>40 はreadingもwritingも出来てないな。
isDegit() なんてので比較して、さらに「3倍」「5倍」なんていわれても何の役にもたたんな。 やるなら マシンスペック、JVMバージョン、起動オプション 検索対象の文字列、検索文字列(数種類)、ソースコード とか出してやってくれよ。 でも面倒だから誰もやらない罠
正規表現の遅さを気にしてるのはむしろお前の方だろ。
47 :
デフォルトの名無しさん :2008/10/12(日) 02:26:48
私は・・・・みのもんだに「5倍」!さらに倍!!
48 :
デフォルトの名無しさん :2008/10/12(日) 02:30:57
>>44-46 日曜のこんな夜なのに、おまえらそんなに鼻の穴開いてよっぽどヒマなんだなww
おれは残業。。。「倍」さらに「倍」!ドン!!
速度的に問題が出ていないのなら、そこからさらに弄る必要はないかと思う まあ、やるとすればReaderの自作か 速くはなりそうだが、十分に効果が出るかは自信がない
50 :
デフォルトの名無しさん :2008/10/12(日) 02:35:27
鼻糞野郎は早くオナニーしろってwこったなww
>>29 複数個の描画とかg1とg2に分けるってのがよくわからんけど、それはできない。
複数のキャラクタにアニメさせたいならキャラ(や小道具など)の全てに
Graphicsを引数に持つ共通のメソッド(interfaceを使っとこう)を持たせて、
ループ文使ってキャラクタ自身に描画させるといいよ。
52 :
デフォルトの名無しさん :2008/10/12(日) 03:12:55
53 :
猫2 :2008/10/12(日) 03:53:53
さあこれから運ゲーだな
誤爆すまん
55 :
デフォルトの名無しさん :2008/10/12(日) 04:50:54
Javaってはっきりいってつかえねーなwww これほどPCに有用性のない言語が今までにあったか?これからもないだろう。
「PCに有用性がある」って何だよw
>>33 BufferedReader で読めば良いんじゃ?
58 :
デフォルトの名無しさん :2008/10/12(日) 10:46:24
木構造をイメージしてプログラム書いてます。 ノードクラスには、 ノード型の子ノードを定義してます。 条件によって親に対する子ノードの数を1個増やしたいのですが。 最終的な親に対する子の数は不定として、子を増やすことは可能ですかね?? デフォルトでは2つの子ノードを持ってます
59 :
デフォルトの名無しさん :2008/10/12(日) 10:48:02
JSFで画面間でデータをやり取りするのにSessionBeanにプロパティーを 設定して行っていますが、プロパティーの数が多くなりすぎるとぐちゃ ぐちゃになって判りづらいのと設定からアクセスまでの流れがめんどい ので何とかならないでしょうか。普通にクラスのメソッドを呼び出すように、 型 変数 = 画面名.メソッド名(型 変数) みたいに出来れば楽なんですけど。
>>58 どんなコード書いてんだか知らんが、例えばファイルシステムがどうなってんのか考えてみ?
なぁにが、考えてみ?だ
考えても?
プログラム板の奴って時折ファビョるから困る
64 :
デフォルトの名無しさん :2008/10/12(日) 14:08:25
>>57 RandomAccessFileで一部の読み書きをしたいんです・・・・
65 :
デフォルトの名無しさん :2008/10/12(日) 14:12:55
>>61 またまた糞食べちゃったんですかw
>>64 RandomAccessFileにこだわる意味がよく分からないんだけど、
そのファイルってそんなにサイズがでかいの?メモリに読んじゃえよ。
例えば1000レス行った2chスレを読み込んでも1MB行かないと思うぞ。
>>64 あくまでもRandomAccessFile#getChar()にこだわるならUTF-16BEで読み書きすればいい。
68 :
デフォルトの名無しさん :2008/10/12(日) 16:46:25
private List<Node> children = new ArrayList<Node>(2); これで要素数0、初期容量2の可変長リストが出来る。 要素数が少ないならLinkedListより実行時間もメモリも安い。
70 :
デフォルトの名無しさん :2008/10/12(日) 17:58:37
JDKはやっぱりJava SE 6 Update 10 Betaが良いのかい? OSがWin98で主にアプリケーションソフトを作る場合
Win98用のJRE5は見たことあるが、JDKってあったかな・・・
JTextPaneで自分の環境を弄らずに独自のフォントを扱おうと思っています。 Font.createFontで独自フォントを生成してJLabelなどに表示することはできます。 しかし、ファミリ名から独自のフォントを呼べず、 StyleConstants.setFontFamily(SimpleAttributeSet, ファミリ名); で設定できないため、JTextPaneに独自フォントで追加できません。 Fontクラスを使って文字を追加できればいいのですが良い方法はないでしょうか? 下記のような方法でテキストをJTextPaneに追加しています。 sas = new SimpleAttributeSet(); StyleConstants.setFontFamily(sas, "MS Pゴシック"); Document doc = JTextPane.getDocument(); doc.insertString(doc.getLength(), "test", sas);
GraphicsEnvironment#registFont(Font)じゃあかんの? ぐぐって3ページ内に出てくるような質問だぜ。
ありがとうございます、ファミリ名に追加できて解決しました。 違うところを見て回っててGraphicsEnvironmentを見逃してました。
75 :
デフォルトの名無しさん :2008/10/12(日) 20:34:55
public static void main(String[] args) { Scanner stdIn = new Scanner (System.in); int a, b, c; while (true) { try { System.out.println("三つの整数の最大値を求めます。"); System.out.print("aの値:"); a = stdIn.nextInt(); System.out.print("bの値:"); b = stdIn.nextInt(); System.out.print("cの値:"); c = stdIn.nextInt(); break; } catch (InputMismatchException e) { System.out.println("整数値を入力してください。"); } } int max = a; if (b > max) max = b; if (c > max) max = c; System.out.println("最大値は" + max + "です。"); } 例外絡みが原因みたいなんですけど、どこがおかしいのでしょうか?
あなたの日本語がおかしい。
77 :
デフォルトの名無しさん :2008/10/12(日) 20:47:01
エクリプスで、} catch (InputMismatchException e) { の行に ×マークがついてるんですがどう直せばいいのでしょうか?
78 :
デフォルトの名無しさん :2008/10/12(日) 20:57:02
自分が使いやすいように専用のペイントみたいなものを作りたいと思っているのですが、 javaで可能でしょうか? また、可能でしたら何から始めればよろしいでしょうか?
79 :
デフォルトの名無しさん :2008/10/12(日) 21:05:27
80 :
デフォルトの名無しさん :2008/10/12(日) 23:20:25
>>79 ____/ ̄ ̄
/ │ ̄\__ ゴゴゴ・・・
/
.. 、 ,_
 ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・
___/ ̄へ√⌒l⌒´ ̄ ̄\_
´ / \
_ ./ ̄ ̄ ̄\ /
__ `ソ/ ─ ─ \/ ̄/
\/゚ (●)。 (●) \/ rへ,ノ 断る!!!
__>-へ| i (__人__) |ノ :.\_
.:/从へ、.゚` ⌒´o.ノ从rーヘ_
_::ノ :ノ`⌒Y⌒´:: \
.::┘ :│ ゚
83 :
デフォルトの名無しさん :2008/10/12(日) 23:41:35
>>78 買った方が安いし時間の節約になりますよ。
Javaについてまったくの初心者(C言語は多少やったことがある)が 挑戦するのにいい参考書があったら教えてほしいです
>>71 JDK5のいくつかだったか以降はXPSP2未満だとインスコ時に警告出るよ。
XPSP1にインスコしようとしてはまった事がある。
sunのページにはそういうこと一切書かれてないが。
86 :
デフォルトの名無しさん :2008/10/13(月) 14:04:10
JDK5インスコしたらJavaディレクトリの中には jdk1.5.0.16 jre1.5.0.08 jre1.5.0.16 の3つのディレクトリができてるけどjre1.5.0.08は削除しても良いのかな?
それは前からあったものだと思われ 古いバージョンの消さないから 削除してよいよ
消しても良いよね 俺、不安で最近まで取っておいた
89 :
デフォルトの名無しさん :2008/10/13(月) 14:50:20
jre1.5.0のマイナーバージョンだからほとんど同じだけど、jre1.2とjre1.5 jre1.6 とかよく混在させているよ。 昔のjdk1.1.8とかなくなると、その環境で引き受けたクライアントもいるから開発するのにかなり困るし。 javacのオプション使ってもいいけど。
90 :
デフォルトの名無しさん :2008/10/13(月) 15:09:19
jarファイルをgetClass().getResourceAsStream()で呼んでも 拡張子が独自のものだと読めないんでしょうか?
91 :
デフォルトの名無しさん :2008/10/13(月) 15:09:49
修正 jarファイル内のファイルをgetClass().getResourceAsStream()で呼んでも 拡張子が独自のものだと読めないんでしょうか?
読めないの意味が分からん。戻り値はInputStreemだろ
JavaのJFrameについて質問です.
Jungというネットワーク図を描画するライブラリと,JFrameを使って可視化ツールを
作っています.
JFrameを継承したJungSampleというコードを使用して,その中でaddメソッドを使用して
JungのコンポーネントをJFrameに登録して,JFrameに図を描画しています.
http://www.techscore.com/tech/Others/Jung/02.html こののサンプルコードをそのままコピペしました.
やりたいのは,JFrameに描かれたすべての描画をいったん全部消して,また新しい図を
描画したいのですが,これはどうすればよいのでしょうか?
removeメソッドなどを使ってみましたが,うまくいきません.
どなたか教えてください.
>>94 マニュアル嫁って話ですね...すみませんありがとうございます.
JLabel label = new JLabel("test") { protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); super.paintComponent(g2d); } }; 小さい文字にアンチエイリアスをかけたいのですが、とあるところに落ちていたこのソースが機能しません。 大きな文字の場合、VALUE_TEXT_ANTIALIAS_OFFをしてもアンチエイリアスがかかるため、 方法そのものがおかしいのかなと思っているんですが、どうなのでしょうか。 どこかでSystem.setProperty("awt.useSystemAAFontSettings", "on");をすると小さい文字にもアンチエイリアスがかかりますが、一つのコンポーネントにのみかけたいのです。 また、JTextPaneを使いアンチエイリアスのかかった文字とそうでない文字を混同して表示させたいのですが、良い方法はありますか? もしJTextPaneで問題があるなら他のコンポーネントでも構いません。
アノテーションに@Overrideがあるのに@Implementsが無いのはどうして?
>>97 実装してないとちゃんとエラーになるから。
Overrideの場合は間違ってもエラーにならず気が付きにくい。
1000行あるファイル読込を高速に行うためにFileChannelを使おうと思っているのですが、このファイルを一行ずつ処理する方法はありますか? BufferedReaderを使った方が簡単なんですけど遅くてなんとも
読み込みながら処理するなら高速に読み込む意味がないんではないかい 全部を一気にメモリに読み込んでから処理すればいいじゃん 1行のサイズが1GBありますとかじゃないんでしょ?
101 :
デフォルトの名無しさん :2008/10/14(火) 13:21:29
何かのプログラムをコンパイルしようとしても オーバーライドしませんってのが出てエラーになっちゃうんですが どうすればいいですか?
102 :
デフォルトの名無しさん :2008/10/14(火) 13:24:14
ちなみに以下のプログラムでなんですが import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ExpButton2 extends JFrame{ public Container container = null; public JToggleButton b1,b2; public Icon icon1 = new ImageIcon("pin1.gif"); private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36); public ExpButton2(){ super("ExpButton_2"); container = this.getContentPane(); container.setLayout(null); container.setBackground(Color.gray); container.setForeground(Color.red); b1 = new JToggleButton("ButtonA",icon1); b1.setVerticalTextPosition(SwingConstants.BOTTOM); b1.setHorizontalTextPosition(SwingConstants.CENTER); b1.setSize(80,60); b1.setLocation(40,30); b1.setVisible(true); b1.setOpaque(false); b1.setBorderPainted(true); b1.addActionListener(lsn); container.add(b1);
103 :
デフォルトの名無しさん :2008/10/14(火) 13:27:59
b2 = new JToggleButton("ButtonB",icon1); b2.setVerticalTextPosition(SwingConstants.BOTTOM); b2.setHorizontalTextPosition(SwingConstants.CENTER); b2.setSize(80,60); b2.setLocation(120,30); b2.setVisible(true); b2.setOpaque(false); b2.setBorderPainted(true); b2.addActionListener(lsn); container.add(b2); addWindowListener(new WindowEvevtHandler()); setVisible(true); } static ActionListener lsn = new ActionListener(){ public void actionPerfomed(ActionEvent e){ String pushedButton = e.getActionCommand(); System.out.println(pushedButton); //if(pushedButton.equals("make mean 1")) method1(); //else if(pushedButton.equals("make mean 2")) method2(); //else if(pushedButton.equals("ReadFile")) method3(); //else if(pushedButton.equals("SaveToFile")) method4(); } };
104 :
デフォルトの名無しさん :2008/10/14(火) 13:29:54
class WindowEvevtHandler extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } } public void paint(Graphics g){ super.paint(g); g.setColor(Color.blue); g.setFont(font); g.drawString("message",40,160); } public static void main(String args[]){ new ExpButton2(); } }
>>100 読込完了->処理なんで少しは早くなるのではないかと思って
使ってるのが化石PCなのが最大の原因な気がしなくもないですけど
そして自己解決
StringBuffer buf=null;
FileChannel fis = new FileInputStream(ファイル名).getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int)fis.size());
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
for (int i=0;i<buffer.capacity();i++){
if((char)bytes[i]=='\n'){
String str=buf.toString();
//
//ここに処理が入る
//
}
buf.append((char)bytes[i]);
}
でよさそうですね
お手数おかけしました
>>105 素直に BufferedReader 使った方が速いんじゃ?
BufferedReaderのバッファサイズを大きめにとれば解決しような予感
109 :
デフォルトの名無しさん :2008/10/14(火) 16:43:35
プログラムを作ってみたいのですが やっぱりJAVAがいいんでしょうか。 C言語等と比較して何で作ったら良いか迷っています。
Javaの質問スレで聞いたら、Javaとしか答えは返ってこないよ。 どんなプログラムを作りたいかで適切な言語は変わってくる。 状況によって複数使い分けるのがいまどきのってやつさね。
>>109 周りにすぐ質問できる人がいる言語にしとけ
いちいちここに書かれても面倒だからな
SwingのjTableのヘッダーにjPanel(jComboBox,jLabelを配置) を埋め込んだのですがコンボがうまいこと動作しません 誰か実績ある人おりませんですか。
未来のないSwingなんかで四苦八苦するのは時間の無駄
117 :
デフォルトの名無しさん :2008/10/15(水) 04:17:15
うんち
118 :
デフォルトの名無しさん :2008/10/15(水) 04:23:43
質問です この、ソースコードで理解できない部分がありますので 助言。お願いいたします。 class Sample7_3 { public static void main(String args[]) { int test[] = new int[5]; test[0] = 80; test[1] = 60; test[2] = 22; test[3] = 50; test[4] = 75; for(int i = 0; i<5; i++){ System.out.println((i + 1) + "番目の人の点数は" + test[i] + "です。"); } } } これを、実行すると"test[i]"が、80や60など点数に変わるのか理解できません。
>>118 javaの入門書見てそれでもわからんかったらもう一度来い
釣りにしてはひどいな
フォームを利用してDBへのデータ入力をしたり、DBから引っ張ってきたデータで 簡単な統計や、表の作成ができるものを作りたいと思っているのですが、 ローカルで動くものを作ろうとするとJavaの場合どの辺りを勉強するのがいいですか? ざっと調べてみて、現在JDBC(+MsSQL)とAWTクラスを利用することを考えていますが、 方向性としてもこんなもんでしょうか
122 :
121 :2008/10/15(水) 21:17:30
すみません、一応PHPなら経験があるので もしPHPのようにHTML吐いてブラウザベースでやる方法が 別にあるなら教えていただきたいですm(;_ _)m
123 :
デフォルトの名無しさん :2008/10/15(水) 22:29:53
JavaのSwingのキーイベントに関して2点質問があります。 (1)JFrameの上にJTextAreaとJButtonがあります。 JTextAreaにフォーカスがある時にTABキーを押下すると テキストエリア内にTABが入力されます。 これをTABが押下されたらJButtonにフォーカスを遷移させるには どうすればよいでしょうか? (2)質問(1)に関連して、JButtonにフォーカスがある場合、 Enterキーを押下したら特定の動作をさせるには どうすればよいでしょうか? よろしくお願いいたします。
124 :
123 :2008/10/16(木) 08:09:33
出かける前に、昨晩解決したので書いときます。 (1)はJTextAreaおよびJButtonにキーリスナーを登録し、キーイベント(keyPressed)を拾って 仮想キーコードがTABだった場合にトラバーサルを次に進めるようにしました。 (2)も同様にキーイベント(keyPressed)を拾って、仮想キーコードが ENTERの場合にJButtonがフォーカスオーナーであれば 特定動作をさせるようにしました。 以上。
>>124 直接KeyEventを拾うリスナを新たに書くよりも、折り返してるのでちょっと見づらいけど、
JTextArea area;
JButton button;
area.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
Collections.singleton(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)));
area.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
Collections.singleton(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK)));
InputMap map = button.getInputMap();
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
map.get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0)));
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true),
map.get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true)));
みたいに既存の機構を利用したほうが統一感があるかも。
JTextAreaの方はここでは簡単のために元々のCTRL+TABやSHIFT+CTRL+TABを上書きしてるけど、
元のキーも活かしたいなら新たにSetを作って元のと新しいのと両方をaddすればいいと思う。
getFocusTraversalKeysが返すSetは変更不可なので。
JButtonの方は元々SPACEでアクションを起こすようになっているので、
押された時と離された時の両方をSPACEに関連付けられた名前に合わせる。
こちらは追加なのでSPACEでもアクションを起こす。
質問させてください javaのプログラムで整数を引数として与えて、その整数をアスキーコードとして持つ文字を 戻り値として得られるようなメソッドはあるのでしょうか?
charでキャストでいいんでね?
>>126 int i = 65;
char c = (char) i;
System.out.println(c);
>>127 >>128 できました!
さっきまで自分では
>>128 さんのソースの2行目の部分をStringにしてたからできなかったんです
助かりました!ありがとうございました!
130 :
デフォルトの名無しさん :2008/10/16(木) 22:12:20
質問です。 class Aクラス名<Bクラス名>{ … } みたいなクラスの宣言を見たのですが、 "<"+">"で囲まれている部分は、どんな意味があるのですか? 教えてください。
クラステンプレートでぐぐれ
ここjavaスレだよな・・・
デバッグで何か便利なものがあったら教えてください Eclipse、J2SE、500行~5000行程度、非マルチスレッド、非GUIプログラムで処理速度、メモリ使用量改善と予想外の出力結果が出てくる時のデバッグ想定してます。 自分で調べた限りだと ソースで流れを追う println、assertを入れまくる toStringを実装する EclipseでbreakPoint/一時停止して変数の値、関数の呼び出し状況を見る、 hprofで呼び出し回数の多い関数を調べる
Genericsかジェネリックスで調べると良いよ 自分の認識だとObject型へのキャスト、Object型からのキャストを減らすもの ここのキャストはintをdoubleに変換するやつじゃなくてね
135 :
デフォルトの名無しさん :2008/10/16(木) 23:10:20
136 :
131 :2008/10/16(木) 23:39:57
>>137 java用のlintってfindbugsみたいなのとか?
タイポにいちいちレスしてんじゃねーよ
つまらねえツッコミにいちいちレスしてんじゃねーよ蟲蟲
java勉強しようと思うんだけどコンパイラはどれがいいんですかね? 初歩的な質問ですいません OSはvista(笑)です
143 :
デフォルトの名無しさん :2008/10/17(金) 19:40:53
上達したいです 上達するにはどのようなことをすればいいんですか? オススメ参考書などあれば教えてください。
144 :
デフォルトの名無しさん :2008/10/17(金) 23:29:11
まずは創るJavaを一冊読めばいいよ。 あと俺はきしだタソじゃないよ。
146 :
デフォルトの名無しさん :2008/10/18(土) 01:09:41
public class Sample { public static void main(String[] args) { int i; for (i = 0; i <= 10; i++) { if (i == 5) { break; } System.out.println(i); } System.out.println("finish!!"); } } どうして、これを実行するると 0から実行されるのではなく、1から実行されるのでしょうか? 普通は、0からはじまるのですよね・・・?
>>146 ファイルにリダイレクトしても、0はない?
148 :
146 :2008/10/18(土) 01:14:18
自己解決すた
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class JDialogTest extends JDialog implements ActionListener{ public static void main(String[] args){ for(int i = 0; i < 100; i++){ System.out.println(i); new JDialogTest(null, "hoge", "hogehoge");} } public JDialogTest(Frame owner, String title, String message){ super(owner, title, true); setTitle(title); addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent evt) {dispose();}}); Container c = getContentPane(); c.setLayout(new BorderLayout()); DefaultStyledDocument document = new DefaultStyledDocument(); SimpleAttributeSet attribute = new SimpleAttributeSet(); try{ // この行の有り無しで変化がみられます。。。 document.insertString(document.getLength(), message + "\r\n", attribute); } catch (Exception e){e.printStackTrace();}; JTextPane tp1 = new JTextPane(); tp1.setDocument(document); JScrollPane jsp = new JScrollPane(tp1); jsp.setPreferredSize(new Dimension(520, 320)); c.add(jsp, BorderLayout.CENTER); JButton bOK = new JButton("OK"); getRootPane().setDefaultButton(bOK); bOK.addActionListener(this); c.add(bOK, BorderLayout.SOUTH); pack(); Toolkit tk = Toolkit.getDefaultToolkit(); setLocation((tk.getScreenSize().width - getWidth()) / 2, (tk.getScreenSize().height - getHeight()) / 2); setAlwaysOnTop(true); bOK.requestFocus(); setVisible(true); } public void actionPerformed(ActionEvent ae){this.setVisible(false);} }
150 :
149 :2008/10/18(土) 01:45:27
質問です。
>>149 のプログラムは、
同じモーダルダイアログをループで表示させていくプログラムですが、
// この行の有り無しで変化がみられます。。。
document.insertString(document.getLength(), message + "\r\n", attribute);
この行があると、数回目で表示されなくなり停止します。
何が悪いんでしょうか??
ちなみに、上の部分をコメントアウトすると、正常に動きます。
アプリレットを作ってるんですが TextFeildとBottonの位置の指定の仕方がわかりません 初歩的な質問ですがよろしくお願いします
jdkのダウンロードページが繋がらないんだけど、何かあったのかな?
update10が正式リリースされて集中するアクセスを捌ききれないとか リリース内容に何か問題があって黙って直している最中とか
JDKつながんねー
実行中のJavaで書いたアプリケーション(MyApp)を別のプログラム(MyMonitor)から操作するにはどうしたらいいでしょうか? 今考えてるのはMyAppにTomcatなどのWebサーバ機能を持たせて、MyMonitorからHTTP通信などで連携する事を考えてるのですが・・・ ちなみにMyMonitorはjavaでかかれるとは限りません 目的はMyAppからSwingで書いたGUIを分離することです
スレッドがどこからも参照されなくなったことを 自身のスレッドが検知したいのですがどうしたらいいのでしょうか?
スレッドの参照とかいってるけど、それはただのオブジェクトの参照ではなくて? ワーカースレッドの空きを言ってるなら、キューが空ならスレッドも仕事してないってわかるでしょ。
>>159 例えば下のように変数aは途中でnullを代入してますが、
この時点でスレッドはどこからも参照されなくなりました。
参照されなくなったスレッド自身が、自分誰からも参照されなくなった!と判断したいのです。
Thread a = new Thread( new MyRunnable() );
a.start();
a = null;
GCじゅありませんが、誰からも参照されなくなったらというのを判断するのは出来ないのでしょうか?
>>96 が未だ解決しないのですが同じような事やった方はいませんか?
>>96 は、Graphics2D#drawString をやったときに表示される文字に
アンチエイリアスがかかるだけと思われ
テキストの設定は別
>>160 スレッドが走ってる間は常に参照が保持され続けている
Thread.currentThread() でそれが返ってくるし、スレッドグループにも保持されている
スレッドが停止しない限り、誰からも参照されなくはならない
コンポーネントの文字にAAかけるのはawt.useSystemAAFontSettingsかJDK6以降ならデフォでかかってる。
165 :
デフォルトの名無しさん :2008/10/18(土) 23:12:53
Java入門するのにオススメの本は何ですか? 教えてください。 他にHSPとRubyを触っています。(こちらも実用レベルではないです) 言語初心者ではないという情報だけ。
まずは創るJavaを一冊読めばいいよ。 あと俺はきしだタソじゃないよ。
167 :
デフォルトの名無しさん :2008/10/19(日) 00:29:49
ありがとうございます。 あと、携帯アプリを作りたいと考えているのですが、 携帯アプリでJavaを入門するより、普通の入門書から入った方がいいですかね?
>>169 documentとattributeをJDialogTestのインスタンス生成する度に作っているからじゃない?
この二つをprivate staticでそれぞれ一個だけ作ってやって、setVisible(true)のあとで
document.remove(0,message.length()+2); とかやってみれば?
昨日からGUIの作成について勉強してます。 eclipseを使用しており、Swingを用いて単純な電卓を作成したのですが、 それをeclipseから独立したアプリケーションにするにはどうしたらいいんでしょうか? 初心者なんで低レベルな質問で申し訳ないです。
Eclipseは最近触ってないから合ってるか分からんが、 ようはJARに出来れば良いんだから、 プロジェクトを右クリックしてメニュー探して見ればいい。
>>171 ファイルメニューorプロジェクト右クリック>エクスポート>Java>JARファイル
eclipseスレに誘導しろよ
ttp://www.wikiroom.com/java/index.php?FrontPage WikiRoom?からWikiHouse?に移動します。問題がある場合は 10/21 までに support[at]wikiroom.com までメールをください --- WikiRoom
だって
しかし今年になってwikiの更新頻度が極端に落ちたね
春に自分が更新した後夏の間ちょいとサボってて秋に久しぶりに見たら
その間ここは2スレぐらい進んでたのに1件しか更新されてなかった
178 :
デフォルトの名無しさん :2008/10/19(日) 18:34:56
JFrameのウィンドウをsetVisible(true)にした時、 ウィンドウを画面の一番手前に持ってくるには どうすればいいでしょうか?
>>152 ,
>>153 ,
>>155 まだJDK6のダウンロードできないね
でも英語の方のダウンロードページからは今普通に落とせた
日本語ページからの接続をサーバがうまく処理できてないみたいだ
JTableについて質問です。
http://www.javadrive.jp/tutorial/jtable/index14.html このページに画像をセルに表示する方法が書かれていますが、
画像をセルではなく、一行全体に表示するようなことは可能でしょうか。
目的は、一行全体に画像を表示することで、
「ここから下には○○系のデータが並んでいますよ」
ということをユーザーに分らしたいのです。
要はテーブルの任意の行に見出しを作りたいのです。
画像が不可能である場合は、テキストの描画でも構いません。
TableCellRendererは、行ではなくセルを対象にしているので、
この場合には使えないと思っています。
>>180 モデルはどうしてるの?
その行の各セルに、「この行は見出し行ですよ」って示すようなデータ入れるの?
うは。BasicTableUIのpaintCell書き換えて手軽にやろうと思ったけどprivateなんだね。 ソースこぴって、モデルから取得したデータが行見出しデータなら自前の見出しレンダラへ描画を委譲。 これでできるっちゃできるよ。
>>181 回答ありがとうございます。
見出しとする行に入れる数字の値は問いません。
その数字はセルに設定するつもりがないからです。
要は下のようなテーブルを
1 2 3
4 5 6
7 8 9
次のように表示したいのです。
1 2 3
4 5 6
--2007年-- (←のような見出しを追加したい)
7 8 9
イメージとしては、row == 2のときに見出しを描画するコードを記述
するものなのですが、このような事は可能でしょうか。
>>182 回答ありがとうございます。
調査します。
>>182 BasicTableUIのpaintの処理をコピーし、
super.paintでデフォルトの描画をしてから、
Graphicsを使って任意の行を描画するようにしました。
助言なしでは実装できなかったと思います。
本当にありがとうございました。
スレチかもしれないけどお勧めの本とかないですか? 当方、全くの初心者です。JAVAじゃないけどVBで いくつかソフトを作ったぐらいであとは何もやってません。
>>184 終了してるが、その場合は無理に全部1つのJTableに入れずに、
各年毎のJTableと見出しのJLabelをBoxに入れるのがいいような気がする。
RMIで呼び出された側で呼び出し側のIPを知る方法はありますか?
バイナリファイルの読み書きで、byte型変数・配列で読み書きしたらうまくいかなくて、 たぶん符号ビットのせいだろうと思ってint型の下位16ビットだけを使うようにしたら上手くいったんだけど、 もしかしてそんな面倒しなくてもchar型でやればOKだったりする? あとbyte型だとうまくいかなったのは符号ビットのせいって考えはあってる?
あ、16ビットじゃなくて8ビットか。
for文の範囲指定の値は、↓の用に代入してもOKですか? int i = 10; for(int n = -i; n >= i; n++){ }
IE7.0とFirefox2.0とFirefox3.0でJavaが動かない場合の解決法 理由:IE7.0に入れられたWindows Live系のアドオンがJAVAと競合している。 Internet Explorer 7のメニューから[ツール] → [アドオンの管理] →[アドオンの有効化または無効化]を開く ・現在 Internet Explorerで読み込まれているアドオン ・Internet Explorerで使用されたアドオン ・許可なしで実行されるアドオン ・ダウンロードされたActivwXコントロール(32ビット) を全部見て調べる ○Sign-in Helper(Windows Live Messengerインストールで入れられる) →無効にする ○Windows Live Toolber helper(Windows Live Toolbarインストールで入れられる) →無効にする
>>190 なにがOKなんだ
それじゃループ回らないだろ
>>187 そんなもん気にしなくていいようにRMI使ってるんじゃないのか
>>188-189 どういうコードでどうなると思っていてどうなったから「うまくいかない」となったという説明とコードを書け
>>187 java.rmi.server.RemoteServer.getClientHost() を使え。
前スレでもあったな、この質問。
火狐で一応Java動いてるがかなり動作が怪しい ブラウザで更新ボタン押すと高確率でクラッシュする IE7なんて使ってないし、コンパネでネットワーク設定→直接接続もやってるのに
全て0か1かで構成されている2進数表記された文字列(例: number1 number2・・・numberN) をコマンドラインから入力する。その文字列を数値に変換し、合計を計算し、2進数表記の文字列に変換するプログラムを作成しろ。 ただし次の機能は使ってはいけない 1 文字列の加算 3 Integerクラスなどのラッパークラス 4 DecimalFormatなどの書式変換クラス 2 System.outまたはSystem.errのprint系メソッドで、Stringの値を受け取るもの以外 という風なJavaプログラムの課題を出されているのですけれど 文字列を数値に変換する方法が分かりません。教えていただけないでしょうか?
>>198 文字列から文字を1つずつ取り出す
・・・ char c = s.charAt(i) 等
各桁ごとに文字を数値に変換する
・・・ if (c == '0') x = 0;
else if (c == '1') x = 1;
else throw new IAE(); 等
各桁の数値を足し合わせる
・・・ n = n * 2 + x; 等
>>199 ありがとうございます。
一文字ずつ取り出すのですか、思いつきませんでした。
javaのウインドウの色を取得したいのですが、 SystemColor.windowは白を返すようです。 SystemColor.controlは色が違いますし...。 環境windowsです。
ウィンドウの色とは? ウィンドウのどのへんの色?
失礼しました。 ボタンやラベルなどを張り付ける領域です。
frame.getBackground() UIManager.getColor("control")
サンクスです。
IPv4や文字コード問題など当初仕様決めた人は 失敗した~人生の汚点だぁって死ぬまで後悔するんだろうか。
当時はそれが最高だと思ったんだからしょうがない。 過去も未来も変わらないのは傘とワイパーとカブくらいだろう。
新発明「ワイパーつきの傘」
210 :
デフォルトの名無しさん :2008/10/22(水) 12:54:39
コンパイルしようとしても不正な文字ですというのが出てコンパイル 出来ません どうすれば良いですか?
211 :
デフォルトの名無しさん :2008/10/22(水) 12:55:33
ちなみに以下のプログラムです import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.*; public class ExpList1 extends JFrame{ public JList list0,list1; public JScrollPane scrollPane; public JLabel lb1; public Container container = null; private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36); private Font font2 = new Font("serif",Font.BOLD,18); public ExpList1(){ super("ExpList1"); setSize(300,320); container = this.getContentPane(); container.setLayout(null); container.setBackground(Color.gray); container.setForeground(Color.red); ListeSelectionListener lsl = new ListListener(); list0 = new JList(); list0.setSize(180,60); list0.setLocation(40,70); list0.setFont(font2); list0.setForeground(Color.bule); container.add(list0);
212 :
デフォルトの名無しさん :2008/10/22(水) 12:56:56
String[] sdata = {"aa","bb"}; list0.setListData(sdata); list0.setSelectedIndex(1); String[] name = {"aiba","iba","uba","eba","oba","kaba","kiba","kuma"}; list1 = new JList(name); list1.setSelectedIndex(0); list1.setSelectionForeground(Color.red); list1.setSelectionBackground(Color.orange); scrollPane = new JScrollPane(list1); scrollPane.setSize(180,160); scrollPane.setLocation(40,80); scrollPane.setVisible(true); container.add(scrollPane); list1.addListSelectionListener(ls1); lb1 = new JLabel(); lb1.setSize(180,60); lb1.setLocation(40,250); lb1.setForeground(Color.red); lb1.setFont(font); lb1.setVisible(true); container.add(lb1); addWindowListener(new WindowEvevtHandler()); setVisible(true); }
213 :
デフォルトの名無しさん :2008/10/22(水) 12:59:16
class ListListener implements ListSelectionListener{ public void valueChanged(ListSelectionEvent e){ lb1.setText((String)list1.getSelectedValue()); } } class WindowEvevtHandler extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } } public static void main(String args[]){ new ExpList1(); } }
下記のプログラムについて質問です コンパイルしようとすると<identifier>がありませんと]がありませんというエラーが出ます int[] s = new int[3]; s[0] = 0; s[1] = 1; s[2] = 2; の部分を int[] s ={1,2,3}; に変えればエラーが無くなるのですがこれはなぜでしょうか? また、上のように後で別々に代入するにはどのようにすればいいのでしょうか? class tes{ int[] s = new int[3]; s[0] = 0; s[1] = 1; s[2] = 2; public void show(){ for(int i = 0;i < s.length;i++){ System.out.println(s[i]); } } public static void main(String[] args){ tes l = new tes(); l.show(); } }
>>215 クラスの中に直接
s[0] = 0;
のような実行コード (文) を書くことはできません
文はメソッドの中にしか書けません
別々に書きたいならコンストラクタでやればよろしい
>>216 ありがとうございますコンストラクタで解決しました
いかにもjavaの基礎をすっ飛ばして勉強した間違いだったなこれ
218 :
デフォルトの名無しさん :2008/10/22(水) 22:03:07
ど素人なんで質問3連発させてください。 ①JAVAではC見たいに引数や戻り値をconstに出来ないのでしょうか? public byte[] getAddress() { return m_address; } この場合、m_addressを変更されたくない場合はコピー作って返すしかないんですか? ②文字列の全てのスペースを消す楽な方法ないでしょうか。trim()は前後しかやってくれないので。 ③配列をenumeration型にしてforで回したいのですが、変換する楽な方法は無いですか?
219 :
デフォルトの名無しさん :2008/10/22(水) 22:03:26
poiでマイクロソフト以外のファイルを扱うことはできるでしょうか? いろいろ調べた結果よく明確にわかる資料がありませんでした。
>>218 1 無理。
JDK7で @ReadOnly みたいなアノテーション付けられるようになるらしいけど、
それまでは防衛的コピー返すか、Immutableなオブジェクト返すかの二択。
2. "文 字 列".replaceAll("\\s", "")
3. Collections.enumeration(Arrays.asList(array))
>>210 エスパー風に答えるなら
-encodingを使うこと
>>218 配列は普通に for でまわせるだろ?
何で型変換が必要なんだ?
223 :
デフォルトの名無しさん :2008/10/22(水) 22:25:49
>>220 早いレス、有難うございます。
①C++からJAVAに移ったんでconst出来ないのに違和感がありまして。
やっぱり基本無理なんですね。
②タブや全角スペースなど空白全般となると面倒そうですね。基本地道に取り除くしかなさそうと…
③コレクションに格納しないと、やっぱり無理ですか。
無駄なコピーは避けたかったのですが。
でも、イチイチenumeration継承させたクラス作るくらいならそっちの方が楽そう。
どうもありがとう御座いました★
>>222 ループをenumeration用と配列用で分けたくなかったので。
enumerationがメインのループでして、
補助的に配列も突っ込む予定でenumerationに出来たら楽だなぁと考えた訳です。
>>224 1.5以降なら拡張 for 構文があるから配列と Iterator でほとんど一緒。
>>225 enumeration⇔Iterator変換はありますかね?
メインで取得する型enumerationなもので。ループもenumerationベースになっております。
>>226 Enumeration 型って Iterator 型の間違いだと思ったけどマジなのか。
新しく実装する場合は Iterator にしろって公式ドキュメントにあるから
Enumeration を Iterator に置き換えたほうが良いと思う。
もう Enumeration で動いてどうしようもないなら
Jakarta の IteratorUtils.asEnumeration を使うとか。
すまん。今は Apache Commons だったな。
>>227 新しいライブラリ追加するほどディープなループじゃないんで、
簡単な方法が無いならそこの中だけ関数として切り出します。
ある数"present"のnビット目を反転させた数"next"を得るには int next = present^(1<<n); という方法があることを習ったのですが、 ある数のnビット目が0であるか1であるかを知るためにはどのような方法があるのでしょうか?
>>230 nビット目が1で他が0であるビット列との論理積をとってそれが0かそうじゃないか
なるほど!! ちょっとビックリというか感動しました、ありがとうございます!!
>>226 機能は同等なんだからラップクラス作ればおk
>>233 そこまで手間を掛けるか、ループ二重持ちかなんだけど、
ラップクラスつくほどの物ではないんで
>>234 手間かかるか?
機能一緒だからメソッド委譲するだけだと思うが。
>>231 presentのasdf[n]ビット目が0であるならnextが加算され、
1であるならばnextが減算されるコードを書きたかったのですが
if ((present && (1<<asdf[n])) == 0){
next = next + 1;
} else {
next = next - 1;
}
と書いたところ
"&&はintで未定義です"とエラーが出ました
どう書けばいいのでしょうか?
>>235 4行程度のものにクラス作るのは…
別にループ作っても8行プラスα程度のものなんで。
240 :
デフォルトの名無しさん :2008/10/23(木) 02:21:29
javaのstring bufferを今勉強していて課題を出されてわからないところがあるんですが 仮にs1に「abcdefg」と入力して「abc」まで取り出し、その取り出した「abc」の後ろに 「WWW」を連結させて「abcWWW」としたいのですがどのようなメソッドを指定すればいい か分りません。説明下手ですがお願いします。
つ javadoc
条件によって選択できる項目が替わるselectOneMenuと、リンクがあって、 リンクをクリックしたときに、そのときselectOneMenuで選択できる全ての 項目を取得したいのですが、具体的にどうすれば良いかご教授願います。
呼び出されたメソッド自信が自分のメソッド名、引数の型、戻り値の型を知る方法はないですかね? Foo hoge(Bar bar){ //ここで"hoge"とFooの型とBarの型を知りたい }
>>244 逆に聞きたいんだが、それは何に使うんだ?
>>239 確かに && は bool 専用だが、 & との使い分けも楽しいヨ。
SWINGのハックの本を読んでるですけど、サンプルプログラムが地味でつまんないんです。 なにかわくわくするようなサンプルありません? SWINGでこんなことできちゃうの、みたいな。
そこまで他力本願か
250 :
デフォルトの名無しさん :2008/10/23(木) 17:12:10
テキストフィールドに電話番号を入力させ、 正規表現を用いて正しく入力されたか判断したいのですが、 "\\d[-\\d+]*\\d" では、ハイフンが2回連続したときもマッチしてしまいます。 どこがおかしいのでしょうか
"\\d+(-\\d+)*"
252 :
デフォルトの名無しさん :2008/10/23(木) 17:26:09
>>251 丸括弧が使えたのですね。
正規表現についてなかなか詳しいサイトが見つからず四苦八苦していたところでした。
ありがとうございます。
>>249 僕は学習方法の質問はしますが
難問の質問はしないですよ。
自力で解いてきましたから。
予備校などに行く目的は、「効率のよい学習をするため」です。
それと同じです。
かけるべき時間とかけなくてよい時間の峻別が大事なのです。
メモしていいですよ。
メモしましたか?
復唱してください。
スレッドを使って周期的に処理を実行させたいんだけど、どうすればいいか分かりません… 周期的にやるだけならタイマー使えばいいんですが、遅延が生じないようにしたいんです 上手く伝えられるか分かりませんが、20~30msぐらいの間隔である処理を実行するようにしたいんです 色々調べたりしてみましたが、私には理解できず…皆さんどうか力をお貸し下さいorz
っ ScheduledThreadPoolExecutor
Javaじゃ無理じゃね Timerの他にはScheduledThreadPoolExecutorとか、 あとSwingに何かあったような気がするが、 どれもリアルタイム性は保証されていなかったと思う
257 :
デフォルトの名無しさん :2008/10/23(木) 21:41:48
ものすごーく、基本的なことを聞きます。 別にJavaに限ったことでは無いのですが、関数の型宣言でなぜVoid型というのが あるのでしょうか? 値を返さないないのに敢えてVoidを宣言するのは、自由参加の行事の場にわざわざ やってきて、「私は参加しません」と言うのと同じようで無駄な気がするのですが・・・
ぇー リアルタイム性が必要なのか? デスクトップOSにそんなものを期待するのが間違いだろう ドライバでも書くのならともかく・・・
>>257 Javaでは、戻り値の型を書かないと、コンストラクタと区別が付かないからです
class Foo {
public Foo(){} // これはコンストラクタ
public void Foo(){} // これは値を返さないメソッド
}
>>255 調べてみm…早くも挫折しそうだ…
>>256 やっぱムリですかねぇ…
Swingにもタイマーっぽい何かがあったんですが、やはりリアルタイム精度は保障されてなかったです…
>>258 リアルタイム性というか、一定間隔で処理を実行したいだけなんです
具体的にやる内容書くと、一定間隔(数10ms)で文字列の出力を行いたいんです
間隔が短いと一つ前の段階のファイル出力が終わる前に次の文字出力要求が来てしまうとどうなるのか確認したくて…
上手く伝えられた自信がありませんorz
261 :
デフォルトの名無しさん :2008/10/23(木) 21:49:28
変数のとりえる値の範囲を越える場合の対処法はありますかね? 値の最大値より大きい数を扱いたい場合です
Javaは静的型付けだから無理。 大きい数を使いたいなら、考えられる大きい数字を格納できる変数を使うべき。
264 :
デフォルトの名無しさん :2008/10/23(木) 21:59:18
>>260 こんな感じ
Runnable task = new Runnable(){ public void run() {
//ここに実行したいことを書く
}};
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(task, 0, 数10, TimeUnit.MILLISECONDS);
・・・
executor.shutdown();
終わる前に次の時間が来たら、前のが終わってから実行される
>>261 BigInteger や BigDecimal を使う
>>265 おお…わざわざ本当にありがとうございます…!
やはり終わる前に次の時間が来たら待機しちゃいますよね…
というかそれが分かったことが最高の結果です…ホントにありがとう!
>>264 というより、値の大きさに制限が無い(メモリのある限り)
という言語はいくつもある
イベントの質問なんですが、 「ボタンをクリックしたら別のクラスを起動」 としたいのですが、どうすればいいのでしょうか?
>>267 並列実行したいってんなら方法はあるけど、
並列数が際限なく増えていってCPUもメモリも食い潰すだけかと・・・
>>270 並列実行…ではないです、多分。正直良くわからんです…
アバウトな説明ですが
・"output.txt"というファイルに文字列を一行ずつ書き込む
という処理を数10ms間隔で行いたいのです。
その際に、文字列の長さによっては4行目に書き込んでる最中に5行目の内容を書けと命令が来たらどうなるか試してみたかったんです
分かり辛い説明ですいませんorz
>>271 どうなるかわからないようなプログラムは書かない
どうしたいのか、というのがまずあって、それを実現するためにプログラムを書く
その例の場合なら
・4行目に書き込むのが終わるのを待ってから5行目を書き込んで欲しいのか
・4行目と5行目の内容がでたらめに混ざって欲しいのか
・4行目と5行目の書き込みを同時に行いつつも混ざらないようにしたいのか
・俺の想像の及ばないような別の何かか
いくつか選択肢があると思うが、どういう動作をしてほしいのかわからない状態なら、まずそれを整理するべき
>>272 俺としては
・4行目と5行目がでたらめに混ざるのか
・それか俺のあずかり知らぬ謎のエラーが発生するのか
・普通に4行目,5行目と出力される
の何らかの状態が発生するか確認したいんです。
が、その状態を発生させようにも一定間隔で処理が実行させられず…orz
274 :
デフォルトの名無しさん :2008/10/23(木) 22:51:57
JAVAで画面に点を打つとき一番計算量が少ない方法はなんですか?
>>273 わざと並列実行させて挙動を観察して楽しみたいってことなら、
こんな感じで一定時間ごとにスレッド作ってみたらどう
Runnable task = new Runnable(){ public void run() {
//実行する内容
}};
for(;;){
Thread.sleep(10);
new Thread(task).start();
}
>>274 点を何個打ちたいかによる
1個打ちたいだけならfillRectでいいかと
100万個打つなら、BufferedImageでごにょごにょ・・・
BufferedImageについて詳しくお願いします。
>>277 BufferedImage DataBufferInt drawImage でぐぐってください
リアルタイム性云々以前にAPIでサポートされてるナノタイムですらOSが対応してなかったら保証されてないからな。 ソラリスたんとかはいいけどwinは大丈夫なのか?
マルチスレッドで標準出力はflash不要とか思ってて原因しらべるの苦労したなぁ うちの環境では\n書けばflashされたが、明示しなきゃだめなんだね
282 :
デフォルトの名無しさん :2008/10/24(金) 18:36:18
JTextField field = new JTextField(); field.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { try { Thread.sleep(5000); System.out.println("pressed"); } catch (InterruptedException e1) { e1.printStackTrace(); } } }); としているのですが、フィールドに数文字を高速でタイプしたときに、 Pressedが一回だけ表示されるようにするにはどうすればいいのでしょうか。 KeyAdapterが複数立ち上がるときに、新しいのが古いのを棄却するようにしたいのですが。 よろしくお願いします。
>>282 それぞれ独立したイベント(KeyEvent)を、
一つのまとまりとして扱うための仕組み(何らかのオブジェクト)を用意する。
Bufferみたいなもん。あとはタイマー機能やら出力機能やら付けてあげれば。
>>283 うまくいきました!
ありがとうございました。
最近eclipseを使ってjavaを始めました。 int i = Integer.parseInt(args[0]); を使って、コンソール?から数値を入力したいのですが コンソールに何も入力することができません。 どうすれば入力できるようになるでしょうか?
コンソール入力は System.in を使う
eclipse3.3を使っています クラスやメソッドにカーソルを合わせて[Shift]+[F2]を押すと webブラウザでドキュメントを開くのですが これをeclipseで観覧することは可能でしょうか? 他の方法でも何かeclipse自体でドキュメントを開く方法があれば教えてください。
288 :
285 :2008/10/24(金) 21:19:17
>>286 できました。
ありがとうございました!
>>274 System.out.print(".");
OK?
290 :
デフォルトの名無しさん :2008/10/25(土) 02:43:43
Hey!! Good evening Japanese Adult Video Artists!! Do you film good Porno Video? Yes? So, good ! I look forward to watch your Hentai Video ! If Filming your porno video is finished, please teach me!! Good-Bye!!!
291 :
デフォルトの名無しさん :2008/10/25(土) 12:04:41
例外スルーはこんな方法しかないですか? try { port = Integer.parseInt(s); } catch(NumberFormatException e) { }
無理やり関数化する。 port = Integer.tryParseInt(s, -1); static int tryParseInt(string s, int returnValueIfFailed) { try { return Integer.parseInt(s); } catch { return returnValueIfFailed; } }
293 :
デフォルトの名無しさん :2008/10/25(土) 12:56:04
>>293 なんで面倒なの?一回作ったらそれで終わりじゃん。
C#のTryGetValueに比べて効率が悪いから、 Sun JDKのparseIntを元に改良したいんだけど、これってライセンス的にNG? GPL classpath exceptionで公開されてるコードを落として来る方がいいのかな。
>>295 openjdkからパクってくればGPLだけど。
Win32のGetLastError方式でparseIntを実装してみたが、例外処理はさすがに重いね。 以下のベンチでInteger.parseIntは547ms、ラストエラー方式(ThreadLocal使用)は125msだった。 まあ実運用ではこんな性能誤差だけど、コードはちょっとすっきり。 試す場合はJDKのコードを各自で改変してくらさい。 public static void main(String[] args) { String[] input = { "1234", "1234", "1234", "123a", "1234", "1234", "1234", "123a", "1234", "1234", "1234", "123a", "1234", "1234", "1234", "123a" }; long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { int jlen = input.length; for (int j = 0; j < jlen; j++) { // try { // Integer.parseInt(input[j]); // } catch (NumberFormatException ex) { // } parseInt(input[j]); isInvalidByLastFormat(); } } long end = System.currentTimeMillis(); System.out.println(end - start); } public static boolean isInvalidByLastFormat() { FormatResult result = tlformatFormat.get(); return result.invalid; }
質問です コマンドラインに数値を入力する際 x = Integer.parseInt(args[0]); を使っているのですが、何も入力されなかったとき、もう一度入力させるためにはどうしたらいいでしょうか? 上の式をdo~while(args[0]==null) でかこって試してみたのですが、だめでした。
少なくともコマンドライン引数を再入力させることはできん。 コマンドライン引数がそのプログラムの使用に合わないなら、 エラーを返してプログラムを止めてしまうのが通例。 まあユーザとパスワードぐらいなら、中で再入力機能を作るだろうけど。 Scanner in = new Scanner(System.in);とか使えばいい。
>>298 args.lengthが0の時はコマンドライン引数を与える必要があるとの使い方を示して終了させる。
if (args.length == 0) {
使い方の表示;
return;
}
これをmainの最初に行う。
コマンドライン引数をコマンドライン引数として与えられるのは起動する時だけ。
もし、コマンドライン引数が無いときにその旨を表示して引数としてではなく
代わりの何かを標準入力からargs[0]に代入したいのなら、
if (args.length == 0) {
args = new String[1];
引数が無かったので何か入れてねと表示;
args[0] = new Scanner(System.in).nextLine();
}
x = Integer.parseInt(args[0]);
みたいなことをmainの頭でやる。argsをここ以外で使わないのなら、
新たなargsを作らずに直接入力をxに変換してもいいけど。
301 :
298 :2008/10/25(土) 16:28:31
>>299 ,300
なるほど~
コマンドライン引数は、はじめに与えることしかできないのですね
Scanner~に関してはまだ習ってないので
ここでは
if (args.length == 0)
を使い、プログラムを止めてしまう方向でやってみたいと思います。
とても参考になりました。ありがとうございました。
クラスメソッドの中でthisキーワードを使えないは理解できるんですが、superまで使えない仕様は何か理由があるのでしょうか? クラスメソッドであろうとインスタンスメソッドであろうと同じように親クラスを特定できるはずです。
>>302 そんな事いったらクラスメソッドであろうとインスタンスメソッドであろうと
同じように自分のクラスを特定できるはずだから、
this が使えないのも super が使えないのと同じ理由で納得できないと思うんだが。
superにもインスタンス参照が含まれるからでしょ。 protectedなら親クラス指定してアクセス出来なかったっけ?
うぁぁあぁあああ~~~~~!!!! 何で関数が渡せないんだ? 何で関数が返せないんだ?
306 :
302 :2008/10/25(土) 21:08:14
>>303 thisはクラスではなく自分のインスタンスに対して処理してたはずです。
>>304 親クラスにアクセス可能であればsuperが使えるということですか?
まず、あなたはsuperの存在をsuper勘違いしている。
サーブレットについて質問です。 ServletContextスコープのgetAttributeNames()を実行して、 while(Enumerationオブジェクト.hasMoreElements()){ String key = (String)Enumerationオブジェクト.nextElement(); Object val = ServletContextオブジェクト.getAttribute(key); } という風に次々とServletContextスコープにsetAttribute()した物を取り出そうとしたのですが、 key = "WELCOME_File"という謎な初期パラメータが入っており上手くいきません。 解決法っぽいことをご存じの方ご教授下さい。
309 :
308 :2008/10/25(土) 21:40:53
失礼 環境は os:xp tomcat:6.1 です。
>>302 まず、T の上位クラスが S であると仮定する。クラスTにおいて
T.super.name および、super.name は (S)this.name であるように処理される。
コンパイル時に名前解決が出来ない場合、エラーとなる。
まー、thisから逃れられない仕様になっています、と。
311 :
デフォルトの名無しさん :2008/10/25(土) 23:51:55
import java.io.*; public class Sample2_7 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int test[] = new int[5]; System.out.println(test.length + "人の点数を入力して下さい"); for(int i=0; i<test.length; i++){ String str = br.readLine(); test[i] = Integer.parseInt(str); } for(int s=0; s<test.length-1; s++){ for(int t=s+1; t<test.length; t++){ if(test[t] > test[s]){ int tmp = test[t]; test[t] = test[s]; test[s] = tmp; } } } for(int j=0; j<test.length; j++){ System.out.println((j+1) + "番目の人の点数は" + test[j] + "です"); } } }
312 :
311 :2008/10/25(土) 23:53:06
上記のソースの、ソート部分が理解できませんので、解説お願い致します。 for(int s=0; s<test.length-1; s++){ for(int t=s+1; t<test.length; t++){ if(test[t] > test[s]){ int tmp = test[t]; test[t] = test[s]; test[s] = tmp; です。
315 :
311 :2008/10/25(土) 23:59:19
事故解決しますた
316 :
311 :2008/10/26(日) 00:01:55
すみません、やはり未解決で "test.length-1;"は、縦方向の最後が不要だからでしょうか?
317 :
311 :2008/10/26(日) 00:06:16
すみません・・・日本語が変でした "test.length-1;"の、"-1"は縦方向の最後が不要だからでしょうか? あと、"test.length-1;"を"test.length; "こうしても 実行結果が同じになりますが、"-1"にする必要がないと?
最後の s = test.length - 1 のとき、 内側の for(int t=s+1; t<test.length; t++) が何回繰り返されるか考えてみるといいんじゃない
319 :
311 :2008/10/26(日) 00:43:53
レス、ありがとうございます バブルソートでぐぐったりしましたが、理解できません 特に int tmp = test[t]; test[t] = test[s]; test[s] = tmp; これらです・・・・
320 :
302 :2008/10/26(日) 03:00:43
>>310 なるほど・・・内部でthisを呼んでたわけですね。
すっきりしました。ありがとうございました。
スレッドって具体的にどういう時に使うんですか? ある程度大きなプログラムになるとパフォーマンス向上のためにほとんどのメソッドがスレッドになったりするんですか?
処理開始ボタンを押すと「応答無し」になるプログラムあるだろ。 そういうふうになら無いようにするには、処理をするスレッドと ボタンが押されたかどうか判定するスレッド分けておく。 キャンセルボタンで処理を中断できるようにするには、マルチスレッドが必要。
Swingでユーザースレッドでやってはまるんですね。わかります。
すいません「href」ってなんて読むんですか?
Hypertext REFerence?えいちれふ
フレッフ
327 :
デフォルトの名無しさん :2008/10/26(日) 16:25:15
>>305 何をしたいかは分からないけど
リフレクションについて調べれば
なんかのヒントになるかも知らん
エクリプスでjdk1.6.0_07\docs\ja\api\index.htmlを開こうとしたら 「解凍されたファイルであることを確認してください」 って出て開けません>< 解凍はされてると思うんですがこれはどうやったら開けるの?
329 :
>>324 :2008/10/26(日) 16:52:17
330 :
デフォルトの名無しさん :2008/10/26(日) 18:26:23
物凄い初歩な質問させて下さい。 C++でいう void set(int& x) { x = 10; } をJAVAではどうすればいいのでしょうか。
void set(int[] x) { x[0] = 10; }
332 :
デフォルトの名無しさん :2008/10/26(日) 18:32:07
>>331 配列にしないと駄目なんですか?!
うーん…
Javaに参照渡しはないから
>>332 別に配列以外でもいいけど。
Javaでは参照渡しがない上に、標準ライブラリで参照渡しの代わりに使う
標準的な型ってのが用意されてない。だから人によって配列使ったり
AtomicInteger 使ったり、MutableInteger 自作したり、メソッド構造変えたりしてる。
335 :
デフォルトの名無しさん :2008/10/26(日) 19:27:56
>>332-334 Integerとしてarraycopy使ったら何とかなるかなとか試行錯誤しましたが、駄目でした。
配列とかAtomicIntegerとか引数の形を複雑にするのがなんか気分的に嫌なので、
単純な方法が無いなら諦めます。
どうも有難うございました。
ていうか void set(int& x) { x = 10; } javaでこれを使う設計ってない(orやらない)。 out引数とか別にいらないでしょ。
なんでデータ取得するのに、メソッド名が setなんだよ。 そういう意味不明なところから察するに、たぶんやらなくていいことやろうとしてる。
C/C++からなるべくベタっとコードを移植したいという要件も少なからずあるだろうから 設計レベルでやらないから、と門前払いするのはどうかと
その可能性は低い。
int set() { return 10; } でいいじゃん。
341 :
デフォルトの名無しさん :2008/10/26(日) 22:28:42
解決した事に対してしつこいんだって
342 :
デフォルトの名無しさん :2008/10/26(日) 23:08:30
\を\\でPrintしたら¥になるんですがどうすれば\のまま出力してくれますか?
System.out.printlnの話なら Javaのソース側から無理 Fontの問題だからbashやコマンドプロンプトの設定で変える
>>342 Windowなら、chcp 437すればバックスラッシュに。
元に戻すにはchcp 932で。
345 :
デフォルトの名無しさん :2008/10/26(日) 23:41:51
346 :
デフォルトの名無しさん :2008/10/26(日) 23:47:52
>>343 OFile.Printlnの場合もおなじですか?
>>346 OFile.printlnって何か分からないけど、outputstreamとかjava.io.Writerの派生クラスとかつかっても指定できるのはunicodeから変換する文字コードを指定できるだけでFontは指定できない
ファイルに出力した場合はメモ帳等利用するプログラムののフォント設定による。
もしバックスラッシュを表示させるなら、
メモ帳、コマンドプロンプトFont設定を変える
word、pdf等のFont情報を指定できるファイルの構造になるよう出力する
画像に変えるとかとか
if('¥'=='\')//ともに本来は半角
みたいなコードは書けないはず。(文字ごとに別のフォントを設定できるWord等は除く)
無理やりコピペとかでもってくるとどっちかに変るはず(Eclipseとかのフォント設定による)
てか、バックスラッシュと円記号の区別はDPE業界じゃないかぎり必要ないと思う
348 :
デフォルトの名無しさん :2008/10/27(月) 11:48:22
LinuxでJavaのプロセス数がどんどん上がって下がらないです。 Tomcatを使って1つのアプリケーションを動かしていて、 他にはJava使っていないので、そのアプリケーションが原因だと思いますが、 その中のどの部分がどう悪さしているのか?が判らない状態です。 どう調査すればいいのか、検討が付かないので、調査方法などのアドバイスをしてほしいです。 お願いいたします。
Linuxでは、Javaのスレッドがそのままプロセスとして見えるだけです。 常識です。
テキストエディタを作ってるのですけど 右クリックでポップアップメニューを表示させたいのです しかしJTextPaneにaddMouseLisnerは登録できないようなのですが どうすれば良いのでしょうか?
JComponent#setPopupMenu(JPopupMenu) すれば LaF依存の操作でポップアップ表示してくれる。
× JComponent#setPopupMenu(JPopupMenu) ○ JComponent#setComponentPopupMenu(JPopupMenu)
おお、なんだかできそうですね! ありがとうございます、やってみます
適当なスレが見あたらなかったので、ここで質問させてください。 Tomcat5.5のJNDIのスコープに関しての質問です。 Tomcatのcontext.xmlに<Resource>タグでJNDIリソースを 書き、 Webアプリ内で、それを参照しています。 このとき、webアプリ1とwebアプリ2のそれぞれのcontext.xmlで、同一の名前を設定しています。 (Resourceタグのname属性を同じに) その後、name属性以外の情報を変更し、アプリを配備した場合、 それぞれのアプリで設定したcontext.xmlでの内容が反映されるでしょうか? 以前はうまくいっていたと思うのですが、今やってみようとすると うまく動かないので悩んでいます。 よろしくお願いします。
355 :
デフォルトの名無しさん :2008/10/27(月) 15:37:56
以下のソースの違いが、わかりません 結果が同じになりますが、どちらでもいいのでしょうか?
356 :
355 :2008/10/27(月) 15:38:50
import java.io.*; public class Sample2_1 { public static void main(String[] args) throws IOException{ System.out.println("テストの受験者数を入力して下さい"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); //配列要素の数を入力させる int num = Integer.parseInt(str); //必要な数だけ配列要素を準備 int test[]; test = new int[num]; //num分を用意(例:5個[0][1][2][3][4]←配列要素) System.out.println("人数分、入力して下さい"); for(int i=0; i<num; i++){ //numの分繰り返す str = br.readLine(); //キーボードから必要な数だけ点数を入力させる int tmp = Integer.parseInt(str); //←ここに注目 test[i] = tmp; //配列要素に点数を格納する例:5個[0]=1 [1]=2 [2]=3 [3]=4 [4]=5←配列要素 4まで? } System.out.println("出力します"); for(int i=0; i<num; i++){ // System.out.println((i+1) + "番目の人の点数は" + test[i] + "です"); //1回目[0]=10、2回目[1]=20、3回目[2]=30、4回目[3]=40、5回目[4]=50を繰り返していく(出力)? } } }
357 :
355 :2008/10/27(月) 15:39:59
import java.io.*; public class Sample2_1 { public static void main(String[] args) throws IOException{ System.out.println("テストの受験者数を入力して下さい"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); //配列要素の数を入力させる int num = Integer.parseInt(str); //必要な数だけ配列要素を準備 int test[]; test = new int[num]; //num分を用意(例:5個[0][1][2][3][4]←配列要素) System.out.println("人数分、入力して下さい"); for(int i=0; i<num; i++){ //numの分繰り返す str = br.readLine(); //キーボードから必要な数だけ点数を入力させる test[i] = Integer.parseInt(str); //←ここに注目 } System.out.println("出力します"); for(int i=0; i<num; i++){ // System.out.println((i+1) + "番目の人の点数は" + test[i] + "です"); //1回目[0]=10、2回目[1]=20、3回目[2]=30、4回目[3]=40、5回目[4]=50を繰り返していく(出力)? } } }
358 :
355 :2008/10/27(月) 15:41:02
"←ここに注目の部分です"
どちらでもいいよ
360 :
355 :2008/10/27(月) 18:03:50
レス、ありがとうございます。 どうしてなのでしょうか?直接代入するか否かの違いですかね?
そう。そんだけ。
362 :
デフォルトの名無しさん :2008/10/27(月) 19:49:00
インターフェースのメソッド宣言の前に、「@クラス名」と書かれているのはどういう意味でしょうか? public interface Test{ @SomeClass public int getNum(): } みたいな感じです
アノテーション
364 :
デフォルトの名無しさん :2008/10/27(月) 20:01:56
>>363 ありがと。ググったらわかりそうだ。java 5からの機能なのか・・
>>362 今使ってる参考書を捨てなくてもいいけどjdk5の新機能は軽く見ておいた方がいいかと ジェネリックスとか
366 :
355 :2008/10/27(月) 23:16:12
再度、質問で申し訳ありませんが、 どうして、この最後の for(int i=0; i<num; i++){ // System.out.println((i+1) + "番目の人の点数は" + test[i] + "です"); を for(int j=0; j<num; j++){ // System.out.println((j+1) + "番目の人の点数は" + test[j] + "です"); iでなくjとiを変えてもいいのでしょうか?こも、同じ結果になります。
367 :
デフォルトの名無しさん :2008/10/27(月) 23:36:26
質問です try{}catch{}でデータベースから項目を読み込み、System.out.printlnで出力させることはできました このデータベースの項目をapplet上に表示させるのがどうしても出来ないのですが何か手段はありますか?
エラーなく動きゃあ問題ねえだろてやんでー
369 :
355 :2008/10/27(月) 23:48:55
>>368 どうしてか、とても気になりまして・・・
ずっと悩んでいます
371 :
355 :2008/10/28(火) 00:53:26
>>369 レス、サンクスです。
ローカル変数名を変えると、値は違ってくるのではないでしょうか?
では、参考書などでは解りやすくする為に変数名だけを変えていると?
372 :
デフォルトの名無しさん :2008/10/28(火) 00:53:51
Javaを勉強しようとしています。 JavaのSDKをダウンロードしようとしたところ、J2SE1.4.1は終了とのことですが。。 なにからはじめたらよいのでしょうか? 新しいSDKは古いSDKとまったく違うのであれば、新しいほうからはじめたいと思います (たぶん機能追加だと思いますが。) どのSDKからはじめるべきですか?
新しいのから始めたければ新しいのから始めたらいいじゃない。
>>371 >ローカル変数名を変えると、値は違ってくるのではないでしょうか?
なにが疑問なのかよくわからん。
代入した時test[i]なのに取り出す時はtest[i]で無くてもいいのかって質問?
とりあえず、test[j]だとどういう値になると思っているのか書いてみて。
>参考書などでは解りやすくする為に変数名だけを変えていると?
どういう意図があって変数名を変えているのかなんて事、その参考書書いた奴にしかわからんと思うよ。
>>371 箱に付けてるラベルを貼り替えてるだけで、中身が変わるわけじゃないから。
リンゴの入ってる箱に「リンゴ」ってラベルを付けて「あの『リンゴ』の箱取ってきて」って言う場合と、
リンゴの入ってる箱に「ミカン」ってラベルを付けて「あの『ミカン』の箱取ってきて」って言う場合で、
動作に何か違いはあるか?
376 :
355 :2008/10/28(火) 03:40:42
>>374 >>とりあえず、test[j]だとどういう値になると思っているのか書いてみて。
エラーを、起こすとおもっていました。
>>どういう意図があって変数名を変えているのかなんて事、その参考書書いた奴にしかわからんと思うよ。
にかんしても、>>357-
>>357 int tmp = Integer.parseInt(str); //←ここに注目
test[i] = tmp;
と
test[i] = Integer.parseInt(str); //←ここに注目
も、作者の考え次第って事ですね
>>375 はぁ~、そういう事でしたか
377 :
355 :2008/10/28(火) 03:41:34
378 :
355 :2008/10/28(火) 03:49:17
>>375 中身は同じリンゴには、変わりありませんね
動作もラベルが違うだけで、動作自体同じです
コンパイルして実行すると文字化けしてしまうのはなぜでしょう。
>379 keyword> javac encoding
381 :
デフォルトの名無しさん :2008/10/28(火) 11:15:12
ArrayListクラスとListインターフェイスに付いて 質問させてください。 ArrayListクラスを使ったサンプルを見る度に、 次のような記述をよく見かけます。 List ls = new ArrayList(); 基本情報技術者の試験問題に於いては、ArrayListクラスを生成する際、 頻繁にListインターフェイスが用いられています(上記の様な生成記述)。 『 ArrayList als = new ArrayList(); 』で良い気がするのですが、 Listインターフェイスを用いる事で、どの様な恩恵が受けられるのでしょうか? ご存知の方、ご教授ください。よろしくお願いします。
>>381 Listを用いる際に頻繁にArrayListのインスタンスを使用しているだけ
と考えると悩まずに済む、かも?
>>381 後々何かの事情で LinkedList や CopyOnWriteArrayList や Vector に変えたくなっても
共通の List インタフェイスを使っていれば new の部分だけ変えれば済む
Flashでよくある読み込み進捗プログレスバーみたいなものを アプレットで画像を読み込む時にやりたいのですが可能ですか?
可能です
>>381 使いたいのはあくまでListであって、ArrayList型を使いたいわけではないから。
>>381 Polymorphism の典型的なパターン
わからんかったらgoogleに聞きなさい
JOptionPane.showConfirmDialog()のOKボタンは何ピクセルですか?
389 :
381 :2008/10/28(火) 19:27:57
>>382 >>383 >>386 >>387 遅レスになりました。ご教授ありがとうございます。
リスト構造の機能を提供してくれるクラスが多数用意されており、
それらがListインターフェイスを実装している。
何らかの事情により、現在使用しているリスト構造クラスから
別のリスト構造クラスへと乗り換える必要が発生しそうな可能性を持つ
プログラムを開発する時に、そのリスト構造クラスのインスタンスを
Listインターフェイスで初めから管理しておけば、乗り換えが発生した時の
移行が容易になるから。
と言う事ですね。今まで良く分からなかったインターフェイスの存在意義
ですが、少し見えてきた気がします。ありがとうございました。
>>389 このポリモーフィズムはリストに限らず、いろんなんで使うから頭入れといたほうがいいよ。
デザインパターンとか、そのうちやるだろうけど。
>>384 ですが、具体的にどうやればいいんでしょうか?
調べた限りだとメディアトラッカーは目的に即してないようですし
通常の非同期読み込みでもデータを受信している間は反応が無いようです
知りたいのは、画像が今全体の何%読み込まれているかという情報です
SWING JProgressBarで検索してみたらヒントあると思うよ!
>>389 詳細に関する情報を積極的に削除することで、
開発者が一度に管理しなければならない情報を減らすため。
この例で、ポリモーフィズム云々は言いすぎじゃまいか
ポリモーフィズム関係ないなら ArrayList als = new ArrayList();で良い気がする
ポリモーフィズム関係あると ArrayList als = new ArrayList(); じゃダメな理由が良くわからん。
1234にnumberFormatでカンマをつけると、1,234というようになりますが、 1,234から元の1234という数字を取得することはできるでしょうか。 よろしくお願いします。
質問です。 JFreeChartに関してなんですが、 ChartPanelをJFrameにaddして表示したときに、 ウィンドウサイズを変更するとチャート上の文字や線も そのサイズに応じて太くなったり細くなったりしてしまいます。 JFrameのウィンドウサイズにかかわらずChartPanel上の文字や線の太さを 一定にしたいのですが、どうやってやるのかご存じの方いませんか?
>>398 JFrameに一旦スクロールペインを貼って、そこに固定サイズのChartPanelを貼ればいいけど
多分そういう意味じゃないよね?
ちょこちょこっとオリジナルレンダラを作るしかないのでは
400 :
デフォルトの名無しさん :2008/10/29(水) 01:48:05
class Car{ int num; double gas; void show1(){ //メソッドを定義しておく System.out.println("車のナンバーは" + num + "です"); System.out.println("ガソリンの量は" + gas + "です"); } void show2(){ //メソッドを定義しておく System.out.println("第二の車のナンバーは" + num + "です"); System.out.println("第二のガソリンの量は" + gas + "です"); } }
401 :
デフォルトの名無しさん :2008/10/29(水) 01:49:40
public class Sample3_2 { public static void main(String[] args) { Car car1; car1 = new Car(); car1.num = 1234; car1.gas = 20.5; Car car2; car2 = new Car(); car2.num = 5678; car2.gas = 21.6; car1.show1(); car1.show1(); car2.show2(); car2.show2(); } } エラーを起こしてしまい、原因がわかりません 訂正お願いいたします
フィールドにpublicつけなさい。というか参考書は選びなさい。その本はごみだ。
403 :
デフォルトの名無しさん :2008/10/29(水) 03:57:40
404 :
デフォルトの名無しさん :2008/10/29(水) 03:58:41
class Car{ int num; double gas; void show1(){ //メソッド System.out.println("車のナンバーは" + num + "です"); System.out.println("ガソリンの量はは" + gas + "です"); } void show2(){ //メソッドを定義しておく System.out.println("第二の車のナンバーは" + num + "です"); System.out.println("第二のガソリンの量は" + gas + "です"); } void showCar(){ System.out.println("これらの情報を表示します"); show1(); show2(); } }
405 :
デフォルトの名無しさん :2008/10/29(水) 03:59:37
class Mikaiketu3{ public static void main(String args[]){ Car car1; car1 = new Car(); car1.num = 1234; car1.gas = 20.5; Car car2; car2 = new Car(); car2.num = 5678; car2.gas = 21.6; car1.showCar(); //クラス外なので、特定が必要であり"caer1."が要る } }
406 :
デフォルトの名無しさん :2008/10/29(水) 04:04:41
を、実行すると C:\sou>java Mikaiketu3 これらの情報を表示します 車のナンバーは1234です ガソリンの量はは20.5です 第二の車のナンバーは1234です 第二のガソリンの量は20.5です 結果を C:\sou>java Mikaiketu3_2 これらの情報を表示します 車のナンバーは1234です ガソリンの量はは20.5です 第二の車のナンバーは5678です 第二のガソリンの量は21.6です したいのですが、どうすればいいでしょうか? 因みに、クラス外でやるのではなく car1.showCar(); car1.show1(); car2.show2(); このクラス内でやる場合です。 void showCar(){ System.out.println("これらの情報を表示します"); show1(); show2(); }
ちなみに
>>400 のコードはC++しか書けない数学者が自分の書いたC++本をjavaにベタ移植してそのまま出した屑本のサンプルな。
ひどs
誤 C++しか書けない数学者 正 C++すらろくに書けない数学者
JAVAでwaveファイルの音量を調整したいのですが可能なのでしょうか? 可能であれば、調節するための関数を教えていただけないでしょうか?
411 :
デフォルトの名無しさん :2008/10/29(水) 10:13:57
プログラムの何かを習得したくjavaを覚えたいと考えています 右も左も分からないのですが、何から始めたらいいでしょうか? いきなり難しい本を買ってもわからないと思います アドレスお願いします
>>410 javax.sound.sampled あたり見てみれば?
413 :
デフォルトの名無しさん :2008/10/29(水) 10:19:58
しまったアドバイスお願いしますですw
>>411 プログラム初心者なら、まず「javaの絵本」
ServletContext に set/geAgttribute でDB接続用クラスのインスタンスを入れて シングルトンみたいにして使ってるんですがこれってよくないですか? jsp では <jsp:useBean id="dbProc" scope="application" class="proc.DbProcessor" /> servlet では proc.DbProcessor dbProc = null; synchronized (context) { dbProc = (proc.DbProcessor) context.getAttribute("dbProc"); if (dbProc == null){ dbProc = new proc.DbProcessor(); context.setAttribute("dbProc", dbProc); } } として使ってます。 DbProcessor はきちんと同期化されていると思います。 デメリットはgetのContextへのロックくらいだと思うんですが、 参照渡ししてるだけなのでさほどオーバヘッドにはなりづらいと考えています。
transactionはどうするつもりなんだろ
そのDbProcessorの作りにもよるから、それだけではなんとも。
418 :
デフォルトの名無しさん :2008/10/29(水) 12:35:53
>>414 回答ありがとうございます!
javaの絵本ですか、ググってみます
>>416 DBのトランザクションですか?
>>417 クラス変数を持たず、
メソッドの集まりみたいなクラスです。
また、どのような設計だとまずいでしょうか?
あの数学者の本は言葉が難しくなってるだけでやさしいjavaとどっこいどっこいだからな。
>>419 (クラス変数でなくても)フィールドでConnectionを持っているとまずい。
Connectionのクローズ、トランザクションのコミット/ロールバックは
どこが責任を持つのか明確でないとまずい。
Connection はインスタンス変数の pool から取得しています。 pool はインストラクタで JNDI でコンテナから取得しています。 close commit rollback はメソッド内で完結させています。
インストラクタ(笑)
やべー素で間違えたwwww超ハズカシイ><
じゃ、概ね大丈夫じゃね? インストラクタ(笑)でDataSourceの取得に失敗すると インスタンス化そのものに失敗するので、そのあたりの例外のハンドリングができていればね。 あとは、Servletでコネクションをどうこうするのが気持ち悪いと思わなければ、
DataSourceの失敗したときにインストラクタ(笑)内で RuntimeExceptionが発生するようにしてあります。 DB処理の部品をContextに持たせて使いたいときに使うって言うイメージなんですが、 普通はどうやって実装するんでしょうか?
427 :
デフォルトの名無しさん :2008/10/29(水) 16:33:25
jtable.getColumnModel().getColumn(i).setCellEditor(new DataEnterFrame()); としようとしてDataEnterFrame extends JFrameだった場合、containerに(JFrameの親の親)windowは addingできませんって怒られるんですけど、JTableのエディタにJFrameを指定することってできないんですか? 仕方がないのでsetCellEditor(new DataEnterPanel())//DataEnterPanel extends JPanelしたら今度は DataEnterPanelのがJTableの該当セル1つ分の大きさまでしか表示してくれないんですが どうすればうまくいくでしょうか?
>>427 ボタンでも入れておいてそれ押したらダイアログ出すとかすればいいんじゃないか?
429 :
デフォルトの名無しさん :2008/10/29(水) 18:03:23
ははぁ、ボタンですか 少し違うんですけど、結局setCellEditorで呼び出されるのは セル上の描画だからWindow(or Frame)は呼べなくて、 エディタでsetValueAtするComponentを呼びつつreturn nullする って方向でもいいのかな? これでモーダルにできたらとりあえずよさそうです そういえばdialogもwindowなのになんで怒られないんだ 最初chooserができるんだから普通にできると思ったんだけどchooserもdialogだったな
430 :
デフォルトの名無しさん :2008/10/29(水) 20:13:03
オブジェクトを 空の配列a(動的)に加える操作ってどうやるんですか? またそのオブジェクトでパブリックしたint型変数k(初期値0)を、 こんなイメージで操作できますか? a[0].k=1
class MyObject { public int k = 0; } public class Test { public static void main(String[] args) { MyObject[] a = new MyObject[1]; a[0] = new MyObject(); a[0].k = 1; }}
432 :
デフォルトの名無しさん :2008/10/29(水) 20:34:42
>>431 動的にしたいのでa配列の要素数の初期値は不定でお願いします。
また引数ありのコンストラクタMyObjectにしたいです。
433 :
デフォルトの名無しさん :2008/10/30(木) 00:03:51
携帯電話で使えるスケジュール機能の付いたカレンダーを作るために、 書店でjavaの本を探してみたのですが、 ホームページで利用する事を目標にした本しか見つけられず困っています。 出来るだけサーバーへのアップはせずに作りたいのですが… javaでカレンダーを作るとき どのような本やサイトを見ると良いか、教えていただけないでしょうか。 プログラム自体全く未経験で初めて触れるので 解りやすいものだと嬉しいです。 初心者以前の質問で申し訳有りませんが、よろしくお願いします。
434 :
デフォルトの名無しさん :2008/10/30(木) 00:51:46
swingでAlwaysOnTopなフレームウィンドウを2つ以上表示した場合、 何か問題が起きるのでしょうか?
特にないよ
>>435 そうなんですか?競合して描画がおかしくなったりするのかと
思ってました。
>>436 実際におかしくなったのかい?
もしそうなら問題を起こすサンプルを
438 :
デフォルトの名無しさん :2008/10/30(木) 04:04:03
jarファイルをjre/lib/extに置くと、 クラスパス通さなくてもロードされると思うんですが、 jre/lib/extに相当するディレクトリを変更したり、 増やしたりってできないんでしょうか。 なんでもかんでもjre/lib/extに置いていってるので、 ディレクトリの中がぐちゃぐちゃになってしまっています。
439 :
デフォルトの名無しさん :2008/10/30(木) 04:31:06
質問なのですが 今、Javaのクラスについて学んでいて、わからない事があります クラスのメソッドを呼び出すときに、引数渡すのと、 渡さないで呼び出すのがありますが、違いがわかりません
actionPerformedから他のメソッドを呼び出したいんだが、アクションイベントの継承?が出来ていない。 改善策を教えてください。 public void actionPerformed(ActionEvent e){ OtherMethod(); } public void OtherMethod(){ . . . }
>>440 actionPerformedが呼ばれないというのであれば
・ActionListenerが継承されていない
・GUI側で生成されたコンポーネントに対してリスナが登録されていない、又は異なるリスナが登録されている
・実はOtherMethod()が何もせずに処理を戻している
くらいかな?(とエスパーしてみる)
>>441 説明不足ですいません。
public void actionPerformed(ActionEvent e){
Button bt = (Button)e.getSource();
}
と記述すればエラーを吐かないけど、
OtherMethod内にButton~..記述した際に、どのような記述をすればいいのかが分からないのです。
>*: シンボルを見つけられません。
>シンボル: 変数 e
とエラーを吐く。
すごく根本的な事だと思うんですが、よろしくお願いします。
>>442 引数でOtherMethodにActionEvent eなりButton btなりを渡してやればいい。
Swingのウインドウで、タイトルバーの厚みが何ピクセルあるかを取得する方法を教えてください。
>>432 a = Arrays.copyOf(a, a.length + 1);
a[a.length - 1] = new MyObject(1, 2, 3);
446 :
デフォルトの名無しさん :2008/10/30(木) 10:59:31
JDKの1.3.1をダウンロードしたのですが、 could not open 'C:\Program Files\Java\jre1.6.0_07\lib\i386\jvm.cfg と出てきます。 何故1.6.0_07が出てくるのか分からないですが、 どうすればいいのでしょうか。 よろしくお願いします。
なんでそんなPCクラックされるバグ持ちJDKを使うのか
>>439 メソッドの中身をみてみりゃわかるでしょ。
使わないなら引数を渡さなくていい。
使うなら渡す。
それに何の疑問が?
>>446 ・最近のメーカー製PCには自社アプリで使うためによくJRE6が元から入ってる。
・ネット中にJREが古いからインスコされた
450 :
446 :2008/10/30(木) 15:17:32
>>449 有難うございます。
外でプログラムが組みたくて五万円のPCに
図書館でCDR付きのJAVAの本を借りてダウンロードしてみたんですが、
ネカフェでは出来たのにダメでした。
コマンドプロンプトを起動するプログラムをjavaで作りたいのですが Process process = Runtime.getRuntime().exec("start cmd"); を実行するとIOExceptionが発生してしまいます コマンドプロンプト上でstart cmdと入力すれば問題なく二つ目が起動するのですが・・・・・・ どういう事が考えられるでしょうか
>>451 Runtime.getRuntime().exec(new String[]{"cmd", "/K", "start", "cmd"});
startはcmdの中にしか存在しないコマンドなので直接startを呼び出すことはできない
スレ違いだけどstart cmdでなくstartだけでも起動するね。 つまりcmd /k startでも可。
>>452 なるほど、できました!!
ありがとうございます
this.getClass() とすると自分のClassインスタンスを取得できるけど、 これと同じようなことをstaticメソッド内で行うにはどうすれば?
MyClass.class
>>456 ありがとう。
やりたいことが「クラス名の取得」なので、
それを行うコードにクラス名が出てくるのは何か変な感じがするけど、
そういうものなのかな?
>>457 静的に定まっているクラスのClassインスタンスを得るなら、
.classを使うのが一番簡単だし特におかしいということはない。
間違って存在しないクラスのClassインスタンスを得ようとすれば
コンパイル時にエラーを吐いてくれるし。
クラス名を何らかの理由で変更する時にMyClass.classの記述部分も変えないといけないのが面倒だが、
変更の手間を少なくする手法はいろいろある。
ただ、動的にClassインスタンスを得たいということは当然あり得るので、
ClassクラスにはforNameというスタティックメソッドがあって、
Stringでクラス名を指定して、そのClassインスタンスを得ることはできる。
459 :
133 :2008/10/30(木) 23:23:25
println以外になにかいいのないのかなぁ 関数の呼び出し回数とか、HDDのreadが遅いのかThreadSleepなのかとか気になると思うんだけど
460 :
デフォルトの名無しさん :2008/10/31(金) 01:37:49
JBossで一つのearの中にある複数のwar間でHttpセッションの共有は出来ますでしょうか ググるとリプリケートは出てくるんですが
461 :
460 :2008/10/31(金) 01:41:51
acegiフレームワークを採用しており、J2EEコンテナの認証機能を使わなかったばかりに war間での認証情報が共有できず悩んでいます
>>457 元々の目的であるクラスの名前そのものが分かっているのだから、
わざわざClassインスタンスを取得するような回り道は変な感じがするのは当然だけど、
クラスの名前が確定していなくて変更する可能性があり、
直接そのクラス名をソース中に入れると後が面倒かもと気にするような場合であれば、
public class ChangeableNameClass {
private class UnchangeableName {}
static {
System.out.println(UnchangeableName.class.getEnclosingClass().getName());
}
}
のように名前を変更することのないダミーの内部クラスを作って、
それを囲うクラスのClassインスタンスを取得するという手もある。
463 :
デフォルトの名無しさん :2008/10/31(金) 12:16:34
ECLIPSEでトーナメント表のようなウインドーで、 a.b.cというパッケージをつくったとするとします。 そうすると aという欄と、a.bという欄とa.b.cという欄が別々にできてしまいます。 そこで、aを選んでaの中のbを選んでbの中のcを選ぶようにはできませんか? もう一つ質問します。eclipseでジャバアプレットを作るときに 一つのjavaファイルに使うクラスをクラスを全部書き込むようなことできますか? 本当にこまっています。よろしくおねがいします。
トーナメント表w見方が逆wwあれは上から下でツリーと呼ぶんだ パッケージというのはそういうもの。a.bの中にcが入ってるのではなく,a.b.cという名前のパッケージなの >一つのjavaファイルに使うクラスをクラスを全部書き込む 全てのクラスを一つの大きなクラスの中にネストしたクラスとして書く 超頭悪いやり方だから全くお勧めしない
ありがとうございます。 後半の質問はちょっと勘違いされたようなので、別の言い方でいうと、 別々につくったclassファイルをコンパイルすると別々のjavaファイルにならないで 一つのjavaファイルにすることは出来ますか? ということです。
逆だろwwwww classファイルをコンパイルしてjavaファイルを作るのかよwwwww classファイルをまとめたいならjar使えよp
JDKをインストールした後に、 javaコマンドは認識されるのに javacコマンドは認識されない。 この差は何なんですか? いずれもjdk/bin直下のコマンドですよね。
逆でした、jarをつかわず、一つのjavaにまとめるような機能は eclipseにありませんか?
>>467 たぶんその認識されているjavaコマンドはJREの方が認識されている。
もう一度パスを確認してJDKのbinディレクトリに通っているか見てみて。
javacはJDKの所にしか存在しないが、javaの方はそこ以外にも存在する場合がある。
一つのjavaにまとめるって意味がわかんにゃい。メリットもない!
メリット:ジャバアプレットを一つのjavaを読み込むだけで起動できる。
472 :
467 :2008/10/31(金) 12:58:59
>>469 なるほど、JREの方にもjavaコマンドがあったんですね。
確かに実行環境のコマンドであればインストール後にすぐ使えるべきですね。
環境変数など見る限りではどうやってJREのパス見てるのか分からなかったけど裏でうまくやってるのかな?
こいつあくまでもコンパイル後にjavaファイルができると主張してやがるw
>>472 windowsだったらwindows\system32にもjava.exeがインストールされていて、
設定にもよるが一番新しいバージョンのjreが使用される。
>>472 OSによると思うんだけど、
例えばwindowsならpublic JREをJDKと一緒にインストールすると、
%windir%/system32にjavaコマンドがインストールされる。
普通デフォルトで%windir%/system32にはパスが通っているはずなので、
そのjavaコマンドが使われる。
複数のJDKやJREをインストールしている時はパスでの指定順序を気にしていないと、
思わぬ場所のコマンドが使用されたりするから気をつけて。
コンパイルしたclassファイルを一つにする方法をおしえてください。 別々に作ったjavaファイルを内部クラスにして一つのjavaファイルにして コンパイルして一つのclass ファイルにしたいです。
unix系とごっちゃになった^^; %windir%/system32でなく%windir%\system32だね
478 :
467 :2008/10/31(金) 13:12:37
>>474 >>475 windows/system32にjavaコマンドありました。
こんな仕組みがあったとは…とても勉強になりました。
丁寧にありがとうございました!
>>476 内部クラスも取り囲むクラスとは別に .class 作る。
jar ではダメなん?
そもそもコンパイルしたものをソースに戻すことなんてできるの?
>>476 classファイルは何のファイルと思ってるんだ?100回classファイルを音読しろ
まとめたい全てのクラスをリファクタリングというか難読化して全てのクラスのフィールドとメソッドをひとつのクラスにまとめてしまえ
オブファスケータによってはそういう手法を行うものもある
>>479 >>476 は使い方を知らないとかかもしれん
>>480 クラスファイルにソースファイルの全ての情報が保持されているわけではないから完全には戻せない
>>479 取り囲むクラスの意味がわかりません。くわしくおねがいします。
>>481 クラスファイルとは実行ファイルとおもっています。
>>483 何をやりたいのかもう一回考えをまとめてからレスしてください。
マトメをかきます。 やりたいこと。 javaファイルを沢山使ったアプレットを作って ホームページに乗せたい。 そのときホームページにjarファイルは置きたくないので。 classファイル一つを置いて、HTMLファイルにはファイル名.classと書きたい。
>>485 すべての処理をひとつのクラスで完結させる。内部クラスもenumも一切なしで。
結局、出来ないということですね。 素直に出来ないでなっとくするのに 回りくどい言い方するのがよくないです。 これは回答側の意見なので気にしないでください。 では!!
つまり釣りだったというわけです
君たちは、答え方がなってないよ。 知識をひけらかすよりも、できる、できない。 これのみ言えばいいんだよ。 なぜできないか等は、それはオマケだよ。 オマケは回答者が希望したときのみ与えればヨシ!
頭大丈夫か?
自己診断ではアスペルガー症候群という 病気なので気にしないでください。
無理矢理つめこみたいなら .class ファイルを 文字列リテラルにして詰め込んどいて extends ClassLoader して 文字列リテラル -> String#getBytes(String) でバイト配列化 -> ClassLoader#defineClass(byte[], int, int) でロード とかやれば、出来ない事もない。 文字列リテラルの長さ制限と 1クラスが持てる定数の最大数の制限受けるから 限界まで詰め込もうと思ったらもっと複雑怪奇になるような気がするけど。
>>492 >>485 だとアプレットでしょ。
extends Applet しないといけないからそれじゃ無理
Javaのバージョンがどのように管理されているのかよく分かりません。 Java5と言う人がいたりJava1.5と言う人がいますよね。 たとえば今自分のPCにはJDK 5.0 Update 11が入っていますが、 Java5 Java5.0 Java5.11 Java1.5 Java1.5.0_11 一般的にはどの書き方を使うのでしょうか?
>>487 良い質問をしないと、良い答えは返ってこない。
毎日ご飯を食べる前に唱えようね。
魔法使いは居てもエスパーは居ないんだぜ
498 :
デフォルトの名無しさん :2008/10/31(金) 20:24:49
初級すぎて馬鹿にされるかもしれませんが、質問させてもらいます。 今Servletを学んでいるのですが PrintWriter out = response.getWriter( ); out.println("Hello!"); というのがよく理解できません 参考書には、getWriter( )メソッドで文字列出力用のPrintWriter( )オブジェクトを取得し, println( )メソッドで文字列を書きこんでいると書いてあります。 つまりresponse.getWriter( )は PrintWriter out = new PrintWriter( ) をおこなっているという事ですか?
getWriter() メソッドがインスタンスを返している。 newで作成されたインスタンスが返されているとは限らない。 内部でゴチャゴチャやっているかも。
500 :
>>498 :2008/10/31(金) 21:09:58
PrintWriter out はあくまで PrintWriter 型の outフィールドを定義しているだけですよね? インスタンスを生成する際には、フィールドの型にあわせないといけないから、 response.getWriter( )によって返される値は、様々な処理を経て、 PrintWriter型に合わせられているという事ですか?
たぶんそうだと思う。 おそらく、responseインスタンスのフィールドが 反映された PrintWriterのインスタンスが返されて、 outはそれを受けているんじゃないかな。 だから、getWriteメソッドの返り値は当然、PrintWrite型だろうね。 public PrintWriter getWriter(){ ってこと。 new PrintWriter()だと コンストラクタを使ったまっさらなインスタンスが返されるけど、 getWriter()を使うことによって、 インスタンスにたいしてなんらかの処理が施された インスタンスが返されている可能性が高いと思います。 デザインパターンでいうところのstatic factoryパターンかもしれませんけど。
>>501 なるほど、なんとなくですが理解できたような気がします。
どうやらgetWriter( )メソッドはなんらかの処理を施してはいるが、
我々使用者はあまり意識する事なく使ったほうがよさそうですね。
PrintWriter out = getWriter( )
と宣言すれば
out.println( )
で文字が出力できると、それ単体で覚えたほうがいいのかもしれませんね。
わざわざ説明ありがとうございました。
一度のリクエストでgetOutputStreamとgetWriterは同時に呼べなかったはず。 中で何かしたいんだろうねぇ、やはり。
504 :
デフォルトの名無しさん :2008/10/31(金) 23:53:02
質問です。
クライアントからURL(HTTP)で示されるWebサーバ上のファイルが
存在するかどうかを確認できるメソッドってあるんでしょうか?
存在確認って以下を想定しています。
1.サーバ(www.abc.abc)が存在するかどうか
2.サーバは見つけたけどファイル(
http://www.google.com/abc.zip )が存在するかどうか
URLとかURLConnectionとか見たんですが見つけられませんでした。
URLConnection#connectするときに例外を取るしかないんでしょうか?
ヒントでもいいのでお願いします。
今は
http://www.abc.abc/abc.zip に接続しようとして
例外:UnknownHostException が発生している状態です。
例外を発生させず、予め存在するのかどうか確認したいんです。
505 :
デフォルトの名無しさん :2008/11/01(土) 01:58:22
Commons VFS
親クラスのフィールド変数を子クラスで使用したい場合, (1) フィールドをprotectedにする, (2) フィールドはprivateにして,親クラスにprotectedなアクセッサーメソッドを作成する, のどちらが良いのでしょうか?
>>505 ありがとうございます。早速試してみました。
ファイルの有無は確認できるようですが、
サーバの有無は確認できないようでした。
《ソース》
public class Test01 {
public static void main(String[] args) {
try {
FileSystemManager manager = VFS.getManager();
FileObject fileObject = manager.resolveFile(args[0]);
if (fileObject.exists()) System.out.println(fileObject.getURL() + " は存在します。");
else System.out.println(fileObject.getURL() + " は存在しません。");
fileObject.close();
} catch (Exception e) {
e.printStackTrace();
}}}
《結果》
1.
http://www.abc.abc/ org.apache.commons.vfs.FileSystemException: Could not connect to HTTP server on "www.abc.abc".
Caused by: java.net.UnknownHostException: www.abc.abc
2.
http://www.google.com/abc.zip http://www.google.com/abc.zip は存在しません。
・・・すみません。
VFSじゃなくてtryすることにします・・・
java.util.Random クラスというのがありますが 自分で、mypackage.Randomクラスを作って、 import java.util.*; import mypackage.*; としてRandomを呼び出すとどうなるんですか?
試せばいいじゃん。試せばいいじゃん。
>>508 言語仕様に則ってれば、曖昧なのでコンパイルエラーにしかならん。
>>509 めんどくっさー
>>510 ありがとうございます。
なるほどコンパイルエラーですか。
なんかjavaはここら辺の仕組みって汚いですよね。
自分でももっとスマートに作れそうだ。
釣りだと分かってても釣られてしまう・・・ ス マ ー ト (笑)
───アタシの名前はアイ。心に傷を負った女子高生。モテカワスリムで恋愛体質の愛されガール♪ アタシがつるんでる友達は援助交際をやってるミキ、学校にナイショで キャバクラで働いてるユウカ。訳あって不良グループの一員になってるアキナ。 友達がいてもやっぱり学校はタイクツ。今日もミキとちょっとしたことで口喧嘩になった。 女のコ同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシは一人で繁華街を歩くことにしている。 がんばった自分へのご褒美ってやつ?自分らしさの演出とも言うかな! 「あームカツク」・・。そんなことをつぶやきながらしつこいキャッチを軽くあしらう。 「カノジョー、ちょっと話聞いてくれない?」どいつもこいつも同じようなセリフしか言わない。 キャッチの男はカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。 「すいません・・。」・・・またか、とセレブなアタシは思った。シカトするつもりだったけど、 チラっとキャッチの男の顔を見た。 「・・!!」 ・・・チガウ・・・今までの男とはなにかが決定的に違う。スピリチュアルな感覚がアタシのカラダを 駆け巡った・・。「・・(カッコイイ・・!!・・これって運命・・?)」 男はホストだった。連れていかれてレイプされた。「キャーやめて!」ドラッグをきめた。 「ガッシ!ボカッ!」アタシは死んだ。スマート(笑)
>>511 >自分でももっとスマートに作れそうだ。
どうやんのか興味あるから教えてよ
515 :
デフォルトの名無しさん :2008/11/01(土) 12:42:30
ステータス管理をするときに、ステータス追加・変更などでプログラムの内容を 変える必要のない設計ってどうんあものなんでしょ?
JRE 6 update 10 をいれてから、自作のアプリの動作がおかしいんです。 update 7 に戻すと想定どおりなんです。 GraphicsDevice クラスを使ってるんですけど DirectX 10 がどうのこうのってリリースノートに書いてあるから そのあたりに何かあるんだとは思うんですが。。 eclipse から実行する際は JRE のバージョン切り替えられるんですが、 普通に OS に関連づけられている JRE のバージョンを切り替える (つまり、update 10 じゃなくて update 7 を使う) にはどうすればいいんでしょうか?
>>516 C:\Program Files\Java 以下のバイナリに直接関連付ければいいんじゃね?
518 :
517 :2008/11/01(土) 13:38:16
関連付けの話ではなかったみたいです。 自作アプリの起動は、バッチファイルから java -Xmx***m -jar ***.jar として起動しているので、(大きいメモリ確保が必須なので) パスが通っている(?)java.exe が使われるみたいなんです。 コマンドラインから java で起動する JRE のバージョンを切り替える ことができれば解決すると思うんですが、どうしたらいいでしょうか? Windows にあまり詳しくないもので。。
>>518 a) C:\Program Files\Java\jre1.6.0_07\bin にPATHを通す。
b) javaをフルパスで書く。"C:\Program Files\Java\jre1.6.0_07\bin\java" ...
(ファイル名/ディレクトリ名に空白がある場合はダブルクォートでくくるのを忘れないように)
どちらでも好きな方を。
520 :
デフォルトの名無しさん :2008/11/01(土) 17:06:38
すまそ。アプレットがサーバーと通信するプログラム組もうとするとき TCP/IP使った方がいい?RMI使った方がもっと便利?? RMIは良く知らないのでついでに勉強してみたい気もするんだけど。。 詳しい人教えて。Javaでネットワーク組むの初めてだもんだから。
通信する内容による。
522 :
520 :2008/11/01(土) 17:14:09
いや。普通の企業データを(会計データ)サーバに送ってDBに記憶するだけなんすけど・・
appletはセキュリティ上の制約で、それが置かれている サーバーとしか通信できないようになっています ですから、P2Pの通信というのはできないと思うのですが、 BitLetというファイル共有のappletが存在します いったいどうやってP2Pを実現させているのでしょうか?
>>523 それはデフォルトの話でしょ。
署名されてるアプレットとか、
ユーザが自分の環境の policy ファイル弄ったりすれば
アプレットでも自由に通信したりクライアントPCのファイルに触ったりできる。
普通は署名アプレットだね。実行していいか確認のダイアログでたりするけど。
金ない場合はオレオレ署名アプレット。
つまらん事聞くんだけどさ あるコマンドの出力を直接ソースに取り込む方法ってない? c とかだとこんなイメージ... === static な配列に押し込みたいデータの中身だけ作る $ [適当なコマンド] [元データ > inc.h === 出来上がった inc.h "aaaaa", "BBBB", .... === C のコード String[] xTab = { # include "inc.h" // inc.h の内容をここにまんま展開したい };
>>526 javaのソースにbccのプリプロセッサ使えたりするが?
まあ適当にスクリプト書くのが一番だろう。
そこまで読んどいて・・・ move この点を (x、 y) 座標平面上の指定された位置に移動します。このメソッドは setLocation(int, int) と同じです。 同じです。
531 :
デフォルトの名無しさん :2008/11/01(土) 22:08:29
OS:Windows で動いてる Swing を使ったアプリで Mac の Look&Feel を使うことってできますか?
532 :
デフォルトの名無しさん :2008/11/01(土) 23:09:16
Tomcatが起動しないんですが原因が分かりません。 正常にDL、インストール出来ていてポートも使用してない番号のはずなんですが他に原因考えられることありますか? JDKのpathは設定したんですがTomcat入れる時も別にpathの設定って必要ですか? 初心者な質問すいませんがわかる方いたらお願いします
533 :
デフォルトの名無しさん :2008/11/01(土) 23:57:53
Scannerクラスについて質問させてください。 ScannerクラスのnextInt関数を使って、キーボードから整数値の入力を行う プログラムを作ろうとしています。その際に、正常な値(整数値)が入力されるまで 再入力を促す仕組みを設けたいのですが、下記プログラムでは希望する結果を得る事が できませんでした。 int iInput = 0; boolean input_ok = false; Scanner scan = new Scanner(System.in); while( ! input_ok ){ try { System.out.print("整数値を入力してください -> "); iInput = scan.nextInt(); input_ok = true; } catch(Exception e){ System.out.print("入力に不備がありました。 再度"); } } このプログラムを実行し、『3.2』などの実数値を入力すると、プログラムが暴走を始めます。 原因と解決方法をご存知の方が居られましたら教えてください。よろしくお願いします。
534 :
デフォルトの名無しさん :2008/11/02(日) 00:26:10
>>533 Scanner#nextInt
> 次のトークンを有効な int 値に変換できない場合、
> このメソッドは InputMismatchException をスローします。
> 変換に成功すると、スキャナは一致した入力の先に進みます。
失敗した文字を自分で読み飛ばさないとダメ。
>>534 暴走の原因は、『変換されずに残っている入力』だったのですね。
プログラムを下記の様に書き換えて、その場を凌ごうかと思っていましたが、
変換に失敗した文字を読み飛ばす手段があるのですね。早速探してみます。
ありがとうございました。
int iInput = 0;
boolean input_ok = false;
while( ! input_ok ){
try {
System.out.print("整数値を入力してください -> ");
Scanner scan = new Scanner(System.in);
iInput = scan.nextInt();
input_ok = true;
}
catch(Exception e){
System.out.print("入力に不備がありました。 再度");
}
}
画像処理、3D関連習ってない自分なら全部自前で計算するか、行列使うかJavaの3Dやらポリゴンのライブラリを探して使い方見ててきとーにやる 今あるJava知識しだいじゃね?
>>536 これ4次元? 5次元?
描画は
>>537 の言うとおりでいいけど。3次元への投影が必要になる。
まぁ、3次元空間を2次元のディスプレイに投影するのと理屈は一緒だけど。
ぐぐったら正八胞体で出てきた。
539 :
デフォルトの名無しさん :2008/11/02(日) 10:03:11
JAVAを一度も使ったことがない(処理系も持っていない)のですが、 public main() { String a, b, c; a = null; b=""; c="1"; System.out.print("La=" +a.getLength()+ " Lb="+b.getLength()+" Lc="+c.getLength()); } の出力ってどうなるんでしょうか? aがnullなので例外発生でしょうか? どうぞよろしくお願いします。
540 :
デフォルトの名無しさん :2008/11/02(日) 11:44:28
>>539 >aがnullなので例外発生でしょうか?
そのとおり
541 :
539 :2008/11/02(日) 12:34:56
>>540 どうもありがとうございます。
La=0 Lb=0 Lc=1
ではないのですね。
>>542 情報関係の資格試験の勉強をしていて、ネットで
上のような問題に遭遇した次第です。
とても合格しそうにないなw プログラミングの勉強は実際に自分で作成して動かしてみることが基本だよ 頭の中だけで妄想しても身に付くものはほとんどない
>>539 String に getLength なんてメソッドはないからコンパイルエラーじゃないか?
>>544 試験に合格するだけなら紙の上での仕様を理解していれば
十分じゃないか?俺は昔CASLを一度も動かしたことがなく
ても情報処理の一種や二種に余裕で合格したぞ。
こういう資格はとるだけなら簡単なんだよ。 実践で使い物になるかは別にして。
548 :
デフォルトの名無しさん :2008/11/02(日) 17:24:09
質問です。長いので分けて書きます。 iアプリ開発をしているのですが、画像が読み込めません・・・ ビルドは成功するのですが、"Unknown media image format"と出て実行できません。 詳細を書きますと (前略) Image img_title_0; Image img_title_1; (中略) public Image loadImage(String name) { MediaImage mImg = null; Image img = null; try { mImg = MediaManager.getImage("resource:///" + name + ".gif"); mImg.use(); img = mImg.getImage(); } catch(ConnectionException ce) { if(mImg != null) { mImg.unuse(); mImg.dispose(); } throw new RuntimeException(ce.getMessage()); } return img; } (中略)
549 :
>>548の続き :2008/11/02(日) 17:25:21
public void paintTitle() { img_title_0 = loadImage("title_0"); img_title_1 = loadImage("title_1"); draw(true); setColor(0, 0, 0); fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT); drawImage(img_title_0, 0, 0); drawImage(img_title_1, 0, 0); setColor(255, 255, 255); if(frameCount%2 == 0) { // 点滅処理 drawString("PUSH SELECT KEY !", 10, 180); } draw(false); } (後略) こんな感じです。 画像はペイントで書いたものをresフォルダにGIF形式で保存しています。 一応「"Unknown media image format" java」でググッたのですが、まともなページがなくて解決できませんでした。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 長文失礼しました。
iAppriスレに行け
551 :
>>548 :2008/11/02(日) 17:43:50
>>550 >>2 にiアプリスレ載ってますね・・・
すいません見落としてました。iアプリスレ行ってきます
iアプリスレの方でアドバイスを頂き解決しました。 ありがとうございました
1つのファイルを2つの入出力オブジェクトから同時にアクセスする場合に気を付けるべきことを教えてください。 とても抽象的な質問なので、思いついたのをちょちょっと書いて頂けたら幸いです。
557 :
デフォルトの名無しさん :2008/11/02(日) 22:28:09
//車クラス class Car{ int num; double gas; void setNumGas(int n, double g){ num = n+1; gas = g+1; System.out.println("車のナンバーを" + num + "にガソリンの量を" + gas + "にしました"); } int getNum(){ //int型の値を返すメソッドです System.out.println("ナンバーを調べました"); return num; //呼び出し元に値を返します } double getGas(){ //double型の値を返すメソッドです System.out.println("ガソリンの量を調べました"); return gas; //呼び出し元に値を返します } void show(){ System.out.println("車のナンバーは" + num + "です"); System.out.println("ガソリンの量は" + gas + "です"); } }
558 :
デフォルトの名無しさん :2008/11/02(日) 22:30:08
class Mikaiketu5_2{ public static void main(String args[]){ Car car1 = new Car(); car1.setNumGas(1234, 20.5); int number = car1.getNum(); //戻り値を持つメソッドを呼び出します、戻り値を変数numberに代入します double gasoline = car1.getGas(); //戻り値を持つメソッドを呼び出します、戻り値を変数gasolineに代入します System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは" + number + "ガソリンの量は" + gasoline + "でした"); car1.show(); } } この、ソースで private int num; private double gas; とにしても、アクセスできてしまうのは何故でしょうか?
559 :
デフォルトの名無しさん :2008/11/02(日) 22:31:47
この、ソースではアクセスできませんが・・・ class Car{ private int num; private double gas; void show(){ System.out.println("第二の車のナンバーは" + num + "です"); System.out.println("第二のガソリンの量は" + gas + "です"); } } public class Sample4_1 { public static void main(String[] args) { Car car1 = new Car(); car1.num = 1234; car1.gas = 20.5; car1.show(); } }
560 :
557-559 :2008/11/02(日) 22:33:09
557-559です
>>557 あー、それ、初心者の時混乱するよね。
privateって「他のクラスからアクセスできない」ってわけじゃないんだよ。
「他のクラスから”直接”アクセスできない」ってことなんだ。
Aのクラスの中のprivateなメンバは、Aのクラスのインスタンスからならアクセスできるんだよ。
Car car1 = new Car();で クラスCarのインスタンスcar1を作ったから
car1.num(Carのインスタンスcar1の持っているnum)と書けばアクセスできるんだ。
>>558 では、それをクラスMikaiketu5_2のふつーのメンバ(int numとか)に渡してる。
System.out.println(num); の中のnumは
「クラスCarのインスタンスcar1の持っているnumを、Mikaiketu5_2のふつーのnumに渡したやつ」なんだよ。
わかった?
これがわかれば
>>559 がアクセスできない理由もわかるよね。
562 :
デフォルトの名無しさん :2008/11/02(日) 23:11:36
>>561 レス、ありがとうございます
う~ん、難しい・・・・もう少し考えて見ます・・・
ん?Carクラスのフィールドをpackage-privateからprivateにしたらアクセスできたってこと?
マウスで矩形を描くプログラムを作りたいのですが、 マウスのポインタの位置と描いた矩形の位置がズレてしまいます。
565 :
564 :2008/11/02(日) 23:31:15
public void mousePressed(MouseEvent e)//マウスを押すと呼ばれる { point.x = e.getX(); //押した点の座標を保存 point.y = e.getY(); } public void mouseReleased(MouseEvent e) //マウスを放すと呼ばれる { int x = point.x; int y = point.y; width = Math.abs(e.getX() - x); height = Math.abs(e.getY() - y); //座標軸のマイナス方向に引いた場合 if(point.x > e.getX()) x = e.getX(); if(point.y > e.getY()) y = e.getY(); rect.add(new Rectangle(x, y, width, height)); myPanel.repaint(); }
566 :
564 :2008/11/02(日) 23:32:37
public void mouseDragged(MouseEvent e) //マウスをドラッグ中に呼ばれる { int x = point.x; int y = point.y; width = Math.abs(e.getX() - x); height = Math.abs(e.getY() - y); //座標軸のマイナス方向に引いた場合 if(point.x > e.getX()) x = e.getX(); if(point.y > e.getY()) y = e.getY(); frameRect = new Rectangle(x, y, width, height); myPanel.repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; for(Rectangle r: rect) g2.fill(r); g2.draw(frameRect); } 何故なのでしょうか?よろしくお願いします。
567 :
557-559 :2008/11/02(日) 23:32:40
ちょっと、混乱してしまったので、整理させてください 3つ質問があります car1.num = 1234; car1.gas = 20.5; これらは、 class Car{ int num; double gas; に、アクセスして値を代入しているんですよね? そして 、 car1.setNumGas(1234, 20.5); は、 void setNumGas(int n, double g){ に、アクセスして代入しているんですよね? この、オブジェクトはC言語言うポインタに近いものなのでしょうか? 1、オブジェクトの作成(Car car1 = new Car(); ) Car変数は、オブジェクトを指し 2、それを使いメンバにアクセス という感じに・・・・
Car変数じゃなくてcar1変数でしょ
569 :
557-559 :2008/11/03(月) 01:15:04
570 :
デフォルトの名無しさん :2008/11/03(月) 14:11:00
>>567 デバックで確認することはできないのかね?
ほんとにずれてる程度の間違いならデバックすると一目瞭然かと
571 :
557 556 :2008/11/03(月) 16:28:26
デバッグ機能がなくて、メモ帳使っています
>>567 曖昧記憶なと憶測での助言で申し訳ないんだけど、
Graphics2Dクラスの原点座標(0,0)は、フレームのタイトルバーと外枠を
含んだ上での最左上部になるんじゃなかったっけ。
原点座標(0, 0)をタイトルバーや外枠分ずらしてあげる為に、
Insetクラス用いて、フレームの情報持ってきて原点ずらしてあげてた記憶が…
Inset ins = frame.getInsets();
g.translate(ins.left, ins.top);
みたく。
573 :
557-559 :2008/11/03(月) 18:14:14
すみません。。。質問の仕方が変でした。
これは
"car1.num = 1234;
car1.gas = 20.5; "
クラスのメンバ
"class Car{
int num;
double gas;"
に、直接?アクセスして値を代入しているんですよね?
そして、これ
"car1.setNumGas(1234, 20.5);" は
void setNumGas(int n, double g){
に、アクセスしてから、迂回する形で(この様に)
"num = n+1;
gas = g+1; "
で、メンバの
"int num;
double gas;" に代入しているのでしょうか?
>>570 今、デバックツール探してみます。
代入しているんですよね?
574 :
557-559 :2008/11/03(月) 18:29:07
>>561 ですので、>>557-
>>558 の場合は同じクラス内の
引数のところ
"num = n+1;
gas = g+1; "
から、代入しているから、privateでもアクセスできるのですね?
そして、
>>559 は
外から直接なのでアクセスできないのですね?
連投、申し訳ありません
昨日から一日中考えています
必要最小限な構成で説明します。理解の手伝いになれば良いのですが。 Carクラスのメンバ変数『int num;』を『private int num;』とすると、 numは、外部から『直接アクセスできない』変数となります。 class Car{ private int num; } class Sample{ Car c = new Car(); c.num; // privateな情報なので直接アクセスできず、エラーになります。 } private化したnumですが、Carクラス内部からは直接操作をする事が可能です。 これを利用して、『外部から直接アクセスできる仲介者』を用意し、 それを媒介に、privateなnumに『間接的にアクセス』する手法があります。 class Car{ private int num; public void setValue(int arg){ this.num = arg; } // 引数のargを媒介に、numへと値代入。 public int getValue(){ return num;} // 戻り値intを媒介に、numの値を返す。 } class Sample{ Car c = new Car(); c.setValue(10); int getNum = c.getNum(); }
576 :
575 :2008/11/03(月) 18:41:45
ソースコードのミスが…。下から2行目は、 int getNum = c.getValue(); です。
577 :
デフォルトの名無しさん :2008/11/03(月) 18:49:36
JAVA_HOMEというものがよくわかりません よければご講義をお願いします
>>577 Java 開発をする際に JDK のホームディレクトリを OS が知っておくと何かと便利。
そのため環境変数にそれを指定するのだけど JDK (Java) のホームディレクトリなので
JAVA_HOME とするとわかりやすいのでそのように指定している。
>>578 つまりひろくそういう暗黙の了解ができてるだけで
JAVA_HOMEとしなくても動くということですか?
>>579 動く奴は動く。JAVA_HOMEだけに依存してる奴は動かない。
>>580 Tomcatの場合はどのように利用しているのでしょうか?
実際にTomcatでプログラミング(初心者ですが)しているのですが
ソースコードをコンパイルするために、システム環境変数に設定したPathの
JDKしか用途がよくわかりません
582 :
564 :2008/11/03(月) 20:23:04
>>572 解決しました!ありがとうございました。
質問です gerWord( ) と getSingleWord( ) の解説をお願いします。 今手持ちの参考書の練習問題にこの二つのメソッドが使われてて 解答にそのメソッドの解説が載ってません。 Yahoo検索で調べたのですが、解説がうまくでてきませんでした。 お願いします
100.0の場合3、10.0の場合2というような感じで 変数に格納されている数値の桁数を出したいのですが どうすればいいでしょうか?
>>584 プログラミングとは関係なく10ベースの対数の整数部を取ればええんちゃう?
>>584 わざわざ小数点で書いてるけど、それは10.1の場合は3って表示にするってこと?
588 :
デフォルトの名無しさん :2008/11/03(月) 23:54:50
クラス内の命令を全てstaticで使用したいときは、1つずつstaticを付けていくしかないですか?インスタンス化してメモリ領域を増やしたくないので
>>588 全部に static つけてください。
590 :
デフォルトの名無しさん :2008/11/04(火) 01:28:30
ムホムホ。インストーラ作ってアプリ配布したいんだけど、JVMもインストーラに入れると怒られるの?
>>584 double value = 100.0;
int keta = (int)(Math.log(Math.abs(value)) / Math.log(10)) + 1;
で、いけると思ったけど丸めが入るので
keta = (int)value == 0 ? 0 : Integer.toString(Math.abs((int)value)).length();
としてみた・・・駄目だセンスのかけらもないorz
右クリメニューでテキストの削除をしたくて Del.addItemListener(new ItemSelect()); class ItemSelect implements ItemListener { public void itemStateChanged(ItemEvent e) { System.out.println("動け動け動け"); TextEditor.textPane.replaceSelection(""); } } と書いているのですが、うまくいっていませんorz 何か根本的に間違ってますか
>System.out.println("動け動け動け"); ここみてシンちゃん再始動ktkr!!とか思った俺。
>>584 int num; //桁を知りたい数
int keta; //桁
for( int i=0; Math.pow(10,i) >num ; i++){ keta=i+1;}
とかどうよ
595 :
592 :2008/11/04(火) 12:06:53
事故解決しますた! シンちゃん再起動しました! 別の話なんですが、Checkboxを生成したんですけれども プログラムの起動時はそのチェックボックスが表示されなくて 一度クリックすると普通に表示されるようになるのですが どうしてですかねー?? チェックボックスのcheckを生成したあと panel.add(check);しかしてないですけど 何か足りないですか・・・? 最初から表示されてほしいです!111
596 :
595 :2008/11/04(火) 12:49:48
javaのプログラミングができる無料ソフトはありませんか?
JDKは無料ですよ
画面に奇数0から1000まで 表示させるコードの書き方を教えて下さい。
0も1000も奇数ではありません
>>600 そうですね、間違ってましたスミマセン
じゃあ1から999までの書き方を教えて下さい。
正直な事言うと、0から1000は範囲の事言ってたんだけど 説明不足で悪かった。
for (int i = 0; i <= 1000; i++) if(i % 2 != 0) System.out.println(i); 俺優しすぎかも
>>603 ちょwサンクス!!
優しすぎだろ、惚れたよ!
マジで。
宿題は宿題スレへ逝け。
>>605 ( ゚Д゚)ゞ リョーカイ!!
誘導してくれてサンクス
チョクチョクすみません。 宿題スレから誘導してもらいました。 さっきの続きで for (int i = 0; i <= 1000; i++) if(i % 2 != 0) System.out.println(i); これはどの様な処理をしてるんですか? for (int i = 0; i <= 1000; i++) ここまでは何となく分かるんですけど、 if(i % 2 != 0)が微妙に分かりません。 コピペですみませんm(_ _)m
なんかおもしろすぎw %ってのは剰余の演算子で iを2で割った余りってのがi%2ね。 だから2で割った余りが0じゃないとき、つまり奇数の時となるわけさ ちなみにこれは「Javaで~」とかそういうレベルの話じゃないからね
if(i % 2 != 0)は 2で割って余りが0じゃなかったらという意味
610 :
デフォルトの名無しさん :2008/11/04(火) 22:12:56
質問です import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{ PrintWriter out = response.getWriter(); out.println("Hello"); } } doGet( )メソッド内で宣言した HttpServletResponse response このresponseを使って PrintWriter out = response.getWriter(); とありますが HttpServletResponseのインスタンスを生成したわけでもないのに どうしてresponse.getWriter( );という記述ができるのですか? 仮に HttpServletResponseがクラスメソッドだとしても、 このような記述はできませんよね?
>>610 制御の主体であるAPサーバがインスタンスを生成してお前のコードに渡してる。
612 :
デフォルトの名無しさん :2008/11/04(火) 22:31:47
>>611 doGet( ) メソッド内で
HttpServletResponse response
とした時点で、我々の目に見えないところで
APサーバがインスタンスを生成しているとい
うことですか?
doGet()メソッドを呼ぶのはだーれだ
>>612 メソッド内じゃない。responseはdoGet()の引数だ。APサーバはHttpServletResponseのインスタンスを生成して、それを引数としてdoGet()を呼び出してるだけ。
質問です スレッドを3本つくり、それぞれ順番に1~10までカウントさせたいのですが スレッド0が動いたところで止まってしまいます。なにがおかしいのでしょうか? class Ex11{ public static void main(String[] args){ Count10 count =new Count10(); count.start(); //スレッド0 count.start(); //スレッド1 count.start(); //スレッド2 } } class Count10 extends Thread{ public synchronized void run (){ try{ for(int i=1;i<11;i++){ System.out.println(Thread.currentThread().getName()+":count="+i); Thread.sleep(700); } }catch(InterruptedException e){ } } }
別のThreadオブジェクト作ろうねぇ~
617 :
615 :2008/11/04(火) 23:47:17
>616 別のThreadオブジェクトを作るというのは Count10 count1 =new Count10(); Count10 count2 =new Count10(); Count10 count3 =new Count10(); count1.start(); //スレッド0 count2.start(); //スレッド1 count3.start(); //スレッド2 のようにするってことなんでしょうか?
619 :
615 :2008/11/04(火) 23:50:45
スレッド0に1~10までカウントさせたあと 待機している、スレッド1か2にカウントさせたいので この方法だとうまくいかないのです。
>>619 join でスレッドの終了を待機する。
621 :
615 :2008/11/05(水) 00:32:36
>>620 joinを用いて試してみたところ、うまくいきました。
ありがとうございました。
つづけて質問なんですが、ひとつのインスタンスに対して計3本のスレッドを通し
今回のような結果を得ることはできないのでしょうか?
このとき、どのスレッドから数え始めてもらっても構わないのですが。
>>621 いまいち要求仕様がはっきりしないけど、java.lang.Runnableのこと?
3つのスレッドが必要なら3つのThreadインスタンスが必要なのは変わら
ないけどね。
http://xy.yu.to/ 始終荒れまくりの海外サーバ絵チャだ
一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww
荒らしても荒らしても線が消されてしまう
一体どうやっているのか?!
624 :
615 :2008/11/05(水) 01:13:30
>>622 始めたばっかりなので
言葉の意味とか微妙に違ってるかも分かりません。ごめんなさい><
実はsynchronizedの練習をしたかったんです。
synchronizedはインスタンスに対して鍵をかけるのですよね?
でもインスタンスがスレッドの数だけあると
synchronizedの意味がなくなっちゃうなあ、と思っていたのです。
でもなんだかスレッドインスタンス?と、実行するクラスのインスタンス?
が頭の中でごっちゃになってるような気がしてきました・・・
もう一度、考え直してみます。
遅くまでお付き合いいただいてありがとうございました!
626 :
デフォルトの名無しさん :2008/11/05(水) 06:45:22
strutsのforwardについての質問です。 struts-config.xmlにhogeという名前でfuga.jspに遷移する設定があるとします。 Actionの最後にmapping.findForward("hoge")しますが、 この結果得られたpathを加工する方法を教えてください。 具体的にはfuga.jspの後ろにアンカー(#moge)を追加して、遷移先の表示位置をAction内で動的に制御したいのです。 アンカーの数はデータ数で可変なので、全てのパターンをstruts-config.xmlに記述することはできません。 getPath()して加工はできるのですが、setPath()するとIlligal State Exceptionが発生して詰まっています。 どうかよろしくお願いします。
627 :
デフォルトの名無しさん :2008/11/05(水) 07:31:08
>>614 なるほど!わかりました!
いきづまったときはまたこのスレで質問させて
いただく事があると思いますので、そのときは
よろしくお願いします。
ありがとうございました
628 :
デフォルトの名無しさん :2008/11/05(水) 10:33:00
今ファイルからの読み込み時にはBufferedReaderを使って ファイルに出力する時には BufferedWriterを使っているのですが その両方の機能を持ったクラスはありますか? 例えば ファイル1 ファイル2 ファイル1 abcde 12345 → abcde 12345 67890 12345 67890 といった風にファイル1を読み込んで、ファイル2と比較してファイル1に存在しないコードがあったら追加するといったプログラムがしたいんです。 わかりにくいかもしれませんが、わかる方いたらお願いします。
java.net.URL(以下URL)のインスタンスから簡単に親ディレクトリのURLインスタンスを取得する方法があれば教えて下さい。
URL parent = new URL(url, "..");
631 :
デフォルトの名無しさん :2008/11/05(水) 13:40:23
コンパイルしようとしても 推奨されないAPIを使用またはオーバーライドしています 詳細については、-deprecationオプションを指定して再コンパイルしてください ってのが出て出来ないんですけどどうしたら良いですか?
632 :
デフォルトの名無しさん :2008/11/05(水) 13:42:30
以下のプログラムでなんですが import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.*; import java.util.*; public class ExpText1 extends JFrame{ public JScrollPane scrollPane,scrollPane2; public JLabel lb1,lb2; public JButton b1,b2; public TextField tf1,tf2,tf3; public JPasswordField pwf; public Container container = null; private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36); private Font font2 = new Font("serif",Font.BOLD,18); public ExpText1(){ super("ExpText1"); setSize(500,280); container = this.getContentPane(); container.setLayout(null); container.setBackground(Color.gray); container.setForeground(Color.red);
633 :
デフォルトの名無しさん :2008/11/05(水) 13:43:31
b1 = new JButton("Enter"); b1.setSize(120,35); b1.setLocation(345,200); b1.setVisible(true); b1.setOpaque(false); b1.setBorderPainted(true); b1.addActionListener(lsn); container.add(b1); tf1 = new TextField("Write here and type \"return\""); tf1.setSize(300,30); tf1.setLocation(40,65); tf1.setForeground(Color.red); tf1.setFont(font2); tf1.setVisible(true); tf1.addActionListener(lsn); container.add(tf1); tf2 = new TextField(); tf2.setSize(300,30); tf2.setLocation(40,105); tf2.setForeground(Color.red); tf2.setFont(font2); tf2.setVisible(true); container.add(tf2);
634 :
デフォルトの名無しさん :2008/11/05(水) 13:44:08
tf3 = new TextField(); tf3.setSize(200,30); tf3.setLocation(140,155); tf3.setForeground(Color.red); tf3.setFont(font2); tf3.setVisible(true); container.add(tf3); pwf = new JPasswordField(6); pwf.setSize(200,30); pwf.setLocation(140,195); pwf.setForeground(Color.red); pwf.setFont(font2); pwf.setVisible(true); pwf.addActionListener(lsn); container.add(pwf); pwf.setEchoChar('@'); lb1 = new JLabel("UserID"); lb1.setFont(font2); lb1.setSize(80,30); lb1.setLocation(40,160); lb1.setOpaque(false); container.add(lb1); lb2 = new JLabel("Password"); lb2.setFont(font2); lb2.setSize(100,30); lb2.setLocation(40,200); lb2.setOpaque(false); container.add(lb2);
635 :
デフォルトの名無しさん :2008/11/05(水) 13:45:15
addWindowListener(new WindowEvevtHandler()); setVisible(true); } ActionListener lsn = new ActionListener(){ public void actionPerformed(ActionEvent e){ String pushedButton = e.getActionCommand(); if((e.getSource())instanceof JTextField){ System.out.println("JTextField was actionvated"); tf2.setText(e.getActionCommand()); } else if(e.getSource() instanceof JButton){ System.out.println(pushedButton); if(pushedButton.equals("Enter")) method1(); } } };
>>631 それは単なる警告だからコンパイル出来てると思うけど
気になるなら指示の通り
javac -deprecation ExpText1.java
のように-deprecationオプションを指定して再コンパイルすればよい
637 :
デフォルトの名無しさん :2008/11/05(水) 14:22:21
eclipseでjavaとC++を使いたいときは 何をダウンロードしたらいいですか? 別々にC++とjavaようのeclipseをインストールしないといけないのですか?
638 :
デフォルトの名無しさん :2008/11/05(水) 14:30:50
お風呂にはいるときに あなたはお尻から入りますか? それとも耳から入りますか?
639 :
デフォルトの名無しさん :2008/11/05(水) 15:09:26
eclipseのjavaの奴でC++で開発できるようにできますか?
640 :
デフォルトの名無しさん :2008/11/05(水) 15:42:00
簡潔に質問します。 一つのeclipseでjavaとCを開発したいです。 CDTをjava板のやつにインストールしてもできませんでした。
>>640 GCC無いとか?
っつかEclipseスレで聞けよ
はっ?知力の無い奴に聞かれて答えるかよ
643 :
デフォルトの名無しさん :2008/11/05(水) 15:46:14
eclipse質問スレではないので、質問は出来ません。 GCCはあります。CDTを認識しません。
>>643 ここJavaスレだからEclipseの話は基本的にスレ違い。
Java開発環境としてのEclipseの話ならともかくも、CDTの話じゃねぇ
いや、ちょっと違います。 私の作ろうとしているソフトはjavaをmainにつかいつつ Cを使おうという趣旨なので、java上でcを使うという意味で、 このスレを選択しました。
JAVA上でCを使えますか? と eclipseで・・・出来ますか?は全く別の質問であることを認識しよう。
java厨はCにコンプレックス持ってるからだめだな。 ポインターにしっとしてるからね。
jdk-6-doc-ja.zip って今公式から落とせますか?
>>645 最終目的がどうであれ、質問内容はEclipse開発環境の構築なわけで。
スレ違いだよ。
あ、あとJNIも別にスレあるから、JNIの質問あるならそっちでね。
650 :
デフォルトの名無しさん :2008/11/05(水) 20:48:43
プログラム実行中に得点を更新するたびに、得点をテキストファイルに上書きしたいのですが追記になってしまいます↓↓ 実行時でもテキストファイルに上書きは出来ますか?
>>650 Writerの生成して、それそのまま保持して書いてるんじゃないの?
一旦closeしてもっかいWriterのインスタンス生成して書き込むといいよ。
>>650 上書きモードじゃなく追記モードでファイルオープン。
xボタンを押さずにウィンドウをクローズするにはどのようにすれば良いのでしょうか。
>>653 java.awt.Window#dispose()
656 :
デフォルトの名無しさん :2008/11/05(水) 23:41:00
>>651 クラス単位で毎回newして、得点入力しcloseしてるのですが追記されてしまうんです↓↓
ソースさらしてみんしゃい
>>656 特に小細工せず普通にnew→write→closeすれば上書きされると思うんだが
Writer w;
w = new FileWriter("hoge");
w.write("7点");
w.close();
w = new FileWriter("hoge");
w.write("100点");
w.close();
JTextPaneでドキュメントの末尾の位置を取得したいのですが getEndPosition()は使えないのですよね……? JTextPaneではどのようにするのでしょうか?
getDocument().getEndPosition()でいかんの?
Windows64bit用のJRE 6 Update 10をインストールしたのですが、 javacが見つかりません。 どうやってコンパイルするのですか。
ファイルへの書き込みについての質問です BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter (new BufferedWriter(new FileWriter(fileA))); String line; while((line = reader.readLine()) !=null){ writer.println(line); } reader.close(); writer.close(); 以上のプログラムを実行し、コンソールから文章を書き込むのですが コンソールからの入力の終了し、while文へと行くにはどうしたらよいのでしょうか? ちなみにeclipseを使っています。
Ctrl+Z
>>664 できました。
ありがとうございました!
666 :
デフォルトの名無しさん :2008/11/07(金) 21:18:41
表示について聞きます。 文字列を表示させるときはダブルクオーテーション""でくくりますよね? でもダブルクオーテーション自体を表示させたいときはどうするんでしょうか?
\"
'"'
>>666 new String(new char[]{ '\u0022' });
670 :
デフォルトの名無しさん :2008/11/08(土) 02:31:43
納豆に卵かけご飯をのせてたべたいんですが、どうですか?
すいません…先ほどから六時間ぐらい悩んでいたのですが限界を感じたので力添えお願いします。 形態素解析でsenを導入して普通に実行した場合は上手くいくのですが サーブレットとしてWebで表示させようとしたときはエラーがでます。エラーは下記の通りで java.lang.NoClassDefFoundError: net/java/sen/StringTagger SenSample.service(SenSample.java:17) 17行目にはStringTagger tagger = StringTagger.getInstance();を記述させています。 System.setProperty("sen.home","xxx");に問題があるのかと思い、ファイルの直下にsenを置いたり色々いじくってみたのですがエラーは変わりませんでした。 心当たりのある方がいましたらお願いします。 もしかたらsen単品ではサーブレット不可だったりするんですかね?
672 :
671 :2008/11/08(土) 07:39:50
すいません自己解決しました…。 Tomcatのシステムが分かっていなかったようです。 てっきり環境変数を通せばtomcat下のlibに追加しなくて良いと思っていたのですが…違うようですね。 辞書とか色んなファイルが詰まっているものを扱うのが初めてだったんでいい勉強になりました。
Java って C の lint comment の /*NOTREACHED*/ に相当するものは 書けないんですか?
lintはjavaを受け付けないから書けても意味がない
>>674 以下のようなコードで javac が文句言うのを黙らせたい
Socket sock = null しとけば問題ないのは知ってるが,
try の外で宣言して try の中で使う変数が増えると,
いちいち null を代入するのがうざい
Socket sock;
try {
sock = new Socket();
...
} catch {
...
System.exit(1);
}
anyMethod(sock ...);
アノーテーションでもなんでもいいんだが, コンパイラが黙ってくれると幸せ
Javaに初期化されない変数など存在しない。 フィールド変数だとnull, 0, 0.0で初期化されるが、 ローカル変数だと不定のままなので叱ってくる。 それを無視したら言語仕様から外れてしまう。
>>675 try{
sock = new Socket();
...
anyMethod(sock ...);
} catch {
じゃ駄目なの?
>>678 anyMethod() が new Scoket() と同じタイプの Exception 投げたら
exit() してしまうではないか。Socket() の失敗は exit() したいけど
anyMethod() の失敗では exit() したくないって意味じゃねぇの?
680 :
デフォルトの名無しさん :2008/11/08(土) 14:14:18
URLEncoder.encode で指定する第二引数の文字セットは、そのPC固有の(デフォルトの)文字セットじゃないとだめなんですか? WindowsXPならcp932とか・・・
>>677 return を書く部分に明示的に, ここには絶対に到達しないってな事が
コンパイラにも人間にも分かる形で表記できれば, 保守性も上がると
思うんだが...
System.exit() とかなら見た目一発で分かるけど, 通常は行った先から
帰って来ない, なんてのはそこ見ただけじゃわかんないでしょ?
まぁ, 無い物ねだりをしても意味がないんで諦めるしかなさげだな.
>>675 先にデフォルトを指定するか、後で分岐する全ての場合に対して指定するかの違い
>681 throw new RuntimeException("致命的な問題が発生しました!");
685 :
680 :2008/11/08(土) 14:38:19
>>684 どうもありがとうございます。UTF-8が推奨なんですね。ありがとうございました。
UTF-8の文字変換用テーブルがあって、それをつかって文字列をエンコードするっていうことなんですね。
ローカルPCの文字コードなど何も関係ないんですね。文字コードのエンコードの仕方とかがなんとなくわかりました。
どうもありがとうございました。文字コードは難しいですね。
二つ質問させてください。 一つ目はJavaのif文の真偽判定についてですが、 trueの場合のみ真となり、falseの場合のみ偽となり、それ以外の値は全てコンパイルエラー という認識で合ってるでしょうか? もうひとつはfor文についてなのですが、 javascriptにあるようなfor ~in オブジェクト のようにinの後にオブジェクトを置いてforで回せるような構文はありますか? 自分javascriptしか分からないもので変な例えになってしまいましたが よろしくお願いします。
あってる javaのifはboolean値限定 拡張for文というのを使う for (object item : collection)
688 :
686 :2008/11/08(土) 16:50:07
>>687 拡張for文というのがあるのですね。
ありがとうございました。勉強になりました。
689 :
デフォルトの名無しさん :2008/11/08(土) 22:39:52
基礎的な質問ですが,宜しくお願いします。 1つのソースtest.javaからなるプログラムにおいて, class test{ public static void main(String args[]){} } だと正常に動作するのに, public class test{ public static void main(String args[]){} } とすると動作しないのはなぜなのでしょうか。 つまり,classの前にpublicをつけるかどうかで何がかわるのでしょうか。
>>689 その例ならどちらでも動作するはずだが、本当に動作しないのか?
691 :
689 :2008/11/08(土) 22:47:53
>>690 ごめんなさい,少し記述を間違えました。
動作しないのは,
public class Nondeterminism{
public static int i = 0;
public static void main(String args[]){}
}
です。
何言ってるのかわからんが TEST.javaには一つのpublicクラスが必ずありクラス名はTEST TEST.javaの他のクラスはpublicはつけてはいけない。(インナークラスを除く)
693 :
689 :2008/11/08(土) 23:00:26
>>692 理解しました。
ありがとうございます。
> TEST.javaには一つのpublicクラスが必ず しもなくても構わない もしpublicなトップレベルクラスがあるのならその数は一つでクラス名はTESTでなければならない
すみません。初心者です。instanceof演算子の使い方を確認しようと思い、簡単なサンプルコードを書いてみたのですが、なぜかコンパイルが通りません。 エラーはSyntax error on token "(", ; expectedといっているのですが、どこがおかしいのかわかりません。 class Abs{ private int x; private int y; public Abs(){ x=120; y=200; } public void show(){ System.out.println("x is: "+this.x); System.out.println("y is: "+this.y); } } public class Test{ public static void main(String args[]){ Test abc = new Test(); checkobj(abc); Abs obj = new Abs(); obj.show(); void checkojb(Object xxx){ if(xxx instanceof Test){ System.out.println("this is Test"); } else { System.out.println("this is not Test"); } } } }
>>695 obj.show(); の後ろに } をいれて最後の } を消す。
>>695 定義されていないメソッド名を呼び出している。
メソッドは入れ子に出来ない。
698 :
695 :2008/11/09(日) 03:47:23
ありがとうございます。「;」のエラーは出なくなったのですが、今度は下記のような エラーが出るようになりました。。何がおかしいのでしょう??度々すみません。 Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method checkobj(Test) is undefined for the type Test
タイプミスがあります。 checkojb ---> checkobj
あと void checkobj を static void checkobj かな。
構文ミスなんで自分でなおすこと!
質問なんですが 自分自身(ShowFile1.java)を表示するプログラムを作成しなさい。 という宿題が出されたんですがコマンドに何を入力すればいいのか分かりません。 誰か分かる人お願いします。
プログラムの動かし方もわからないなんて授業何聞いてたんだよ・・・ 教科書か初級参考書読めばすぐ分かると思うのだが。
704 :
702 :2008/11/09(日) 15:45:02
教科書見直したありました showfileを使うんですね、ありがとうございます
Runtime.getRuntime().exec("notepad.exe ShowFile1.java")で提出してみてほしい
じゃヴぁ
serializableインタフェースを実装したクラスのインスタンスを objectstreamクラスを使って受け渡しをしたときの問題なのですが、 送信側から一度インスタンスを送信し、そのインスタンスの内部の情報を変更し、 再び送信した場合、受信側では2つインスタンスが届くのですが、 2つ目に届いたインスタンスが1つ目のインスタンスと全く同じ情報を持ったインスタンスとして 届いてしまいます。原因は恐らく受信側が送信側から送られてきた2つ目のインスタンスを 以前届いたインスタンスと同じものであると判断してストリームから読み込んでいないものと思われるのですが、 解決方法がどうしてもわかりません。どなたかご指南お願いします。
>>707 Serialize は少し賢いけど、ある程度は調教する必要があるので、そのあたり?
google> java serialize
709 :
デフォルトの名無しさん :2008/11/09(日) 18:57:54
(・ω・) BigIntegerの四則演算をint,longなどのシフト演算で自作する。 そんな課題でヽ(・∀・)ノってなってるわけだが… どなたか教えてはくれまいか。
フレーム上でポップアップメニューを表示させたいのですが、mouseClicked()でisPopupTrigger()が反応してくれません。 mouseReleased()では反応しているのですが・・・何故でしょうか?
具体的には public void mouseClicked(MouseEvent e) { if(e.isPopupTrigger()) { Point p = new Point(); p.setLocation(scrollPanel.toCanvasPoint(e.getX(),e.getY())); pop.show(scrollPanel, p.x, p.y); } else if(javax.swing.SwingUtilities.isRightMouseButton(e)) { Point p = new Point(); p.setLocation(scrollPanel.toCanvasPoint(e.getX(),e.getY())); pop.show(scrollPanel, p.x, p.y); } ↑でelse ifの中にブレークポイントを置くとそこで止まる。
質問です。 テキストファイルのデータを Enterキー押すと一行出力 またEnterキー押すと次の一行出力 というようなことは出来ますか? 要するにEnterキーが押されるまで処理を停止させることは出来ますか?
>>712 MouseEventのJavaDocより
>public boolean isPopupTrigger()
>このマウスイベントが、そのプラットフォームのポップアップメニュートリガイベントであるかどうかを返します。
>注: ポップアップメニューのトリガはシステムによって異なります。したがって、共通プラットフォームを適切に機能させるために、mousePressed および mouseReleased の両方で isPopupTrigger をチェックする必要があります。
ってことでisPopupTrigger はmousePressedかmouseReleasedでしか使えないんじゃないの?
>>714 CUIでいくならSystem.in使うとか
未検証だけど
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = null;
while((text = br.readLine()) != null){
printNextLine();
}
アサーションって作業的に書きまくるってもんでもないんですかね? googleソースコード検索とかでググって見ても,要所をピンポイントで使うだけのような感じです. プライベートメソッドの引数のヌルチェックやら値域チェックやらガチガチに書いていくもんだと思いましたが・・・
JavaからWindowsのICMを利用する方法を教えてくださいm(__)m
List<Book> を return しないといけないときに List<BookImpl>を return してもダメなんですか? 変換できないって言われます。 Book : Interface BookImpl : implements Book
>>719 List<Book>とList<BookImpl>とは互換性のない型なのでそうなる。
もし互換性を認めてしまうとタイプセーフでなくなる。
例えば、
List<BookImpl> list = new ArrayList<BookImpl>();
List<Book> list2 = list; // 実際はここで互換性がないのでエラーになる
list2.add(new BookAnotherImpl());
みたいなことができてしまう。
list2の実体はlistであるにも関わらずBookImplでない別のBookの実装をadd可能になる。
もし、
public List<Book> getList() {
List<BookImpl> list = new ArrayList<BookImpl>();
list.add(new BookImpl());
return list;
}
のようなことがしたいのなら、
public List<Book> getList() {
List<Book> list = new ArrayList<Book>();
list.add(new BookImpl());
return list;
}
のようにList<Book>を作成してそれを返すようにする。
List<Book>にBookImplをaddすることはできるので。
初心者です。質問です。なぜ下はコンパイルが通らないのに public class SuperTest{ } public class Test { public static void main(String args[]){ } } SuperTestのクラス宣言からpublicを取ると通るようになるのでしょうか?
723 :
721 :2008/11/10(月) 06:31:18
>>722 なるほど似たような質問が。ちなみに、ファイルをSuperTestとTestで分割したところ
動作しましたが、要するに1ファイルあたりpublicは0個もしくは1個のどちらかでなくては
ならないということですね。
724 :
721 :2008/11/10(月) 06:33:23
あれ、でもよくよく考えたら public class Test { public static void main(String args[]){ } } は1ファイル内にpublicが2個ありますが。。これがインナークラスって奴ですか? いや、mainなので別にクラスではないですよね。。??
mainはメソッド classというキーワードがmainには付いていないでしょ? publicというキーワードはクラス名にだけ付くものではない
726 :
721 :2008/11/10(月) 06:56:31
了解です。理解しました。最後にもしわかったら なぜ1ファイル内にpublicは1つまでという仕様になっているのでしょうか?
コンパイルする時にコンパイラがソースファイルを探しやすいようにじゃないかな ソースパスに存在するファイル名だけを見ればどこに目的のクラスのソースがあるか分かるので さもないとコンパイラがソースファイルの中を探していかないといけなくなる 特にそうしなければならない場合以外はpublicでないクラスの場合とかでも ソースファイル1個にはトップレベルクラス1個にしておいた方がいい
public enumでも1ファイルにしなくてはいけなくて辛いことがある。 enumは例外にして欲しいな。
>>720 ありがとうございます。
勉強になりました。
strutsのタグファイルはどこに格納されているのでしょうか? 自分が勉強した限りでは タグファイルは、WEB-INF/tags もしくは WEB-INF/lib/META-INF/tags に配置しなければならないはずなのですが、 WEB-INF/libに入れているstrustsのファイル群の中にそれらしいものが見当たりません。
よくわからないのですがクラス型のオブジェクトの配列を宣言、初期化するときは どうすればよいのでしょうか? class SuperTest{ } public class Test{ public static void main(String args[]){ SuperTest[] abc = new SuperTest[] {abc[0], abc[1]}; }} これはなぜコンパイルエラーになるのでしょうか?
>>732 宣言と同時に初期化なら
SuperTest[] abc = {new SuperTest(), new SuperTest()};
宣言した後に初期化なら
SuperTest[] abc; abc = new SuperTest[]{new SuperTest(), new SuperTest()};
貼られたコードがコンパイルエラーになるのは"Definite Assignment"、
日本語訳だと「確実に代入」されてないから。
abc[0] とか abc[1] を使いたければ、
abcが「確実に代入」された後じゃないとダメ。
SuperTest[] abc = null; abc = new SuperTest[]{ abc[0], abc[1] };
とすればコンパイルエラーは出なくなる。実行時に例外食らうけど。
>>732 SuperTest[] abc = new SuperTest[] {abc[0], abc[1]};
は
SuperTest[] abc = new SuperTest[2];
abc[0] = abc[0];
abc[1] = abc[1];
ということをやろうとしているのに等しいので初期化されていない配列の要素を代入しようとしてエラーになる
配列abcの要素として入れたいのはSuperTestのインスタンスだから上の書き方なら
SuperTest[] abc = new SuperTest[2];
abc[0] = new SuperTest();
abc[1] = new SuperTest();
というように普通の変数に代入するのと同じように書く
これは
SuperTest[] abc = new SuperTest[] {new SuperTest(), new SuperTest()};
と書け
SuperTest[] abc = {new SuperTest(), new SuperTest()};
のように宣言と初期化を同時に行うのなら略記できる
735 :
734 :2008/11/10(月) 14:52:31
SuperTest[] abc = new SuperTest[2];
abc[0] = abc[0];
abc[1] = abc[1];
自体はabcが代入されたあとなのでコンパイルエラーにならないので
「ということをやろうとしているのに等しい」は大体の意味合いとしてってことで
>>733 の言うように
宣言と初期化を一緒に行う場合はabc自体が確実に代入されたあとでないと
abcを初期化には使えない
736 :
732 :2008/11/10(月) 15:13:02
勉強になりました!ありがとうございました。
737 :
デフォルトの名無しさん :2008/11/10(月) 20:11:42
すみません。まだ、会社に入ったばっかなんですが、メインメソッドのなかでスレッドを使って InterruptedExceptionの発生する箇所にはtry{} catch(InterruptedException)で例外発生時の捕まえる文を書きました。 先輩が、mainメソッドにもthrows InterruptedExceptionを書かなくちゃいけないといってきたんですが、 正直その先輩はちょっと怪しいです・・本当に書かなくちゃいけないのですか? プログラムとしてはこんな感じです。↓ public static void main(String[] args) throws InterruptedException { // 何らかの処理 try { Thread.sleep(1000); } catch(InterruptedException e) { System.out.println(e); } }
そんな会社に入ってしまってご愁傷様です
739 :
737 :2008/11/10(月) 20:19:01
>>738 やっぱそうですよね・・ 例外が発生する箇所はちゃんとtry{~}catch(InterruptedException){~}
でキャッチするように書いているので、書く必要はないですよね。
基本的に例外が発生して呼び出しもとのクラスに処理依存するときにthrows節を書かなくてはいけないと
認識していました。
どう考えても、理屈に合わないので、ここで聞いてみました。答えがわかって良かったです。
ありがとうございました。
それはそうとして、InterruptedException を無闇に握り潰してはいけないぞ わかってやる分にはいいが
ちなみに、InterruptedException のハンドリングを次の機会に回してしまう場合は、 例外処理の中で Thread.currentThread().interrupt() を呼び出して復元しておくのが定跡
742 :
737 :2008/11/10(月) 20:38:24
>>740-741 どうもありがとうございます。スレッドはあまり触れた事がないので
分厚い本をみて勉強しながらプログラムを組んでいる最中です。
ご助言をスクラップブックに保存しておいたので、なにかのときには
役にたてたいとおもっています。
他のご助言までくださり、ありがとうございました。
interfaceのメリットがよく分かりません。 interfaceを実装(implement)するクラスで、制約通りにメソッドの中身を書くわけですが、 最初からメソッドをそのまま書いた場合と、 interfaceで定義されてる定数が利用出来る意外のメリットはあるんでしょうか。 interfaceがあるから、これだけコードを書かなくて済むとか、 メリットについて分かりやすいっていうサイトや表現があればお願いします。
interfaceに定数書くのは良くない使い方 void hoge(Printable obj) { obj.print("hoge"); } こういう風に、実装に関係なくメソッドを呼び出せる 実際に表示するのはコンソールかもしれないしファイルかもしれないしメッセージボックスかもしれない でも「文字列を出力する」のは同じだから同じように扱える
>>743 どっちかっつーとinterfaceのメリットっつーか
interface使わない場合のデメリットになるけど
「実装の多重継承」でぐぐってみれば?
インタフェースや抽象クラスは、 それを実装する側に属するのではなく、それを呼び出す側に属する。 使われ方を想定せずに、いきなりインタフェースや抽象クラスを書いて それを実装しても無意味
747 :
デフォルトの名無しさん :2008/11/10(月) 22:51:14
WebProg板で聞いても詳しい答え教えてくれそうも無いから、詳しそうな人が多いから ここで聞きたいんだけど、あと、Javaの文法的なことだし・・ サーブレットのdoGetメソッドって実装するときextends HttpServletクラスを実装してて doGetメソッドをオーバーライドすることになるんだろうけど、どうしてsuper.doGet()の一文がなくていいの? 教えてエロイ人。
>>747 HttpServlet.doGet を使わないから。
749 :
747 :2008/11/10(月) 22:59:20
?? 意味がちょいと・・あっしは達人ではないので・・ でも、わかりました。HttpServletクラスがabstractクラスだからですよね。 でも、他のところでまた疑問が・・ initメソッドだとあるホームページだとsuper.init()って書いてあるんです。。なんでだろう。難しいなあ。
750 :
デフォルトの名無しさん :2008/11/10(月) 23:04:45
JTextAreaでテキスト入力してると、時々入力で固まったり、 ウィンドウが真っ白になったりする事があるのですが、 これはJavaのバグでしょうか?JDK1.6.0_10を使っています。
>>749 abstract はあまり関係ない。
単に HttpServlet クラスで定義された doGet メソッドを使用せずに
継承した独自のクラスで定義した doGet メソッドを使用すれば事足りるから
super.doGet を使わない。
init の例だと HttpServlet クラスで定義された init を使いたいから
super.init してるだけ。
752 :
747 :2008/11/10(月) 23:10:24
>>751 どうもありがとうございます。とてもよく分かりました。
その辺の区別をつけるのが難しいと思いますが、難しい事を考えず
本のサンプルの通りにしばらくやっていこうとおもいます。
とても丁寧に教えていただいてありがとうございました。感謝しています。
一人で何回質問してんだよ
質問スレなんだから 小さいこと言うなって
755 :
デフォルトの名無しさん :2008/11/11(火) 01:02:10
まだ始めて2日目の超初心者です… 「Test」と表示されるアプレットを作ったのですがブラウザに表示されません。 appletviewerではきちんと表示されたのですが… ブラウザはFirefoxの最新版です。 何か設定が必要なのでしょうか? よろしくお願いしますm(__)m
>>755 <applet code="クラス名" width="幅" height="高さ">
</applet>
上の文はHTMLに書いたよね?配置するフォルダとかあってるよね?
757 :
デフォルトの名無しさん :2008/11/11(火) 01:26:18
>>756 はい。
アプレット以外のプログラムはいくつか作りましたし、フォルダとかは間違いありません。
htmlの中身も確認しましたが間違いありませんね…
758 :
デフォルトの名無しさん :2008/11/11(火) 01:36:50
今、他のマシンでIEで試したところさくっと表示されました… やっぱりFirefoxが原因みたいです。 これだとスレ違いになってしまいますね… もう一度調べてみることにしますm(__)m
Javaで書かれたライブラリのapidocsとか見てると foo.bar.Baz foo.bar.impl.BazImpl な風にユーザが利用することを想定しているfoo.bar.Bazと その内部実装であるfoo.bar.impl.BazImplに別けてる事例を散見するんですが こういう技法は一般的にはなんて呼ばれてるんでしょうか? またこういうのを勉強するには何を参考にしたらいいでしょうか?
final修飾子はフィールドにつくと値を変更出来ないと書いてあるのですが、 なぜ配列の場合は変更出来るのでしょうか? public class Test { public static void main(String args[]){ final int[] a = new int[] {10}; System.out.println(a[0]); a[0]=12; System.out.println(a[0]); } }
>>760 final は変数に対する修飾子。
変数に対して再代入出来なくなるだけなので、変数が指しているオブジェクトは変更できる。
>>760 の例で言うと、変数 a に対して、
a = new int[5];
などのように再代入できなくなっているが、
a[0] = 12;
のように中身は変更できる。
String などのように元々変更できないものを指す変数に対して final を付ければ、その変数に
対して再代入できなくなり、なおかつオブジェクトも変更できないので、全体として定数と
同じ扱いになる。
>760 配列は基本型ではなく参照型だからね、クラスと同様に。 クラスの場合で考えてみて… final Test t = new Test() ; で、new したあとで t が持ってるフィールドを変更できなくなっちゃったら困るでしょ。 ではこの場合の final はどういう意味か? それは「t が示すインスタンスを、他のインスタンスに変えることはできない」って意味になる。 Test t = new Test(); // instance1 t = new Test() ; // instance2 これだと、2行目で instance2 が作られると同時に、変数 t は instance2 を示すようになる。 この時点でほかに instance1 を示している変数などが存在しなければ、instance1 はガベージコレクトの対象になる。 でも t がこのように違うインスタンスを示すようになっては困る場合に、t の宣言時に final をつける。 配列の場合も同様。言語によってイメージが違うけど、 Java における配列は、たとえ基本型の配列であっても「配列という参照型」になるんだ。 つまり「配列の中身を変えられたくない」ではなく「他の配列を指さないでほしい」という配列変数に final をつけるんだな。
763 :
760 :2008/11/11(火) 08:39:28
すみません。以下のコードを実行すると、java.lang.ArrayIndexOutOfBoundsException: 4 が発生します。自分的にはcreateメソッドを呼び出す際に配列abcは配列defを指し示すように したつもりなので、createメソッド呼び出し後は配列abcの要素数は3ではなく5のつもりなのですが。。 どの認識が違うのでしょう?? public class Test3 { public static void main(String args[]){ Object[] abc = new Object[] {3, 56, 2}; create(abc); abc[4]=1000; for(Object num: abc) System.out.println(num); } public static void create(Object abc){ Object def = new Object[5]; System.arraycopy(abc, 0, def, 0, 3); abc = def; } }
>764 create() メソッドの2行目をよく見るんだ
>>764 Javaには参照渡しがないから
メソッド内で参照型の引数に新しい参照代入しても呼び出し元では影響受けない。
>>765 ?createメソッドの中では
1行目:Object def = new Object[5];
この時点でabc={3, 56,2}, def={Null, Null, Null, Null, Null}
2行目:System.arraycopy(abc, 0, def, 0, 3);
この時点でabc={3, 56,2}, def={3, 56, 2, Null, Null}
3行目:abc = def;
この時点でabc={3, 56, 2, Null, Null}, def={3, 56, 2, Null, Null}ではないのでしょうか?
配列はクラスやStringと同様、アドレスを指し示しているだけなので、C言語のノリでいくと
abcはdef配列をポイントするようになるかと思ったのですが
Object def = new Object[5]; ---> Object def = new Object()[5]; ではなかったかな?
769 :
764 :2008/11/11(火) 09:17:04
>>768 本当ですか。
Object def = new Object()[5];にすると
xception in thread "main" java.lang.Error: Unresolved compilation problem:
The type of the expression must be an array type but it resolved to Object
というコンパイルエラーが発生するようです
770 :
768 :2008/11/11(火) 09:20:55
あ、正しくは、 Object[] def = new Object()[5]; だと思う。あと引数のabcもObject[] abcのはず。 それから、最後のabc=defは意味をなさない。
771 :
768 :2008/11/11(火) 09:27:48
だけど、ちょっと不思議なプログラムですね。 引数でObject abcとするのと、Object[] abcとするのとでは意味が違う けれど、Javaでは、実引数が配列だった場合もObject abcで受け取れる 事は受け取れてしまう。だからコンパイル・エラーにはなってない。 この場合、abc=defは、意味が分かりにくい。 言語仕様によっては中身もコピーしてくれても良さそうではある。 しかし、長さまで修正するかな・・・。 これがやりたいなら、戻り値をvoid型にせず、Object[] 型にして return 文でdefを返し、main側で、abc=create(abc)とすると良いです。
>>767 C言語のノリでいくと、
void create(void* abc){ abc = 0; }
int main(int argc, char* argv[]) {
void* abc = malloc(sizeof(int) * 3);
create(abc);
printf("%p", abc);
}
で何が表示されるか? ってのと似てる。
773 :
764 :2008/11/11(火) 09:53:18
まずつまらない文法上の誤りがあったので最初に修正版を載せます。
public class Test3 {
public static void main(String args[]){
Object[] abc = new Object[] {3, 56, 2};
create(abc);
// abc[4]=1000; ERROR!!
for(Object num: abc) System.out.println(num);
}
public static void create(Object[] abc){
Object def[] = new Object[5];
for(Object num: def) System.out.println(num);
System.arraycopy(abc, 0, def, 0, 3);
for(Object num: def) System.out.println(num);
abc = def;
}
}
>>770 Object[] def = new Object()[5];
これはエラーになりますので()は不要かと思います。
766さんの回答が恐らく答えなのでしょうが、あんまりよくわからないです。
C言語だと、関数内でポイントし直すとそれはmainに戻ったときも有効だと思うのですが、
Javaの場合はC言語と同じように配列は参照型でありながら、(参照渡しがないから?)
動作が異なるということでしょうか?すみません、参照渡しって何でしょうか。。
どなたかCとJavaの違いを解説して頂けるとうれしいです
>>773 違う言語を似てるからそうだろとか無理だろw
Javaの入門書1冊やってから来てくれ
というより、
>>773 はC言語も、もうちっと勉強した方がいい。
たぶんC言語の方の理解が中途半端だから混乱してるだけ
>>773 これで何が表示されるか考えてみるといいよ
intは値型だろって言いたいなら、Integerでもいいよ
public static void main(String[] args) {
int abc = 3;
create(abc);
System.out.println(abc);
}
public static void create(int abc) {
int def = 5;
abc = def;
}
777 :
デフォルトの名無しさん :2008/11/11(火) 12:03:00
mainメソッドってstaticがついてるけど、これってJVMが静的関数として呼べるからって本にかいてあるけど、 そこまで徹底しなきゃいけないの?
うん
>>773 mainメソッドにある変数abcとcreateメソッドでパラメータとして受け取ったabcは
そもそも別の変数だと理解しないとな。
createメソッドを呼び出すとき、mainのabcの値(配列なので参照先≒Cでいうアドレス)がcreateのabcに入る。
そのabcにdefの値(同じく配列以下略)を入れたところで、createから戻った時に引数の変数の値も戻される
(createのabcの値がmainのabcに上書きされる)わけじゃないから、mainのabcはcreateを呼び出す前と変わらない。
以前のスレにこの辺をAAで上手く書いた人がいたんだがな・・・
>>773 Javaは「参照の値渡し」。
似たようなことをやりたければ、
abc = create(abc); となるように create を書き換える。
いろんな意味で、もっと仕様を固めた方が良いと思うがね。
ジェネリクスを用いたクラスにCloneableを実装してclone()を作りたいのですが どのように作ればよいでしょうか
このように作ればよい public class MyObject<T> implements Cloneable { public MyObject<T> clone() { try { @SuppressWarnings("unchecked") MyObject<T> clone = (MyObject<T>) super.clone(); ごにょごにょ return clone; } catch (CloneNotSupportedException e) { throw new AssertionError(e); } } }
今サーブレットの勉強を始めたばかりの所なんですが、
たとえばweb.xmlの
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">
こういうのって皆さん覚えているんでしょうか?
それとも一々ググったり過去のソース見たりしてコピペして書くものなのですか?
おまじないは丸暗記、これ基本。
今の開発現場だとバージョンは何が主流ですか? J2SE5.0系?それともJavaSE6.0系?
あ、すみません。Web系の仕事でです。
787 :
781 :2008/11/11(火) 19:01:40
>>783 そんなもの最初のうちは丸暗記Orコピペで十分。ただ、バージョンごとに違うからServlet2.5を使いたいときはそれ相応の
文章を書かなくてはいけないから、そこだけは注意する。
5年もたてば、どういうことかすぐわかるよ。っていうか、すぐわかりたいならXMLのDTDやらスキーマ(Schema)やら
本で勉強したらいいよ。内容としては、文章の定義をどういう定義にするかっていう糞つまらない話なだけだから。
789 :
デフォルトの名無しさん :2008/11/11(火) 22:13:24
clone()を実装するときはデープコピーが多いので気になっているのですが、 もしclone()のシャローコピーはどういうパターンのときで有用なのでしょうか?
>>789 メモリ節約したい場合とか、
メンバーフィールドが参照してるインスタンスを共有したい場合とか。
791 :
デフォルトの名無しさん :2008/11/11(火) 23:44:19
それならthisを引数に渡したりすればいいし、thisを使えば済むんでない?
>>791 そもそも、コピー取りたいんだから this と完全に同じじゃダメでしょ。
抽象的な質問には抽象的な答しか返ってこないという見本だな。
答えられないと抽象的なことを言って逃げてる奴がいるようだなw
話題はコピーじゃなくてクローンじゃなかったのか。 そもそも、シャローコピーだとオブジェクトの状態はほとんどthisと同じになるんじゃないのか?実装によるけど。
clone()自体使ったことないな
797 :
デフォルトの名無しさん :2008/11/12(水) 01:45:18
使ったことなきゃclone()の醍醐味を味わえない罠w
798 :
デフォルトの名無しさん :2008/11/12(水) 02:02:06
モバイルコンテンツやりたいんだけど なにしたらいいの?
とりあえず絵でも描けば?
すみません。初めてjavaを書いたのですが、自作のソートメソッドを呼び出そうと するとエラーになります。なんででしょうか? エラー: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method Sort(Student[]) is undefined for the type Test ((Test.java)) public class Test { public static void main(String args[]){ Student[] student = new Student[6]; student[0]=new Student("1gou", 1, 150, 89); student[1]=new Student("2gou", 2, 140, 30); student[2]=new Student("3gou", 3, 170, 47); student[3]=new Student("4gou", 4, 110, 67); student[4]=new Student("5gou", 5, 200, 50); student[5]=new Student("6gou", 6, 90, 77); Sort(student); } }
((Student.java)) public class Student { public String name; public int studentid; public double height; public double weight; public Student(){ this.studentid=0; this.height=0.0; this.weight=0.0; } public Student(String name, int studentid, double height, double weight){ this.name = name; this.studentid = studentid; this.height = height; this.weight = weight; } つづく
public Student[] Sort(Student[] student){ Student temp = new Student(); for(int i=0; i<student.length; i++){ for(int j=i+1; j<(student.length)-i; j++){ if(student[i].height>student[j].height){ temp=student[j]; student[j]=student[i]; student[i]=temp; i++; } } } return student; } } すみません。いっぱい貼りましたが質問内容はすごい基本的なことだと思います。
>>800 意訳: Testクラスの中で Sort(Student[]) メソッドが定義されていません。
このエラーだけを直すなら以下の通り。
でも、初心者本なり、Webなりでキチンと基礎をやってからの方が良いと思う。
Sort(student) を
Student.Sort(student) へ
public Student[] Sort(Student[] student) を
public static Student[] Sort(Student[] student) へ
// メソッド名の1文字目はラテン文字の小文字で。
コンパイルが通るようになりました。クラスメソッド(静的メソッド)とは、手続き型の関数みたいに使えるんですね。 勉強になりました。あと疑問なんですが、上記のStudentクラスのコンストラクタで、基本型の変数を初期化している のですが、Stringも初期化しようと思ってString name=Null;と指定したところコンパイルエラーになりました。 (1)なぜエラーになるのでしょうか? (2)通常Stringなどのオブジェクト変数はコンストラクタでどのように初期化するのでしょうか?
>>804 null と書こうとして Null って書いちゃった
みたいな間抜けな話じゃないよな?
>>804 間抜けな話です。生まれて初めて知りました。。オブジェクト型でも初期化出来るんですね。
nullで。(汗)ありがとうございました!
J2EEアプリケーションサーバマシンにマルチコアプロセッサを使用している場合 サーバに大量のアクセスがあった際、Servletの動作はシングルコアより早くなるでしょうか?
確かに可能性はあるが保証の限りではない
>>808 ありがとうございます。
Javaのマルチスレッド処理はマルチコア動作に対応しているが、
負荷がかかっている場合でも必ずしも全てのコアが効率的に動作するとは限らないということですね。
Javaのマルチスレッドはネイティブスレッドだから、OSのスケジューラしだいなんでは。
811 :
デフォルトの名無しさん :2008/11/12(水) 13:46:36
csvファイルに3人分のデータを保存(一行で一人分) 1,a,b,c, 2,d,e,f 3,g,h,i これを読み込んで配列に代入する際に2次元配列に代入するにはどうすればよいでしょうか。 よろしくお願いします。
>>811 BufferedReader br=new BufferedReader(new FileReader("ファイルパス"));
String str;
String buff[][]=new String[3][4];
for(int i=0;(str=br.readLine())!=null;i++)
buff[i]=str.split(",");
813 :
デフォルトの名無しさん :2008/11/12(水) 15:48:38
>>812 ありがとうございます。
これを実行したら配列に代入することはできたのですが、csvファイルの1行目だけうまくいきません。
[0][0]~[0][3]がcsvファイルの2行目を読み込んでしまいました。
何が原因かお分かりになりますでしょうか。
初歩的で申し訳ありません。
815 :
デフォルトの名無しさん :2008/11/12(水) 17:21:48
>>806 あれ?君がうわさの「鼻糞クン」ですか?
clone()というのはC++のコピーコンストラクタと同じだろw
ショートカット(Windows)やシンボリックリンク(UNIX)の リンク先を取得できますか? sun.awt.shell.ShellFolder というクラスを見つけましたが Sun固有のAPIのようですし。
>>817 1.7からは、java.nio.Path#readSymbolicLine() が追加されて、
それ使えばシンボリックリンクは読める予定。
現行バージョンではベンダ固有のAPIとかライブラリとか
自前でJNI使って読むとかしないと取得できない。
Windowsのショートカットとシンボリックリンクは別物って既に分かってるか
>>818 そうですか。JDK7まではsun.awt.shell.ShellFolder使ってみます。
ありがとうございます。
>>819 もちろん分かってます。
しかしsun.awt.shell.ShellFolderでは
ショートカットとシンボリックリンクの区別はないようですし、
片方がサポートされるなら他方もサポートされるだろうと思い
同列に扱いました。
821 :
デフォルトの名無しさん :2008/11/12(水) 21:17:55
>>814 さん教えていただく立場にありながら遅れてしまい申し訳ありません
>>813 です。
ソースは
import java.io.*;
public class tom{
int num,wei;
String sex,nam;
void showProfile(){
System.out.println(num+" "+wei+" "+sex+" "+nam);
}
}
822 :
デフォルトの名無しさん :2008/11/12(水) 21:19:08
class alt{ public static void main(String args[])throws IOException,FileNotFoundException{ String filename="fi.csv"; BufferedReader br=new BufferedReader(new FileReader(filename)); String str; String line=br.readLine(); String buff[][]=new String[3][4]; for(int i=0;(str=reader.readLine())!=null;i++){ buff[i]=str.split(","); } tom a1=new tom(); a1.num=Integer.parseInt(buff[2][0]); a1.wei=Integer.parseInt(buff[0][1]); a1.sex=buff[0][2]; a1.nam=buff[0][3]; a1.showProfile();//これをa1~a3まで作る予定。 } } です。 まだおられましたら、よろしくお願いします。
>>822 一行目読み込めないって
String line=br.readLine();
これなにさ。
勝手に改変されて読み込めないとか言われても知らんがな。
>>a1.num = Integer.parseInt(buff[2][0]); buff[0][0]じゃないの? >>for(int i=0;(str=reader.readLine())!=null;i++){ readerじゃなくてbr
825 :
824 :2008/11/12(水) 21:43:16
まだつっこみどころあったかw
826 :
デフォルトの名無しさん :2008/11/12(水) 21:44:55
>>823 申し訳ありません。教科書を見つつやっていて勝手に付け加えてしまいました。
一行を消したらうまくいきました…
ほんとに助かりました。
ありがとうございました。
827 :
デフォルトの名無しさん :2008/11/12(水) 21:47:01
ミスだらけでほんとに申し訳ありませんでしたorz ありがとうございました。
あのー。clone()はどういうときに活用するんでしょうか?
クローンしたいとき シャローコピーとディープコピーでぐぐればいいんじゃない
うむ
そうなら、Serializableとどう違うんですか?機能的には同じコピーですよね。
832 :
デフォルトの名無しさん :2008/11/12(水) 22:30:37
スレ違いかもしれませんが、スクリーンショットってAltとPrtを同時押しでいいんですよね? なんかそうしても画面全体が対象となってしまうのですが・・・ 解決策があったら教えていただけないでしょうか。
>>831 Serializableはオブジェクトをファイルに保存したりネットワークに送信したりするのが主目的だろ
コピーのためにあるわけじゃない
コンパイルエラー:The constructor SuperTest() is undefinedが発生します。 なんででしょうか?SuperTestのコンストラクタは定義しているのですが、何が悪いのですか? class SuperTest{ protected int a; public SuperTest(int a){ this.a=a; } } class ChildTest extends SuperTest { private int b; public ChildTest(int a, int b){ this.a=a; this.b=b; } } public class Main { public static void main(String args[]){ ChildTest abc = new ChildTest(4, 7); } }
>>835 引数なしの SuperTest() がないから。
言語仕様により、ChildTest(int a, int b) の先頭で暗黙のうちに
引数なしの SuperTest() が呼ばれてる。
明示的に SuperTest(int a) を呼びたい場合は
ChildTest(int a, int b) の先頭で super(a); しないとだめ。
>>835 ChildTestのコンストラクタでは、SuperTestの引数なしのコンストラクタ
を自動的に呼び出そうとする。
なので、引数なしのSuperTestのコンストラクタが定義されていないので
エラーになっているんだと思う。
ChildTestの{の直後の行にsuper(a);と書いて、this.a=a;を削除すれば、
動くはず。
知りませんでした。勉強になりました。もう一つ質問なのですが、たまに人のコードを見ていると ChildTest abc = new ChildTest(4, 7);のところを SuperTest abc = new ChildTest(4, 7);、つまり親クラス 変数 = new 子クラス()と右辺と左辺が 違うものを見た事があるのですが、これは何がメリットでこのようなことをするのでしょうか? ちなみに、 SuperTest abc = new ChildTest(4, 7); System.out.println("abc's a= "+abc.a); System.out.println("abc's b= "+abc.b); とやってみたところabc.b cannot be resolved or is not a fieldというエラーに なりました。ChildTest(4, 7)でインスタンスをつくっている以上、b=7も存在している のではないのでしょうか?
実際には存在しているのだが、abcをSuperTestとして扱うと宣言した以上、それは見えないものとして扱われる
>>838 そのように書くと、コンパイル時には、abcは、SuperTestのメンバにしか
アクセスできない様な書き方になる。bというメンバはSuperTestには
ないのでコンパイル時エラーになる。
しかし、実行時には確かにbというメンバも持っていて、abcが参照している
先は、SuperTestではなく、ChildTestになっている。
ChildTestでSuperTestで定義されたメンバ関数をオーバーライドすると、
abc.メンバ関数()と書いた時、ChildTestの方の新しい関数が呼び出される。
その書き方は何を目的とするかというと、SuperTestで定義された
変数と関数しかコンパイル時には「書かない」と言うこと。
「使わない」というのは微妙に間違い。使っていないようで実際には
新しい方の関数が使われる時があるから。
841 :
840 :2008/11/13(木) 00:41:31
要は、SuperTestを継承したクラスが、ChildTest1, ChildTest2, ChildTest3 と複数あった場合に、SuperTestで定義された関数しか使わないように書いて おいて、実行段階で自動的に新しくオーバーライドしたそれぞれの関数を呼 び出すようにする事が出来る。
なるほど。以下の理解であってますか? class SuperTest{ protected int a; public SuperTest(){ this.a=0; } public void printSuperTest(){ System.out.println("SuperTest's a is: "+this.a); } public void showTest(){ System.out.println("SuperTest's a is: "+this.a); }} class ChildTest extends SuperTest { protected int b; public ChildTest(int a, int b){ this.a=a; this.b=b; } public void printChildTest(){ System.out.println("ChildTest's a is: "+this.a); System.out.println("ChildTest's b is: "+this.b); } public void showTest(){ System.out.println("ChildTest's a is: "+this.a); System.out.println("ChildTest's b is: "+this.b); }}
public class Main { public static void main(String args[]){ SuperTest abc = new ChildTest(4, 7); System.out.println(abc.a);//SuperTestのフィールドにはアクセスOK abc.printSuperTest();//SuperTestのメソッドにもアクセスOK // System.out.println(abc.b);//ChildTestのフィールドにはアクセスNG // abc.printChildTest();//ChildTestのフィールドにはアクセスNG abc.showTest();//オーバーライドの場合だけ、特別にChildTestのメソッドにアクセス可能、これがメリット }}
参考書3冊買って読んで理解してからそれでも分からないところを質問に来い
>>838 ChildTestをSuperTestの一種とみなしたいとき。よくある例:
class 図形 { void 表示() {...} } // 普通はabstract classかinterfaceだが
class 円 extends 図形 { void 表示() { /* 円を書く */ } }
class 正方形 extends 図形 { void 表示() { /* 正方形を書く */ } }
図形[] いろいろ = new 図形[2];
いろいろ[0] = new 円(); // 普通はこんな風には書かないが
いろいろ[1] = new 正方形();
for (int i = 0; i < いろいろ.length; i++) { // 普通は拡張for文使うが
いろいろ[i].表示();
}
表示したいときは、「図形」として「円」が入ってようが「正方形」が入ってようが関係なく「表示()」を呼び出せばいい。また、後で図形の種類を増やしても、「図形」しか使っていない部分は修正せずに済む。
ググってもよく分からなかったため、ここで質問させていただきます・・・ 二次元の配列C[][]をreturn文で戻り値を返す時は return(C[][]); ではダメなのでしょうか・・・? コンパイルしても文法エラーとでてしまって困ってます。。 初心者の質問で申し訳ないですが、回答お願いします。。。
>>845 ヤバいくらいわかりやすかったっす。
イメージ出来ました。
return C;
>>848 ありがとうございます。無事コンパイルできました!
BitSetみたいにjava.util.Collectionを論理演算するようなライブラリはないでしょうか?
and -> Collection#retainAll or -> Collection#addAll notは無い
>>851 notに関しては、あるCollectionの要素でないもの、というものは、
要素の全体集合を制限しておかないといくらでも存在するので、
全体集合的なCollectionの中の部分的なCollectionの補集合を取るということなら、
全体からCollection#removeAllで部分的なCollectionを削除すればいいと思う。
854 :
デフォルトの名無しさん :2008/11/13(木) 14:11:50
毎秒ごとに使用する変数は宣言しなおさないほうがいいでしょうか? 例えば while(TRUE){ String s=getMethod(); if(judgeMethod(s)){doMethod(s);} sleep(1000); } なのと String s while(TRUE){ s=getMethod(); if(judgeMethod(s)){doMethod(s);} sleep(1000); } なのとです
>>854 String sだけなら場合は効果はない。
>String s=getMethod();
を全部外に出せるならある。
856 :
デフォルトの名無しさん :2008/11/13(木) 14:35:27
むむむ、ちょっと外には出せそうにないです じゃあ行数短い上にしましょうか どうもありがとう ちなみに細かいですが下は String s; //行末のセミコロン while(true){ //trueは小文字 s=getMethod(); if(judgeMethod(s)){doMethod(s);} Thread.sleep(1000); //Threadのメソッド } が正しかったですね ちょっと慌ててました
857 :
デフォルトの名無しさん :2008/11/13(木) 20:08:02
858 :
デフォルトの名無しさん :2008/11/13(木) 21:49:51
>>852 ,853
それらのメソッドをコレクション向けに総合的にライブラリにしたような、論理・集合ライブラリみたいなプロジェクトは存在しないのでしょうか?
すでにあるメソッド1つ2つで済むのに、なんで別のライブラリにまとめなおす必要があるんだ?
860 :
デフォルトの名無しさん :2008/11/13(木) 22:41:41
コレクションのデータ構造と同じく実装するのはそんなに難しくないんですけど、集合・論理演算はよく使いませんか? そういうのはコレクション・フレームワークみたいにライブラリにして再利用するものかと思います。 それも、たいていの場合、熟練者がプロジェクトでやってるとより使いやすい仕様や設計になってるんですけど、そういうのはないんでしょうか?
ListじゃなくてSet使えば、って話じゃないのか?
質問です。 BufferedWriterクラスのflush()メソッドの説明をみると “ストリームをフラッシュする” とあるのですが、フラッシュするとは一体なにをすることなのでしょうか?
バッファに溜まったデータを吐き出す。
熟練者ならビット演算は当然得意だよな?
得意とか苦手とかないだろ 回路作るわけじゃあるまいに
AWTのテキストフィールドに入力制限を設けたいのですが、 入力して確定していない全角文字の文字数制限のやり方が分かりません。 半角のみの場合はKeyListenerやKeyAdapterで 入力文字数、入力文字種の制限かけられるのですが・・・。 例えば、氏名を入力するテキストフィールドに20文字までの入力制限をかけても あああああああああああああああああああああああああああああ //←確定していない状態 と入力すると制限を超えて入力されてしまいます。 確定前の全角文字数を監視して 制限超えたらキー入力受け付けなくする方法ないでしょうか。
867 :
862 :2008/11/13(木) 23:33:59
>>863 いままでflush()メソッドを知らなかったので使っていなかったのですが
それでもファイルにはきちんと書き込みが行われていました。
flushメソッドを呼ばないと
せっかくBufferedWriterクラスをつかっても
writeメソッドが呼ばれる度に書き込みを行ってしまうのですね
勉強になりました。ありがとうございます。
>>867 逆
どうして
> writeメソッドが呼ばれる度に書き込みを行ってしまう
なんて結論になるんだろう
flushを呼ばないとバッファに溜まったものがファイルに書き込まれない可能性がある
flushを使わなくてもきちんと書き込まれていたのは最後にきちんとcloseしていたから
869 :
デフォルトの名無しさん :2008/11/13(木) 23:56:00
>>865 それじゃあなたは何を作ってるんですか?
ソフトウェアだろう。
>>867 closeを呼んでいれば、そのときにフラッシュもされる
872 :
862 :2008/11/14(金) 00:14:03
>>868 なるほど、closeすることによって書き込まれていたのですね。
詳しく説明してくださりありがとうございました。
また何かありましたらよろしくお願いいたします。
873 :
862 :2008/11/14(金) 00:18:02
>>871 それを聞いてとてもスッキリしました。
ありがとうございました。
874 :
デフォルトの名無しさん :2008/11/14(金) 00:52:20
集合演算の総合的なライブラリがあるなんて聞いたことないなw
JavaスレってC,C++宿題スレみたいな問題解きあってるスレない?
検索もできないのに、よくプログラムやろうと思うな
877 :
デフォルトの名無しさん :2008/11/14(金) 12:31:37
①以下のプログラムをコンパイルするとエラーになる。なぜか? class A {} public final class Test3 extends A {} class B extends Test3 {} ②以下のプログラムをコンパイルすると下記のようなエラーになる。どのように修正すればよいか? interface VideoGame { void play(String software); } public class Famicom implements VideoGame { public static void main(String[] args) { System.out.println("Famicom"); } } -------------------------------------------- Famicom.java:5: Famicom は abstract でなく、 VideoGame 内の abstract メソッド play(java.lang.String) をオーバーライドしません。 public class Famicom implements VideoGame { ^ エラー 1 個 わかりますか?
わかります しかし宿題は宿題スレへ
スレ違いの質問だったらすいません Javaを1から勉強し直そうと思っているのですが、1からの勉強に向いている本を教えてください 出来れば、エクリプスを開発環境にして書いてあるものだと助かります
hibernateを勉強しているのですが、 Sessionからマッピングオブジェクトを取得する処理で Product product = session.get(Product.class, i) のような記述があります。 このProduct.classというのがクラスを表わしてるのは分かるのですが 文法的にはどういう意味があるのでしょうか? Objectクラスのクラスメンバあたりに当たりをつけて調べてみましたが API見てもそれらしいメソッドは見当たりません。 そもそもclassメソッド自体が全てのクラスから検索しても存在しませんでした。
>>880 それはメソッドではないです
文法的にはクラスリテラルといい、そのクラスを表す java.lang.Class のインスタンスが得られます
Class foo = Product.class;
System.out.println(foo.getName());
のように使います
882 :
880 :2008/11/14(金) 14:11:31
>>881 おおなるほど…丁寧にありがとうございます。
API探しても見つからないわけだ。
883 :
デフォルトの名無しさん :2008/11/14(金) 15:49:13
これ宿題スレの方でしたか・・・ 宿題スレに一度はったものの、すれ違いだと思い 向こうで「誤爆です、すみません」とカキコしたバカ者です 失礼しました
>>879 勉強し直すって、すでにいくらからJava知識があるわけ?
885 :
デフォルトの名無しさん :2008/11/14(金) 22:48:24
質問なのですが、 入力した文字列、例えば"山田太郎"を入力などを 山田 太郎 のように半分で改行したいのですが、わかりません・・・ "\n"を使用するのは、わかります あと、StringBufferも使用するはずなのも・・・・
886 :
885 :2008/11/14(金) 22:54:58
解決すますた
javaの仮想マシンはjavaで作れますか?
>>887 javaの仮想マシンだけでjavaの仮想マシンを作るのは無理
javaのコンパイラあたりまでなら無問題
ってな答えを期待してる?
作れるよ でもそうやって作った仮想マシンを動作させるためには別の仮想マシンが要る
>>888 ,889
ブートストラップ問題じゃん、直接ネイティブコード吐けなきゃ無限ループ
ネイティブコード吐く所作ればどんな言語でも可能ちゃうか?
# COBOL に出来るかどうかはしらんが…
891 :
デフォルトの名無しさん :2008/11/14(金) 23:27:17
必要なところはCとか使うのは当たり前。 java languageにはnativeキーワードがあるから使れるだろ。おまえら適当なこと言うなよw
>>891 native なしでどこまで行けるかって話じゃねぇのか?
バイトコードのネイティブコンパイラだって Java で書いてあったりするじゃんw
使れる
894 :
デフォルトの名無しさん :2008/11/14(金) 23:41:45
質問です。 /*php html*/ echo <<<_EOD_ <img src="xxx.jpg" width="640" height="480" alt="" /> <p>W:<span id="w">640</span>pix H:<span id="h">480</span>pix</p> _EOD_; id="w" の640やid="h"の480はjavaスクリプトで取得できてるのですが 取得した値を例えば 640/2 などして320となった値width="640"を変更してwidth="320"と数値を変更したいのですが なにか方法はないでしょうか。
List型の変数に~Listって名前付けるのはおかしいんですか??? bookListとかproductListとか。 配列ならbookArrayでマップならbookMapで。 分かりやすいですよね? なのに口うるさい先輩が怒るんですよ 名前に型を持ち込んでどうする!お前は文字列変数全ての語尾にStringを付けるのかってね。 あぁ頭が固い堅物は嫌だね
いいんじゃないの コレクションの種類が重要でないときはbooksみたいに複数形にするだけにしてる
俺的には別に問題ないと思うが、 books とか products の方が良く使うかもしれん 単に短いから読みやすい/書きやすいという理由だが
898 :
デフォルトの名無しさん :2008/11/15(土) 00:47:54
口うるさい先輩がが怒るよりもコンパイラに怒られる方が怖いよ
コレクションって、コード読む時は「コレクションである」ことさえわかれば 十分(種類には興味がない)な場合が多いから、とりあえず複数形にするだけが多いかな だからって種類を明示して悪いことはないと思うよ
900 :
デフォルトの名無しさん :2008/11/15(土) 02:04:41
C#のコンパイラはすぐ怒るからなw gccのC++なんか最悪だろw
>>866 SwingのJTextFieldならできるけど、AWTのTextFieldは知らない。
ちなみにJTextFieldならこんな感じ。テキストのうpロダが見つからなかった…。
// ここから
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
* テキスト入力制限クラス
* @author nanashi
*/
public class LimitDocument extends PlainDocument{
/** 入力最大文字数 */
private int limit;
/**
* コンストラクタ
* @param limit 入力最大文字数
*/
public LimitDocument(int limit){
this.limit = limit;
}
@Override
public void insertString(int offset, String str, AttributeSet a){
String tempStr = str;
if(offset < limit){
int enableLength = limit - offset; // 現在の入力可能文字数
int inputLength = str.length(); // 入力文字数
try { if(enableLength > 0){ if(enableLength < inputLength){ tempStr = tempStr.substring(0, enableLength); } } else{ tempStr = ""; } super.insertString(offset, tempStr, a); } catch (BadLocationException e) { e.printStackTrace(); } } } /** * メインメソッド * @param args コマンド引数 */ public static void main(String[] args){ JFrame frame = new JFrame(); JTextField textField = new JTextField(); textField.setDocument(new LimitDocument(10)); frame.getContentPane().add(textField); frame.setTitle("入力テスト"); frame.setSize(500, 55); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
903 :
901 :2008/11/15(土) 04:20:21
あと逆に質問があるのですが、 SwingのJFrameにJButtonやJTextAreaを貼り付けて 表示させた時にウィンドウだけ描画されて中身が真っ白に なってしまう事があるのですが、JVMのバグでしょうか? それともsetVisible(true)の呼び出しタイミングが悪いのでしょうか? ちなみにWindowsXP SP3、jdk1.6.0_10で実行しています。
表示した後にコンポーネントを貼り付けた場合は revalidate
>>895 複数の本をおさめるリストなのだから
「本たち(books)」よりも「本のリスト(bookList)」のほうが
言語として自然だという考え方もあると思う。
906 :
デフォルトの名無しさん :2008/11/15(土) 07:37:22
いや。問題は就職先を間違えたことじゃないか?というかまだヒヨッコの分際で先輩に反発してる自体であれだが・・・
ありゃ、逆に書いてしまったOrz 907破棄で
909 :
デフォルトの名無しさん :2008/11/15(土) 07:59:53
1から100までのシャフルされた(ランダムな)intをArrayに25ほど入れたいのですが、方法を教えてください。
910 :
デフォルトの名無しさん :2008/11/15(土) 08:27:23
>>895 ぼくは分かりやすくていいとと思うけどな
>>909 シャッフルして頭から25個使えばいい
シャッフルの方法解りませんとか聞くなよググれ
912 :
デフォルトの名無しさん :2008/11/15(土) 08:36:58
913 :
デフォルトの名無しさん :2008/11/15(土) 08:38:08
>>911 シャフルの方法じゃなくて、Random Number Generatorの方法を聞いてんだよ。
シャッフルじゃなくていいって事は同じ数字が2回出てきてもいいんか?
915 :
デフォルトの名無しさん :2008/11/15(土) 09:32:11
>>909 同じ数字が出てもいいなら、普通に乱数発生させて99.0倍したあと1足して、キャストするなりすればいい。
被ったらだめだというなら、
1:1~100の整数を配列に代入
2:500回位ランダムに入れ替える
3:頭から25個取り出す
これでおk。
または、既に発生させた乱数を調べ、被ったら新しく乱数を発生させる。
ただ、
>>909 のいう範囲と個数なら、今回は多分前者の方がいいよ。
917 :
デフォルトの名無しさん :2008/11/15(土) 10:02:19
>>916 重複なしは
2.for(i=1から100)swap(i,乱数)
がいいみたいよ
919 :
903 :2008/11/15(土) 10:30:36
>>904 コンポーネントはJFrameに貼り付けた後にsetVisible(true)を
呼び出しています。実装としては下の通りで、TestJFrameオブジェクトを生成して、
メソッドdisplay()を間隔を空けずに何回も呼び出しまくると、画面が真っ白な
ウィンドウが表示される事があります。
JavaVMの引数に-Dsun.java2d.noddraw=trueを指定しても同様の現象が発生します。
何が問題なのか全くわかりません。
public TestJFrame extends JFrame implements ActionListener{
public void display(){
JButton button1 = new JButton("test1");
button1.setActionCommand("test1");
JButton button2 = new JButton("test2");
button2.setActionCommand("test2");
JTestArea textArea = new JTextArea();
JPanel panel = new JPanel();
panel.add(button1);
panel.add(button2);
Container contentPane = this.getContentPane();
contentPane.add(textArea, BorderLayout.CENTER);
contentPane.add(panel, BorderLayout.EAST);
this.setTitle("test");
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setAlwaysOnTop(true);
this.setVisible(true);
this.toFront();
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("test1")){
System.out.println("test1");
} else if(e.getActionCommand().equals("test2")){
this.dispose();
}}}}
920 :
デフォルトの名無しさん :2008/11/15(土) 11:09:52
>>915 はじめから読み取れよ、おまえは馬鹿かw
終了
922 :
デフォルトの名無しさん :2008/11/15(土) 11:34:40
おまえはまた脳みそが糞まみれになってんのか
923 :
デフォルトの名無しさん :2008/11/15(土) 12:05:17
終了
普通に考えたら 1~100 の数字の組み合わせは 100! あるのだから、 単にスワップを繰り返すやり方は目の出方に偏りがでることは明らかだけどな
925 :
デフォルトの名無しさん :2008/11/15(土) 12:53:47
すいません Random.nextInt( ) についてご教授お願いします
ランダムで1~100から選んで、 今まで入れた中の数字と同じのがなければ無ければ、入れるって繰り返せばいいと思うが。
>>925 ランダムクラスの「次の整数をだす」っていう技をつかう
って言う意味だよ。
>>926 ひでえアルゴリズムだなw下手するとやたら時間かかるぞw
配列の0から99までをforループで順番にランダムに出た場所のものと取り替える
これを好きな回数やりゃいんじゃね
ランダムで1~100までの値が入った配列を作る 重複があれば最初に戻る
悪くしてどうすんだよw
JDK6Update10をインストールすると ステータス:インストーラを抽出していますってとこで止まり このWindowsインストーラパッケージには問題があります。 このインストールを完了するのに必要なプログラムを実行できませんでした。 と表示されてインストールできません。 原因は何でしょうか。 OSはvistaです。 j2sdk-1_4_2_18まで遡ったけど無理でjdk1.3.1_20でなら出来ました。
932 :
デフォルトの名無しさん :2008/11/15(土) 13:54:01
import java.util.Random; Random r = new Random(); for (i = 0 から 25回) int randint[i] = r.nextInt(100); これなら0-100のランダムINTだ。じゃあ、1-100にするには?
>>932 r.nextInt(100) なら0から99だろ…
GUIアプリを作ろうと思っています。 SWTやらSwingやらありますが、作りやすい(とっつきやすい)ものはどれでしょうか? Java経験:Springフレームワークを1ヶ月 GUI経験:Unix-CでのXlib
935 :
デフォルトの名無しさん :2008/11/15(土) 14:29:08
int randint[i] = r.nextInt(100)+1;
・[100][2]の2次元配列を作る。 ・[n][0]に、1~100を入れる。 ・[n][1]に、乱数を入れる。範囲は適当でいいし、重複してもいい。 ・[n][0]と[n][1]をペアにして、[n][1]の内容でソート。 ・[n][0]を取り出す。
937 :
デフォルトの名無しさん :2008/11/15(土) 16:46:46
java初心者です。 今継承、抽象クラスについて疑問があります。 今抽象メソッドX,とメソッドYを持つクラスAを抽象クラスとして、そこからクラスBとクラスCを派生するように します。この時クラスB、クラスCそれぞれでメソッドX,メソッドYを実装しないとエラーが出てしまうのですが、 これは片方のサブクラスだけでメソッドX,メソッドYを実装するだけでよくなるような対処法はありますか? よろしくお願いします。
抽象クラスってそもそも実装するメソッドを強制するためのものじゃないの? インターフェース使えば。
>>936 多次元配列は面倒だ。
・100個分の1次元配列を作る。
・「下位バイトは1~100、上位バイトは適当な乱数」という整数を入れる。
・ソートする。
・下位バイトを取り出す。
940 :
デフォルトの名無しさん :2008/11/15(土) 17:47:38
ttp://www.jitec.jp/1_20casl2/casl2dl_002.html ↑
こちらのIPAのHPからCASLⅡのシミュレータをDLしたのですが、どうやって実行すればいいのか分かりません
同じページに「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」と書かれているのですが、
「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」をDLしてインストールすれば
CASLⅡのシミュレータを動かせるんでしょうか?イマイチ分からないので、どなたか分かる方いましたら教えてください
あと、「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」というのは、
↓のHPからDLできるんでしょうか?IPAのHPにはリンクされているんですが、どこのボタンを押せばいいのか分かりません・・・
ttp://java.sun.com/products/archive
>>940 そこのページの J2SDK/J2RE - 1.4 の隣が 1.4.2_17 になってる状態でその隣の GOボタン押して、
次のページで Download J2SDK して、
次のページで Platform に自分の使ってるOS選択して
I agree to the following Software License Agreements のチェックオンにして continue、
次のページにバイナリへのリンクあるから、それダウンロード。
942 :
デフォルトの名無しさん :2008/11/15(土) 18:19:56
>>941 THX
何か英語ばかりで意味不明だったけど、ウィザードみたいのが出てきて
今、インストールが終わったっぽい・・・
だけど、これインストールしたけど、EXEファイルみたいなのは無いの?
どうやって、CASL2のシミュレータを動かせばいいのか分からん・・・
どこぞに実用に耐えるメルセンヌツイスタ-のJava実装はありませんかぁ???
>>943 実用に耐えるの意味がわからん。
普通に実装すればよい気がするんだが。
Runnableインターフェースを継承した方法で、 スレッドを作るとき、mainメソッドがどこにもありません。
作れといわれても、ソースを読んだら書いてなかったんです。
950 :
デフォルトの名無しさん :2008/11/15(土) 19:43:40
ソースのWebページ乗せるなり、本に載ってるコードコピペするなりしんと。
わろす
java EEの本によく出てくるEnumeration型って何なんですかね・・・ java SEのコレクションと何か違うんでしょうか?
>>919 ちゃんとイベントディスパッチスレッド上でやってる?
>>951 アプレットのことかな?mainメソッドっていうのは、いわゆる普通のアプリケーションで
どこからプログラムをスタートさせるのか書かないと実行マシン(仮想マシン)が、どこからはじめたらいいか
わからないからmainメソッドを書くんだよ。必ずmainメソッドから始まるようにするんだ。これはC言語とかC#でもいっしょ。
アップレットやサーブレットは決まった処理は決まったメソッドを呼ぶようにしてるから
メインメソッドがなくても、きまった処理が必要になったときに決まったメソッドが呼ばれるようになっているんだよ。
>>931 です
ウイルスキラーを削除したらインストールできました。
ウイルスキラーは終了するだけでは無理でした。
960 :
デフォルトの名無しさん :2008/11/16(日) 00:42:18
eclipseで import javax.media.opengl.GL; import javax.media.opengl.glu.GLU; ってパッケージのimportができないんだ eclipseでパスの追加はしてある /usr/lib/jvm/default-java/jre/lib/ext/jogl.jar /usr/lib/jvm/default-java/jre/lib/ext/jogl-natives-linux.jar なんでダメなんだろ
jogl.jarの中を見ると GL.classがあるのは /net/java/games/jogl/GL.class という場所だ ひょっとしてパッケージ宣言とimportが かみ合ってないんだろうか
962 :
903 :2008/11/16(日) 00:57:51
>>956 イベントディスパッチスレッドで実行しても同じ現象が発生してます。
JavaVMのバグなのか自分のプログラムのバグなのか切り分けができません。
正直疲れました。
SwingUtilities.invokeLater(new Runnable(){
public void run(){
try{
for(int i = 0; i < 1000; i++){
TestJFrame frame = new TestJFrame();
frame.display();
Thread.sleep(1000);
}
} catch(InterruptedException e){
e.printStackTrace();
}
}
});
>>962 for文の中の前2行(new と display)を invokeLater に実行させたら?
>962 イベントディスパッチスレッドをスリープで止めてるから他のものが描画されない。
どうしてもすぐ再描画したいなら、 RootPaneのpaintImmediatelyを使いなはれ
イベントディスパッチスレッドは止めちゃダメ。 Swing コンポーネントの描画も EDT で行われる。 どうしても1秒間止めたいなら javax.swing.Timer で1秒後に display() を 呼ぶようにすればいい。
967 :
903 :2008/11/16(日) 02:32:32
>>963 >>964 >>965 >>966 ありがとうございます。
Thread.sleep(1000)をはずしてTimerでやってみたましたが、
やはり数十回に1回は真っ白なウィンドウが出てしまいます。
その時のウィンドウはキーイベントを受け取っている(KeyListenerで確認)ので、
完全に固まっているわけではなく、描画だけが追いついていない様子です。
そんなに重い処理でもしているのでしょうか?私はそうは思えないです。
試しにpaintImmediately()やrepaint()を実行しても現象変わらずです。
サーブレットの仕様でインクルードというのがありますが インクルードすることによって何が出来るようになるんですか? ServletDispatcher(サーブレット名).include(req,res) これで指定したサーブレットのメソッドが使えるようになったりするんでしょうか?
>>968 include っていうのは、そのファイルに色々サーブレットの処理を書いておいて
それを表示するってことだよ。
たとえば、エラーページなんか表示したいとき、ひとつのページごとに違うエラーページつくってたら
めんどくさいでしょ?上の君の貼った例ServletDispatcher(サーブレット名).include(req,res) だと
色々なページでエラーがおきたら、そこのURLに飛ばしてそこでinclude文使ってあるファイルをインクルードすると
エラーページは1つ書いておけばいいだけになるんだよ。
サーブレットのメソッドもつかえるようになるんだけど、ページの取り込みというのが目的だよ。includeファイルにエラーのページの内容を書いておけば
そこで処理すればいいからね。ひとつのインクルードファイルだけですむんだ。include文でよまれたインクルードファイルは処理して
表示されるんだ。たとえば、a.classでb.classをインクルードするとa.classの中のb.classをインクルードした場所に
bのサーブレットで書いた部分が表示される。
971 :
デフォルトの名無しさん :2008/11/16(日) 18:56:35
以下の条件のようなクラスDollarを作成しています。 1.Moneyのサブクラスである。 2.コンストラクタにdouble型で値を入れるとその値を持つオブジェクトを生成する。 3.toStringメソッドを使うと、「$(コンストラクタに入れた値)」となる文字列を得る。 この特に条件2をどうしても実現できません(この場合のオブジェクトを生成する方法がわからない)。 アドバイス、ヒント等よろしくお願いします。
private double value; public Dollar(double value) { this.value = value; } でいいの?
973 :
デフォルトの名無しさん :2008/11/16(日) 19:05:08
>>972 すいません。クラスMoneyが抽象クラスなんです。。
abstract public class Money {
private double value;
protected Money(double value){
this.value = value;
}
abstract protected String getPrefix();
abstract protected String getPostfix();
@Override public String toString(){
return getPrefix()+String.valueOf(value)+getPostfix();
}
abstract public double getYenRate();
public double getValue(){
return value*getYenRate();
}
@Override public boolean equals(Object obj){
if(this == obj) return true;
if(!(obj instanceof Money)) return false;
Money m = (Money) obj;
return this.getValue() == m.getValue();
}
@Override public int hashCode(){
long v = Double.doubleToLongBits(getValue());
return (int)(v^(v>
>>32 ));
}
}
974 :
はんしょう :2008/11/16(日) 19:07:50
先の方に割り込む形になるのでしたら ごめんなさい JAVAのJBUILDER2005を見ています(正直使っているという状態ではまだないのです)が、 JPX(プロジェクト)ファイルを再BulidするのとMakeをするのとがメニューにあります。 1:この違いはなんでしょうか?一見どうちらを選択しての既存のものは実行できるか できないのか について言えば変わりはなかった。 2:幾つかのサンプルの内、上のようにJbuliderで実行をすると絵が出ますので、実行できるようになるですが Jbuliderのソフトを介さないで 実行できることはないでしょうか。 Javaは実行ファイル(正確な用語でないかもしれませんが)というものはないでしょうか? 例えばWindowsで言えば、拡張子.exeのファイルは直に、 あるいは FLASHの.swfファイルはIEで(ブロックは外して)開くことが出来る。同じflashの.flvファイルはWeb上で、起動ファイルを導入してしか見えない(Youtubeのように)。 JAVAはどうでしょうか? それと.JAVAという拡張子ファイルはソースファイルと理解してよいでしょうか?
>>973 なんで条件を後出しするの?
馬鹿なの? 死ぬの?
public Dollar(double value) { super(value); }
@Override protected String getPrefix() { return "$"; }
@Override protected String getPostfix() { return ""; }
976 :
デフォルトの名無しさん :2008/11/16(日) 19:12:03
>>975 申しわけございません。
ちなみにオブジェクトを生成っていうのはnew演算子を使う以外方法はないんですか?
977 :
デフォルトの名無しさん :2008/11/16(日) 19:23:43
ジェネリックスで行き詰まってしまったので助けていただけないでしょうか? 今作っているのは(例え話として)「引き出しクラスを指定できる可変長タンス」です。 public class Tansu { Class<? extends IHikidashi> hikidashiClass; ArrayList<IHikidashi> hlist; public Tansu(Class<? extends IHikidashi> hikidashiClass) { this.hikidashiClass = hikidashiClass; } public void addHikidashi() throws Exception {hlist.add(hikidashiClass.newInstance());} } Tansu tansu = new Tansu(ConcreteHikidashi.class); tanse.addHihidashi(); でタンスを作成して引き出しを追加します。ここまではOK。 ここでタンスの引き出しの中身を任意のクラスに差し替え可能にしようとしました。 public class Tana<NAKAMI> { Class<? extends IHikidashi<NAKAMI>> hikidashiClass; ArrayList<IHikidashi<NAKAMI>> hlist; public Tana(Class<? extends IHikidashi<NAKAMI>> hikidashiClass) { this.hikidashiClass = hikidashiClass; } ... で、中身が整数型なタンスを作成しようと Tansu<Integer> tansu = new Tansu<Integer>(ConcreteHikidashi<Integer>.class); とすると、".class"近辺が文法エラーで怒られてしまいます。 つまりジェリックスを利用して宣言されたクラスのClassオブジェクトを 入手したいのですが、これはどのようにすれば良いのでしょうか?
>>977 ConcreteHikidash の代わりに IntegerHikidash implements IHikidasshi<Integer> 使うとか。
979 :
デフォルトの名無しさん :2008/11/16(日) 20:16:59
>>978 あぁ、確かに出来ました。コードの何処かで
class IntegerHikidashi extends ConcreteHikidashi<Integer>{}
とか宣言しておいて、
Tansu<Integer> tansu = new Tansu<Integer>(IntegerHikidashi.class);
でエラーも警告も無しでコンパイルが通ります。助かりました。
しかし上記のような空の継承クラス宣言無しでスマートに出来る方法は
無いでしょうかね。
また以下のように引き出しのインスタンスを生成してそのクラスを渡して
も怒られるなど、まだまだ私にとってジェリックスには謎が多いです・・・
IHikidashi<Integer> prototype = new ConcreteHikidashi<Integer>();
Tansu<Integer> tansu2 = new Tansu<Integer>(prototype.getClass());
-> The constructor Tansu<Integer>(Class<capture#4-of ? extends IHikidashi>) is undefined
えっと、 SomeClass method(Class klass, String arg) { < xxxx を呼ぶだめの前処理 > Class ? x = new klass(<前処理結果 1>); return klass.any_method(arg, <前処理結果 2>); } てな事を書きたい場合、どうすればええの?
981 :
980 :2008/11/16(日) 21:09:56
説明が足りないと思われるので ぶっちゃけ Lisp 系の言語で良く定義される (with-open-file (ファイルオープン処理) 本体) (with-disable-interrupt 本体) 外側の () から抜けるときは exception だろうが何だろうが, ファイルクローズなり, 割り込み許可の処理をおわってブロック から抜けてくるような作りにしたい 本体は, 戻値と引数がマッチしていれば何でも OK みたいな………
>>981 つ無名クラス
クロージャ持つ言語に比べてめちゃめちゃ冗長になるけどな。
984 :
980 :2008/11/16(日) 22:24:53
ジェネリックス難しいお 勉強中
987 :
デフォルトの名無しさん :2008/11/16(日) 22:51:37
すごい基本的なんだけど・・・ コンパイルは、どうやるんですか? OSは、Windouwsです。 入門書を買ったんですか・・・コンパイルの方法が書いてない・・
>>984 何千個もインスタンス作るとかじゃなきゃ
速度は問題にならないっしょ。
>>985 使うだけなら比較的簡単。
言語仕様については理解することを放棄した。
(理論的背景がさっぱりだ)
991 :
デフォルトの名無しさん :2008/11/16(日) 23:31:46
ジェネリクスを分かりやすく解説しているサイトはあまりないからね。
992 :
デフォルトの名無しさん :2008/11/16(日) 23:47:41
MoneyCollection クラスに格納されている各 Money のオブジェクトに対して、日本円に換算した合計金額を Yen オブジェクトで返す public Yen total() メソッドを実装するのですが、 格納されているのはMoneyのオブジェクトで返す時はYenオブジェクトにするという場合どのように すればいいですか?下のようにpublic Yen total()メソッドを実装しようとしたんですが、 失敗続きで。。。アドバイスお願いします。 import java.util.*; public class MoneyCollection extends ArrayList<Money> { public MoneyCollection(){ super(); } public Yen total(){ ??? } public void show(){ for(Money m : this){ System.out.println(m); } } }
>>987 http://www.smg.co.jp/seminar/java/でインストールすましたら (かならずPATHは設定する事)
コマンドプロンプト開いてcdコマンドで自分のソースファイルを保存したディレクトリに移動して
javac ファイル名とコマンドするだけ。cdはコマンドプロンプトが作業するディレクトリを移動するコマンド。
たとえば、c:\javaフォルダにソースファイルを保存したら、コマンドプロンプトを開いてcd c:\javaとすれば
移動できる。そこで、javac 保存したファイル名 とコマンドをうてばコンパイルできる。コンパイルの仕方は
→を参照。
http://www.stackasterisk.jp/tech/java/java01_03.jsp ちなみに、PATHっていうのは、
C:\Program Files\Java\jdk1.5.0_16\bin
↑
Javaのバージョン
と設定するんだけど、binフォルダにあるjavacがjavaコンパイラのこと。
だから、コンパイルするときjavac ソースファイル名 とするんだけど
コマンドプロンプトでプログラム起動するときはPATHに設定しておくと
プログラム名だけで起動できる。
PATHっていうのは、そういうもの。
995 :
994 :2008/11/17(月) 00:29:10
訂正 jdk1.5.0_16 ← これがJavaのバージョン。 だから、質問者がダウンロードしたバージョンにより、このフォルダ名が 変わっているはずだから、自分のフォルダ名をしっかり書くこと。 一度、マイコンピュータから順々にJavaのインストールしたフォルダ階層をくぐっていくといいよ。
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。