トップページ⇒tech
1001コメント331KB

【初心者】Java質問・相談スレッド54【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

以下のエラーが表示されて、途方にくれているあなたは、下のページへ。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path%2Cclasspath

前スレッド
【初心者】Java質問・相談スレッド53【大歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1094860940/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */

また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
0002古代帝國富士皇朝総帥・伯壬旭NGNG
よくぞ次スレを立てた。
ほめてつかわす。
0003デフォルトの名無しさんNGNG
2
0004デフォルトの名無しさんNGNG
惜しかった(。・_・。)
0005デフォルトの名無しさんNGNG
>>1
超合金乙
0006全スレ約1000NGNG
惜しかった。
0007デフォルトの名無しさんNGNG
ま、とりあえず J2SE 5.0 リリース おめで�d (ノ ^ ▽ ^ )ノ
ttp://java.sun.com/j2se/1.5.0/download.jsp
0008デフォルトの名無しさんNGNG
J2SE5だと、こんなコードが可能に、、、。

public String printf(String format, String... args)

なんかいやん。
0009デフォルトの名無しさんNGNG
速レスだが>>1乙
0010デフォルトの名無しさんNGNG
新スレたったばっかりで恐縮ですが質問です。
Jpanelの上にpaintcomponentメソッドで図を描いていて,それをjpgで出力する
メソッドを書いたのですが,実際実行すると非常に画質が悪いものが出力されてしまいます。
例えばある直線を書いてjpgで出力すると直線の周りに微小な斑点がついてたりとかで
とにかく画質が悪いのです。
コードの概略は以下の通りです。
String curDir = "../image";
JFileChooser fileChooser = new JFileChooser(curDir);
fileChooser.setFileFilter(new ImageFileFilter());
int ret = fileChooser.showDialog(content, "選択");
if (ret != JFileChooser.APPROVE_OPTION)
return;
File file = fileChooser.getSelectedFile();
String fileName = file.getAbsolutePath();
File outFile = new File(fileName + ".jpg");

try {
canvas_image.getGraphics().drawImage(cakeImg, 0, 0, this);
ImageIO.write(canvas_image, "jpg", outFile);
} catch (IOException e) {
}
基本的に画質を上げるには,どういう風に修正すれば良いのでしょうか?それとも
根本的なところが間違っているのでしょうか?
0011デフォルトの名無しさんNGNG
>>10
>例えばある直線を書いてjpgで出力すると直線の周りに微小な斑点がついてたりとかで
>とにかく画質が悪いのです。

普通 jpeg とはそういうものです。
0012デフォルトの名無しさんNGNG
pngだとキレイだよ
0013デフォルトの名無しさんNGNG
>>10
アニメ的な色の境目がはっきりしている絵は、pngやgifを使って
写真のような色の境目が滑らかな絵は、jpegを使うとよいですよ
001410NGNG
ありがとうございます。確かにpngにすると画質がよくなりました。

ただ,上のコードの
File outFile = new File(fileName + ".jpg");
ImageIO.write(canvas_image, "jpg", outFile);
のjpgをpngにすると綺麗な画像が出力されたのですが、このjpgの部分を
bmpやgifなどの画像用の拡張子へ変えるだけでそれに対応する画像ファイル
が出力されるというのがちょっとしっくりこないのですが,そういうもの
なのですかね?
0015デフォルトの名無しさんNGNG
>>10
対応形式はプラグインで増えるので
保存形式を文字列で指定するのは妥当かと。

あとImageWriterを取得して使えば
圧縮率とか細かく指定して保存できるはず。
0016デフォルトの名無しさんNGNG
Javaから呼び出して、実行できるスクリプトは無いですか?
Luaみたいなのでお願いします。
0017デフォルトの名無しさんNGNG
今日、checkstyleってやつをインストールして、以下のようなクラスでテストしてみました。

public class Test {
public static void main(String[] args) {
・・・
}
public static void aaa() {
・・・
}
}
そしたら、warningで
「スタティックメソッドしかもたないユーティリティクラスは、インスタンス化されないために
publicなデフォルトコンストラクタを持ってはいけないし、クラスはfinalにすべきだ」
って言われたんですけど、そういうもの?
継承したりしちゃいけないの?
0018デフォルトの名無しさんNGNG
jacl = Java版Tcl
rhino = Java版JavaScript
jython = Java版Python
jruby = Java版Ruby
pnuts = Javaをスクリプト化したもの
groovy = Javaをスクリプト化したもの
0019デフォルトの名無しさんNGNG
>>17
継承したいならabstract指定すれば?
0020デフォルトの名無しさんNGNG
>17,19
「スタティックメソッドしか持たない」ユーティリティクラスを
継承したいという場面が思いつかないんだが、どんな場合?
002119NGNG
>>20
テストクラスにスタティックイニシャライザを持った基本クラスを置いておくと
main 呼び出し前に自動的に共通の初期化処理が実行されて便利。
0022デフォルトの名無しさんNGNG
便利だからという理由(>>21の例では便利かどうかもあやしいが)
で継承してるんだったらやめたほうがいいよ。
0023デフォルトの名無しさんNGNG
>>18
BeanShell を忘れとるがな。他にもいっぱいありそうな予感。
0024デフォルトの名無しさんNGNG
>>18 >>23
どうもです。
0025デフォルトの名無しさんNGNG
>>21
それならmainの先頭に、そのユーティリティクラスのスタティック
イニシャライザ部分をメソッドにしたやつを呼び出せばいい訳で。
exteds UtilityClass
public static void main(..) { UtilityClass.initializer();
両方とも同じ一文を追加する事は変わらないから。。。
0026デフォルトの名無しさんNGNG
それならmainの先頭に、そのユーティリティクラスのスタティック
イニシャライザ部分をメソッドにしたやつを呼び出せばいい訳で。
exteds UtilityClass
public static void main(..) { UtilityClass.initializer();
両方とも一行だけを追加する事には変わらないから。。。
0027デフォルトの名無しさんNGNG
OpenAMFやFlexなどのFLASHリモーティングに関する
情報って、どっかにありますか?
0028デフォルトの名無しさんNGNG
iアプリでも動作して、かつ、WinやLinuxでも動くアプリというかバイナリは作れまつか?
0029デフォルトの名無しさんNGNG
>>18
JPL
Java版Perlを忘れてる
0030デフォルトの名無しさんNGNG
jdk入れたら、jreは不要でつか?
0031デフォルトの名無しさんNGNG
>>30
不要。
JDKインストール時にJREもインストールされる。
0032デフォルトの名無しさんNGNG
J2MEで作れば、全ての環境を制覇できまつか?
0033デフォルトの名無しさんNGNG
>>32 profileが細かく違うから制覇できない。
0034デフォルトの名無しさんNGNG
j2meの派生がj2seにしときゃ、制覇できたのにぃ。
S∪∩に抗議しる!
0035デフォルトの名無しさんNGNG
>>34 いや、そういう問題じゃないから。
0036デフォルトの名無しさんNGNG
連載記事「スマートなサーバ・サイドJava」は読んでためになりまつか?
0037デフォルトの名無しさんNGNG
ならない。
003817NGNG
>>19-22,25,26
ありがと。
で、
>>22
>便利だからという理由(>>21の例では便利かどうかもあやしいが)
>で継承してるんだったらやめたほうがいいよ。
この「便利かもしんないけど、やめたほうがよい」理由を知りたいというのが、
今回の質問の根本なんです。
できれば、教えてください。

0039デフォルトの名無しさんNGNG
>>38
クラス設計の根底に関わる問題だからです。
継承を用いる正しい基準に沿わないからと言えるでしょう。
継承は、インスタンスの機能を増やす為にこそ用いられるべきですので
インスタンスの操作が出来ないstaticメソッドonlyクラスでは
その意味が全く無くなるからです。
他にも、集約による多態性を実現する為にだけ継承を用いるのは良くない
など幾つかの制約基準があります。
まだ大きなプログラムを組んでないと、そこら辺の基準のありがたみが
なかなか分からないものですが、しばらくして大きなのを組むように
なり、いろいろクラス設計をしだせば、以前は便利だからとやってた事でも
なんか変な設計で気持ち悪いなって感じでやらなくなるものなのです。
0040デフォルトの名無しさんNGNG
>>38
「スタティックメソッドしかもたないユーティリティクラスは、インスタンス化されないために
publicなデフォルトコンストラクタを持ってはいけないし、クラスはfinalにすべきだ」
に関してはそうだと思う。
クラスというより、ライブラリの性質をもったモノを作ろうとしてるわけだから
インスタンス化して使うモノとは区別しておいたほうがプログラム構造上わかりやすいということ。
これは、継承クラスの使い方を気をつければ問題ないんだが、継承したクラスのインスタンス化を
禁止する書式がないため、 1.4まででは もし、機能拡張をするのであれば継承せず、
内部で参照(USE)するなりして実現するということで表現することになる。

昨日リリースされた、J2SE5.0ではこの問題を解決する StaticImportという機能が用意されている。
ttp://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/LangSpec/StaticImport/StaticImport.html
スタティックメソッド(定数もOK)をインポートする機能です。
チェックしてみては?
004140NGNG
>>39
そうそう、そういいたかった。
>>39の言い方だと、 インスタンスに対する操作を拡張したくってするのが継承、
ライブラリの機能を拡張したくってつかうのが StaticImport。で、よろしい?
0042デフォルトの名無しさんNGNG
Seasar2とSpringの違いって何?
できることとか文法とか、だいたいいっしょみたいなかんじが
するんですが
0043sageNGNG
CSVをダウンロードするServletについてお聞きしたいことがあります。

Windows2000、IE5 SP3の環境で、

response.setContentType("application/x-csv");
response.setHeader("Content-Disposition", "attachment; fileName=\"" + fileName + "\"");

以上のように設定すると、ダウンロードダイアログで「ファイルを開く」を選択
すると、もう一度、ダウンロードダイアログが表示されます。
(さらに選択すると、正常にファイルが開かれる)

ContentTypeにダミーの文字を入れ、Content-Dispositionをinlineにすれば、こ
の問題は解消されましたが、
WindowsXP SP2の環境で、ダウンロードダイアログが表示されないという現象が
発生しました。

両環境で、一度だけ、ダウンロードダイアログを出したいのですが、良い解決策
があれば教えてください。
0044デフォルトの名無しさんNGNG
>>20
ええと、マジで良く分からんのだけど、static初期化ブロックのことをいってるんだろうけど、
これってクラスロード時に自動的に呼び出されるんだよねえ? しかもstaticメンバにしか
アクセスできない。

ということは、スーパークラスのstatic初期化ブロックが初期化できるのは、スーパークラス
のstatic変数のみってことだよな。

一方、staticメンバにアクセスする時って、継承していようがなんだろうが、「クラス.staticメンバ」
という形になるよな(staticインポートを使ってないとする)。この段階でクラスがロードされるので、
static初期化ブロックが実行されるよな。

で、継承するとこれより便利になるってのが良く分からないんだけど。おれがバカなのかな。
まじ分からない。
0045デフォルトの名無しさんNGNG
>>43
content-typeが間違ってる。
text/comma-separated-values
あと、サーブレットコンテナの設定でmimeにあるかどうかも確認。
0046デフォルトの名無しさんNGNG
>>43
あー、でも>>46のにしちゃうとDLダイアログが出ずにそのまま表示されるかも。
確実にDLダイアログだしたい場合は、
application/octet-stream
0047デフォルトの名無しさんNGNG
かなりスレ違いな質問ですが、どなたかご教授ください。
Hotmailのメール内URLをクリックすると、そのページに
ちゃんと飛ぶ場合とそのまま開かない場合があります。
開かない場合のURL上にマウスを持っていくと、左下に
「javascript:OpenWin('http:・・・・・・・・」と表示されます。
たぶんこれが原因だと思うのですが、どう操作すれば元通りに
なるのでしょうか?ちなみにyahooのメール内URLはちゃんと
開きます。よろしくお願いします。
0048デフォルトの名無しさんNGNG
>>47
Javaというキーワードだけで来ちゃったね。
左下にそうでるのは問題ないと思うけど・・・?
ポップアップブロッカーとかが悪さしてない?
004947NGNG
早速の回答ありがとうございます!!
たぶんポップアップブロッカーが悪さしてるとは
思えないのですが、つい一昨日ぐらいまでは
普通にメール内URLをクリックすると、そのページに
ちゃんと飛んだのですが・・・ メールの送り主に
関係なく、メール内URL左下の表示が
「javascript:OpenWin('http://・・・・・・・・」
ならば開かなく、(URLコピペでは開くのですが)
「http://・・・・・・・・」 
ならばちゃんと開く始末です。たまに左下表示が
前者のように表示される時があるので、
そのページにストレートに飛べなくて困ってます。
たぶんどれも後者になるようにすれば
問題ないのですが・・・ もう一度アドバイスお願いします。。
0050デフォルトの名無しさんNGNG
>>47
スレ違い
>>1をよんでみそ
0051デフォルトの名無しさんNGNG
現在実行しているメソッド名を動的に取得したいのですが、
どうすれば実現できるのでしょうか?

public void doSomthing() {
System.out.println(何らかの処理); // doSomthingという出力を得たい
}

例えば、Log4jなんかはlogメソッドを呼び出したクラスやメソッド名も
記録できますよね。その仕組みがどうなっているのか知りたいです。
Log4jのソースを見てみたのですが、該当箇所を見つけられませんでした。
0052デフォルトの名無しさんNGNG
>>51
StackTraceElement[] ste=new Throwable().getStackTrace();
ste[0].getMethodName();
0053デフォルトの名無しさんNGNG
>>51
new Throwable().getStackTrace()[0].getMehtodName();
で現在実行ポイントのメソッド名のStringが得られる
0054デフォルトの名無しさんNGNG
>>51
new Exception() して、getStackTrace() すれば StackTraceElement[] が取れる。
StackTraceElementからクラス名やメソッド名が取れる。
・・・やりたいこと違います?
005551NGNG
>>52-54
ありがとうございます。

なるほど、そんな風にしてメソッド名を取得するんですね。
目から鱗です。

でも何となく new Throwable() は、例外をスローするみたいで使うのに
抵抗がありますね。別にスローするわけではないので問題はないと思いますが。
早速使ってみます。
0056デフォルトの名無しさんNGNG
AspectJでも同じ子とできるよ
0057デフォルトの名無しさんNGNG
AspectJまで持ち出す問題か?
0058デフォルトの名無しさんNGNG
>>52-54
ありがとうございます。

なるほど、そんな風にしてメソッド名を取得するんですね。
目から鱗です。

でも何となく new Throwable() は、例外をスローするみたいで使うのに
抵抗がありますね。別にスローするわけではないので問題はないと思いますが。
早速使ってみます。
0059デフォルトの名無しさんNGNG
ImageIconで生成したアイコンをウィンドウに表示させると思った大きさにできないんですけど
これはパネルとかのLayoutが悪いんですか?
自由に大きさや配置に便利な命令はありますか?
0060デフォルトの名無しさんNGNG
>>59
自分で画像を Image に読み込んでから
java.awt.Image#getScaledInstance(int,int,int) とか使って思った大きさにしてから、
その後 javax.swing.ImageIcon#ImageIcon(Image) で ImageIcon 生成すれば?

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Image.html#getScaledInstance(int,%20int,%20int)
http://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/swing/ImageIcon.html#ImageIcon(java.awt.Image)
0061デフォルトの名無しさんNGNG
ありがつお、試してみます
006244NGNG
44でつ。
いまさらながら、参照先が間違ってるな.... >>17の間違い。
0063デフォルトの名無しさんNGNG
java って activeX 使えますか?
IEコンポーネント使ったアプリ作ろうかと
思ってるんですが、SWT 使ってIEコンポーネント
使うってできるんですか。

できなきゃ、おとなしくC#で作ろうかと思うんですが、
できれば java の勉強したいなぁ・・と。
0064デフォルトの名無しさんNGNG
SWT使うなら簡単。
SWT使わなくてもできなくはない。

しかしjavaの勉強するのにSWTやるのは無謀というか何というか。
0065デフォルトの名無しさんNGNG
Sun、Java最新バージョンJ2SE 5.0を正式リリース
http://headlines.yahoo.co.jp/hl?a=20041002-00000093-myc-sci
0066デフォルトの名無しさんNGNG
>>63
Geckoのラッパもあるでよ
ttp://jrex.mozdev.org/
ttps://jdic.dev.java.net/
006738NGNG
>>39,40
丁寧な説明ありがとう。
「あ、そういうことか!」ってほど理解というか、しっくりきていないところが悔しいですが。

>>44
なんか、ちょっと観点が違うような・・・

とにかく、もうちょっと精進して出直してきます。
レスくれたみなさんありがとうございました。
0068デフォルトの名無しさんNGNG
>>66
GCJだとSWTと使わざるをえないわけだが・・・orz
0069デフォルトの名無しさんNGNG
>>64の間違い・・・orz
007063NGNG
みなさん、レスありがとうございます。

>>64
SWT 使えば簡単ですか。よかった。
java の勉強したいですが、C++ なら使えますし、
java でも簡単なプログラムなら作れますので、
一から始めるわけじゃないので、SWT で作ってみたいなぁと。
(だって、Swing で作ると見た目がカコワルイ)

>>66
Gecko のラッパですか。そりゃいいや。
「C#で作ろう」→「いやどうせならJavaでプラットフォーム非依存で」
  →「いやIEコンポーネント自体がプラットフォーム依存だ・・・orz」
って感じだったんで、うれしい情報でした。


0071デフォルトの名無しさんNGNG
SWTはプラットフォーム依…
0072デフォルトの名無しさんNGNG
>>70
補足。SWTではBrowserというクラスがあり、これがブラウザの実装を隠蔽している。
実際に使われるブラウザは、WindowsならIEコンポーネント、LinuxならMozilla。
コード上は実装を意識せず書けた気がする。
0073デフォルトの名無しさんNGNG
>>72 BrowserウィジットはWindowsでもmozillaを使うことできるよ。
0074デフォルトの名無しさんNGNG
質問です。

public abstract class A
public class B

クラスAのことを「抽象クラス(abstract class)」というけど、
クラスBには何か名称が付いているんですか?
0075デフォルトの名無しさんNGNG
>>74
Bをクラスといいます。
0076デフォルトの名無しさんNGNG
あえて言うなら具象クラスですかね
0077デフォルトの名無しさんNGNG
具象クラス、、、って言わない?
0078デフォルトの名無しさんNGNG
ちょっと微妙かな......
http://www.google.co.jp/search?sourceid=navclient-menuext&ie=UTF-8&q=%E5%85%B7%E8%B1%A1%E3%82%AF%E3%83%A9%E3%82%B9
0079デフォルトの名無しさんNGNG
サウンドの終了を検知する方法が知りたいのですが
どのような方法(又はクラス)があるのでしょうか?

わかる方がおりましたら、なにとぞご教授お願いいたします。
0080デフォルトの名無しさんNGNG
グショぬらすでつか、、、、。
0081デフォルトの名無しさんNGNG
swingでwindowが他のwindow(swingの)に隠れないように設定するには
どうしたらいいんですか? お願いします。
0082 NGNG
Swingで左クリックでポップアップを表示させたいのにやり方分かりません。
右クリックで出すサンプルはたくさんあるのですが、
どなたかご存知無いですか?
0083デフォルトの名無しさんNGNG
>>82
右クリックでのクリック判定の部分を左クリックの判定に変える。
0084デフォルトの名無しさんNGNG
以下のABCDというオブジェクトの配列を作りたいのですが、

ABCD abcd = new abcd[10];
という配列の宣言と、
ABCD abcd = new abcd(2);
このようなコンストラクタを用いるのをあわせて、
ABCD abcd = new abcd[10](2);
のようにはできないものでしょうか?

クラスABCDは以下のとおりです。

class ABCD
{
double[] Weight;

AAAA(int I)
 {
    Weight = new double[I];
  }
}
0085デフォルトの名無しさんNGNG
>>84
残念ながらできません。
そういう使い方が、多いのだったら、そういう初期化するstaticメソッドを用意していてもいいのでは?

class ABCD
{
double[] Weight;

AAAA(int I)
 {
    Weight = new double[I];
  }
public static ABCD[] getInstances(int num,doublw w){
ABCD[] abcd = new ABCD[num];
for( int i=0;i<num;i++ )
{
abcd[i] = new ABCD[w];
}
return abcd;
}
}

で、ABCD abcd = new abcd[10](2); の代わりに、 ABCD[] abcd = ABCD.getInstances(10,2); とする。
0086デフォルトの名無しさんNGNG
アブストラクトの対義語ということで
「コンクリートクラス」というのはどうだろう。

なんか硬そうだ。メタルスライムくらいは倒せそうだ。
0087デフォルトの名無しさんNGNG
既出な質問くさいのですが、
なんでいきなり 5.0 なんでしょう?
Sun の政治的な何か?
0088デフォルトの名無しさんNGNG
>>81
java.awt.Window#toFront() とか。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Window.html#toFront()
0089デフォルトの名無しさんNGNG
>>87
なんか 1.4 -> 1.5 だとマイナーバージョンアップっぽく見えるので
ずっと変化しそうに無い "1." を削って(?) 5.0 にしたらしい。
0090デフォルトの名無しさんNGNG
>>89
あーやっぱりそんな理由なのか。どもです。
0091デフォルトの名無しさんNGNG
>>86
釣られてみる。コンクリートクラスでメタルスライム倒した友達いるよ。

誰か「またオレ用語か」って言ってくれるの待ってるらしい。
ドキドキ。オレも待ってみる。
009284NGNG
>>85
早速のお答えありがとうございます。

自分の書き込み見直したら変なところいっぱいあるのに、
ご親切に助言も下さりありがとうございました。
009344NGNG
1.2なのにJava2と呼ばせたのをもっと徹底的にしたんだろ。
1.2->名前:Java2 バージョン:1.2
1.5->名前:Java5 ついでにバージョンも5.0
0094デフォルトの名無しさんNGNG
それがどんどん進んで2.0→20になるんだろうか…
ちょっと大きすぎるね^^;
0095デフォルトの名無しさんNGNG
またオレ用語か
0096デフォルトの名無しさんNGNG
>>95
世にある専門用語は全てもともと俺用語だよ。
使っている内に認められるものさ。
0097デフォルトの名無しさんNGNG
ちなみにコンクリートクラスは、オブジェクト指向の世界で使われてる用語な。
>>86 すげえな。業界で使われてる言葉と同じだよ。センスあるねー
と漏れも釣られておく。
0098デフォルトの名無しさんNGNG
>>79
AudioClip使ってるの?
JavaSound使えるなら
Clip作ってaddLineListenerで終了のイベント拾えるよ。

Java1.1ならcom.sunパッケージでなんかあった気がする。
0099デフォルトの名無しさんNGNG
>>64
> しかしjavaの勉強するのにSWTやるのは無謀というか何というか。
すみません、ここのところをもう少し詳しく教えていただけないでしょうか。
0100デフォルトの名無しさんNGNG
>>99
やる気があれば大丈夫。逐一ここで聞きに来るような軟弱者でなければ。
0101デフォルトの名無しさんNGNG
>>93
> 1.5->名前:Java5 ついでにバージョンも5.0
JavaTM 2 Platform Standard Edition 5.0 Development Kit (JDK 5.0).
らしいので Java5 ではなく、Java2 のままですね。
■ このスレッドは過去ログ倉庫に格納されています