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

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

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
JAVA初心者の方はこちらのスレで質問をしましょう。そして誰か教えてあげてください。

なお、ソースを貼るときには、半角空白が消える仕様のため、タブ1つを全角空白2つに
置換してから投稿しましょう。雑誌や宿題などの疑問を質問するときは出展を明記した
ほうが解決が早いです。

関連情報は >>2-10 あたりにあります。 (一部 dat落ちやHTML化待ち)


JavaScriptの質問はWeb製作板へどうぞ。
web制作管理
http://pc.2ch.net/hp/

パソコンの基本操作に関しては、PC初心者板や、各OS板などで質問しましょう。
パソコン初心者@2ch掲示板
http://pc.2ch.net/pcqa/

上級者の方で教える技術が無い方は下記スレでダベりましょう。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/


基本的にsage進行でおねがいします。
0654デフォルトの名無しさんNGNG
>>653
ありがとうございました。早速勉強。
0655デフォルトの名無しさんNGNG
>>641
テストは画面遷移以外のテストをしたいのです。一通りの処理というか。
っていうか、MVCモデルでのControllerって単体テストするもんですか?
下位クラスが無きゃ実際の処理なんてテストできないですよね?
そこらへん詳しく載ってるサイト教えて。
0656デフォルトの名無しさんNGNG
>>655
最低でもVCでじゃないの?
0657Rina ◆tI333vNE NGNG
>>655
VCで。Mは無くてもいいし、必要だと思えば
使い捨ての利くコンソール版作ってからやる。
0658デフォルトの名無しさんNGNG
MVCって三層C/Sを一つのサーバでやってるって感じですか?

0659デフォルトの名無しさんNGNG
>>658
そだね。
アプリケーションでMVCというと、一つのプロセスの上で
それやってる感じ。通知は単なるメソッドコールになる。
0660デフォルトの名無しさんNGNG
>>659
勉強になりました。
0661デフォルトの名無しさんNGNG
VCでテストやるか?
CM(またはMスタブ)で、JUnitでVの代理ロジック記述じゃないのけ?
0662デフォルトの名無しさんNGNG
>>661
Vドライバもいるんじゃない?
0663デフォルトの名無しさんNGNG
>>662
どうせMのオブザーバだけでしょ?ユニットテスト側で準備すりゃいいじゃん。
0664デフォルトの名無しさんNGNG
static メソッドの中で、そのメソッドが所属するクラス名やパッケージ名って
取得できますか?
0665デフォルトの名無しさんNGNG
>>664
ハァ?
staticメソッドを実装している位置って、そのクラスじゃないのか?
なんで実行時に取る必要があるのよ?Classオブジェクトが欲しいなら
<クラス名>.classでええよ。
0666Rina ◆tI333vNE NGNG
Hoge.class.getName()
Hoge.class.getPackage()
0667デフォルトの名無しさんNGNG
>>665-666
サンキュー、それそれ。
ちなみに名前が変わるかも知れないパッケージのクラスの中から
バンドルされてるリソースを、パッケージ名変更の影響なくアク
セスしたかったのよん♥ 文字列でも持たせると、後で grep
出来ない形でコード書く奴がいるかも知れないので。
0668デフォルトの名無しさんNGNG
argsって何でしたっけ?
ちょっとど忘れして…
0669デフォルトの名無しさんNGNG
age
0670デフォルトの名無しさんNGNG
そういえば GZIP はあるのに tar 機能がねーな、と思ってみたり。

>>668
public static void main(String[] args) のことか?
ARGument String だと思うが。
0671デフォルトの名無しさんNGNG
ARGumentSだったりして
0672デフォルトの名無しさんNGNG
コンパイルなどでの
エラーの探し方のコツとかってある?

どう考えても、どこが間違ってるのか分からん時とか、平気で1日無駄にするし
0673デフォルトの名無しさんNGNG
なぜエラーが起こったかを記憶しておく。
そうすれば費やした時間は無駄にならない。
がんばれや、学生さん。
0674デフォルトの名無しさんNGNG
>>670
tarは誰にでも すぐに書けるからでは…
(仕様しってれば)
0675デフォルトの名無しさんNGNG
Forte for Java, CE3 を使って勉強してます。
外部クラスからJTextAreaにデータを表示させたいんですが、

class SleepingA implements Runnable {
private Application appli ;
public void run() {
appli.addTextArea("SleepingA Start") ;
}
}

で本体側
public class Application extends javax.swing.JFrame
に

public void addTextArea( String str ) {
jTextArea1.setText( str ) ;
}

を加えて、コンパイルは出来るんですが
実行時にエラーが出てしまいます。
何がおかしいんでしょうか?

エラー:
java.lang.NullPointerException
at ThreadTest.SleepingA.run(Application.java:189)
at java.lang.Thread.run(Thread.java:484)
0676デフォルトの名無しさんNGNG
>>675
ねぇ、appliにインスタンス代入してる?
0677675NGNG
というと、本体側の
SleepingA runA = new SleepingA();
Thread threA = new Thread(runA);
threB.start();
ですか?
0678デフォルトの名無しさんNGNG
>>677
どこかで

appli = new Application();

もしくは他で作ったインスタンスを代入したのか?と。
0679デフォルトの名無しさんNGNG
インスタンスの代入というのがよくわからないんですが・・・
0680デフォルトの名無しさんNGNG
>>674
tar の仕様きぼーんぬ。
0681デフォルトの名無しさんNGNG
>>680
検索すれば直ぐ見つかるよー
0682デフォルトの名無しさんNGNG
>>679
SleepingAクラスのコンストラクタとかでappliを初期化しているか?
appliは「Applicationへの参照」であるから実体(インスタンス)は無い。
自分で実体を作成して代入してやる必要がある。
実体を作成するのが new だ。

と、>>678 は言っている。
0683デフォルトの名無しさんNGNG
>>682
助かりました。あれ以上の説明が思いつかんかった。
勉強やり直してきます。
0684デフォルトの名無しさんNGNG
お二方、回答どうもありがとうございます。
private Application appli = new Application() ;
でエラーはなくなりましたが、String値の受け渡しが出来ません(TT)

本体=Application() から class SleepingA のスレッドを作成しているので、
SleepingA で
appli = new Application() ;
とすると元の本体とは別に、新たなApplication() を作ってしまっているから
元のApplication()にString値が受け渡されないと、考えてよろしいの
でしょうか?とすると、SleepingAの方から元のApplicationのスレッドを作るようにして、
そいつにString値を渡す、というやり方で良いんでしょうか?
0685デフォルトの名無しさんNGNG
A. コンストラクタに引数を設けてApplicationのインスタンスを渡す。
B. SleepingAをインターフェースにしてApplicationにimplementsする。
という手が考えられる。
Aがお手軽。
0686デフォルトの名無しさんNGNG
>>680
http://www.gnu.org/directory/tar.html
0687デフォルトの名無しさんNGNG
あと、スレッドを使うときは競合に気をつけること。
って、setTextはスレッドセーフダタ...

>>670
tarって必要か?
昔のzipが複数ファイルまとめられないからtarが存在していた
と理解してたんだが・・・
0688デフォルトの名無しさんNGNG
>>687
商用 Unix だと本番機に compress & tar しか入っていないことも多々ある
のよん。
0689デフォルトの名無しさんNGNG
httpServletResponceなどのServlet.HttpのAPIて無いのですか?

Sunのページにはなかったのですが…
http://java.sun.com/j2se/1.4/ja/docs/ja/api
0690デフォルトの名無しさんNGNG
質問です。
import ABC;(ABCは、自分で定義したクラス)
と書いてコンパイルしようとすると、
「"."がありません
 import ABC;  」
^
というエラーメッセージが表示されるのですが、原因が
分かりません。どなたかご存知でしたら、アドバイスをお願いします
0691デフォルトの名無しさんNGNG
>>688
あいや、正確には
Javaのプログラムから、tarって必要か?
なんだが。
0692デフォルトの名無しさんNGNG
>>689
http://java.sun.com/j2ee/sdk_1.2.1/techdocs/api/index.html
0693デフォルトの名無しさんNGNG
>>692
sankusu
あと日本語ページとか無いのでしょうか?
0694デフォルトの名無しさんNGNG
>>690
import はパッケージの利用の宣言であり、クラスの利用宣言ではない
からではないか?
ABCの入っているソースの天辺にpackage ABC;と書いてコンパイルし、
クラスパス以下にABCフォルダ作って、そこにclassファイル置いてみてくれ。

ただ、エラーの内容がイマイチ?なのだが。
それはちゃんとコピペしたものなのか?
0695名無しさん@xyzzyNGNG
>>690
import ABC.*;
0696デフォルトの名無しさんNGNG
>>693
http://www.ingrid.org/jajakarta/servletapi/servletapi-4.0/docs-ja/index.html
0697デフォルトの名無しさんNGNG
>>691
tar しか入っていない環境ならふつー .tar.Z や .tgz だな。
アーカイブはバッチ処理に渡したりもらったりするケースも
結構あるから。

とはいえ JDK が入っているなら jar で ZIP は解凍できるから、
他の鯖にデータまとめて持ってくようなバッチでもなければ ZIP
で良のか。
0698デフォルトの名無しさんNGNG
>>694
>>695
ありがとうございます。
パッケージ化する方法を試してみました。
(フォルダ名をABC、クラス名をMyClass.class)
確かに、import ABC.MyClass;
とするとコンパイル通りました。
ありがとうございます
0699デフォルトの名無しさんNGNG
>>687
>昔のzipが複数ファイルまとめられないからtarが存在していた
>と理解してたんだが・・・
ソレ、たぶん間違いっす。
0700デフォルトの名無しさんNGNG
>ソレ、たぶん間違いっす。

ソレ、たぶん間違いっす。
0701デフォルトの名無しさんNGNG
元々 tar は複数ファイルをテープ上にアーカイブしたり元に戻したりする
ためのもの。アーカイブをディスク上に作成することも出来たので、compress
や gzip と組み合わせて使われるようになった (古い Unix の思想「1 コマン
ドは 1 機能に従事する」に従い「アーカイブ」と「圧縮」は別コマンドになっ
ていた)。

よく知らんが ZIP アーカイブはこれより後に PC 向けに作られたもの
だったと思う。俺が始めて見かけたのは 6〜7年前くらいだったかな。
NIFTY-Serv に入った頃に知った。
0702デフォルトの名無しさんNGNG
Javaの変数名前付け基準って、みなさんはどうしてますでしょうか?
0703デフォルトの名無しさんNGNG
>>702
see also >>1-701
0704デフォルトの名無しさんNGNG
>>702
日本人は日本語。常識、これ
0705名無しさんNGNG
>>702
CamelCase
0706デフォルトの名無しさんNGNG
アプレットやフレームにdrawImageで画像を貼り付ける場合、どうしても背景色の「矩形」が出てしまいます。
ネット上のサンプルとかでは、ピクセル単位で条件分岐させて特定の色を透明色に変換しているのですが、もっと
スマートなやり方がないでしょうか。
0707if_tomorrow_comesNGNG
あの、javaを勉強だした初心者なんですけど。

booleanって、VBだったら、flag=not flag でtrue<->falseを変更できますよね。
javaでこういったことをやるには、どうすればいいのでしょうか。
って、こんな質問して良いんでしょうか。
0708ロンギヌスNGNG
>>702
別にJAVAだからってのはなく普通につけてたが。
敢えて言うならpublicであれば大文字とか?

>>706
JAVAは透過GIFも扱える。元の絵が悪いのだろう。
ピクセルで処理をするのはもっと他のバヤイだ。
0709ロンギヌスNGNG
>>707
public boolean Reverse(boolean bool) {
if ( bool == true ) { return false; }; return true;
}
こんなんで我慢するしかないのでは。
0710名前NGNG
JFileChooserみたいに、日付を選択するコンポーネントってありません?
0711ロンギヌスNGNG
>>710
JLISTでも使って作るべし。
0712if_tomorrow_comesNGNG
ロンギヌスさん、ありがとうございます。
えっと、自分で関数(javaではclass?ってことになるの?)を作るしかないということですか?
~で反転出来るかな、って思ったらやっぱり出来なかったし。

バイト型で、0か-1かをとった方が簡単かなぁ。
0713デフォルトの名無しさんNGNG
boolean flag = true;
flag = !flag;

ネタスレでしたか。
0714ロンギヌスNGNG
>>712
>>709 はクラスである必要はありません。
使いたいクラスに関数として存在していればいいです。
(自分はこんな関数集めてクラスとして利用していましたが)

javaではbooleanは独立したオブジェクトです。
(booleanに限らず)
VBみたいにバリアント型ではないので慣れないと使いまわすの
面倒かも知れません。

で、前もってbooleanとして宣言しておく必要があります。

面倒ならbyteでもいいですけど、この機会に色々と慣れておいた方が
いいかも知れません。
0715if_tomorrow_comesNGNG
>>713
ああっ、そんな書き方があったんですね。
~よりそっちを思いつくべきだった・・・
は、恥ずかしすぎる。
ま、まあ、聞くは一時の恥って言うよね・・・ねぇ。
0716デフォルトの名無しさんNGNG
boolean ってオブジェクトだったのか… シラナカターヨ
0717デフォルトの名無しさんNGNG
>>706
ImageFilterを使いたくないってこと?
0718デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1022667056/693n
0719デフォルトの名無しさんNGNG
>>714
ネタならもうちょっと練ってから書き込め。面白くない。
マジなら一回 (略
0720デフォルトの名無しさんNGNG
jaxpはxmlshemaによる妥当性検証ってサポートしてますか?
0721デフォルトの名無しさんNGNG
apacheとtomcatの連携をさせようと思いとりあえず導入したんですが
ユーザディレクトリにJavaを実行させたい場合はどうするのか教えてください。
具体的には ~/以下はどこでもjspが扱える。任意のディレクトリに(例えば~/webapp/)に
WEB-INFを置いてservletを配置する。と言った具合です。
tomcat4.0.1を使用しててapacheにmod_webappモジュールを組み込んでいます。
0722デフォルトの名無しさんNGNG
グラフ書いてるんだけど縦軸と横軸に数値を入れたいんだよね
たとえばY=X+1とか式あったらy軸との交点は1って表示させたい
あとほかにもある程度軸に数値いれたいんですができるでしょうか?
0723デフォルトの名無しさんNGNG
722>
できます
0724デフォルトの名無しさんNGNG
>>723
どうかやり方教えてもらえませんでしょうか?
よろしくお願いします
0725デフォルトの名無しさんNGNG
JTableをScrollPaneにadd()して、スクロール可能にすることができますよね。
スクロールをしていって、「一番端まで来た!」ということを知る方法は
ないでしょうか? 何かイベントが発生するとか・・?

要は、端っこまで来たらテーブルの行を追加したいだけなんですけど・・。
ご存じの方がいたら教えてください。
0726Rina ◆tI333vNE NGNG
>>720
XML SchemaのはJAXPじゃできないんじゃないかな、今のところ(適当).
そもそもXML Schema自体がキチンとした仕様がまだきまってなかった
ように思うんだけど….
うちの会社はRelaxerっての使ってる. XML Schemaと違って
実装が結構進んでるんし, 何より開発者が日本人だからドキュメント多いよ.
興味湧いたらぐぐってみて. XML Schemaは知らん. あんなの
誰も使わないと思うんだが…仕様が複雑すぎてRinaたんには無理(´-`)ノ
0727Rina ◆tI333vNE NGNG
>>722
でもそういう場合ってさぁ, 自分で書いちゃえばいいのでは?

>>723
それって専用のライブラリでも出てるの? 出てるんなら私にもおせーて.
0728デフォルトの名無しさんNGNG
今日、Javaのプログラムを始めた初心者なんですが、MS-DOSプロンプト上で下記のメッセージが表示され、プログラムが実行できません。なにが原因かサッパリ…助けていただけないでしょうか…。
Exception in thread "main" java.lang.NoClassDefFoundError: Sample1
0729Rina ◆tI333vNE NGNG
>>725
JScrollPane#getHorizontalScrollBar(), もしくは
JScrollPane#getVerticalScrollBar()でJScrollBarを得る.
で, それにAdjustmentListenerを追加すると,スクロールバーが
動いた時にAdjustmentListener#adjustmentChangedが
コールされるから, それ使うとうまくいく…と思う. 他に方法は知らない.
0730Rina ◆tI333vNE NGNG
>>728
それはSample1ってクラスがないよーって言われてるんじゃないかな?
CLASSPATHが通ってないとかだと思う.
0731Rina ◆tI333vNE NGNG
>>721
http://www.itboost.co.jp/jserv/jserv_05.php
分からんかったから自分で調べた人>自分.
0732デフォルトの名無しさんNGNG
>>730
回答ありがとう。でも全然解決できそうも無い。テキストどおりやってるんだけどなー。何とか試行錯誤してみます。
0733デフォルトの名無しさんNGNG
>>722
横向き文字列だけなら Graphics.drawString() を使って描けば良い。

角度の付いた文字列を使いたいなら
\demo\jfc\Java2D\src\java2d\demos\Fonts\Tree.java なんかを参考に
AffineTransform と TextLayout を使って文字を描く(と思われる)。
デモを見ておくのも重要。出来る事の一通りとそのやり方はそれで分かる。
少なくとも画面描画するアプリを作るなら、事前に java2Demo.jar は触って
みるべき。


ただ、少なくとも後者は初心者向きではないと思われる。
アフィン変換って何?という人間だと、ググってすこし勉強したほうが良いかも。
たぶん概略だけで良いと思う。
概略も知らないと AffineTransform の説明文で挫折するかも知れないから。
0734Rina ◆tI333vNE NGNG
その課題に使うファイルがいくつあるのか分からんのだが,
どういうファイル構成になってるの?
・ファイル数
  一つのファイル or 複数のファイル
・必要なファイルの場所
  カレントディレクトリだけ
or カレント以外のディレクトリ
or 複数のディレクトリに

…教えてもらえればキチンと答えれると思うよ.
0735Rina ◆tI333vNE NGNG
>>733
それならできる.
てっきり数式放りこんだらグラフが書かれたCanvasクラスを返して
くれたりするライブラリがあるのかと思ったよw
0736732NGNG
>>734
やっぱり自分じゃムリでした。ファイルはひとつ。必要なファイルもカレントディレクトリだけ。パスの通し方もテキストの通りにやってみた。なのにナゼ…。先は険しいなあ。
0737デフォルトの名無しさんNGNG
( ´Д`)ハァハァRinaタン・・・・
0738デフォルトの名無しさんNGNG
set CLASSPATH=%CLASSPATH%;.
0739Rina ◆tI333vNE NGNG
ブス専ですか?w

ほうほう, DOSだと環境変数は%%で括るのか. 覚えておこう.
0740デフォルトの名無しさんNGNG
配列をつくって、そこに乱数を入れました。

double [] array = new double[s];//sは最初に与える
for(int j=0;j<s;j++){
array[j]=Math.random();
}

ここで、この次に、このs個の配列に入っている値の和を求めたいです。

array[0]+array[1]+...+array[s-1]+array[s]はどうやって計算すれば
いいんでしょうか、足し算するのは知っているのですが、プログラムは
どうやって書けばいいのでしょうか?教えてください。お願いします。
0741デフォルトの名無しさんNGNG
>>740
乱数代入しつつ足していけばいいじゃん
0742デフォルトの名無しさんNGNG
>>741

740です。ありがとうございます。
乱数を代入しつつ足していくとはどうかけばいいんでしょうか。
プログラミング厨房なので、もしよろしければ教えてください。

自分は、\sum_{j=0}^s array[j]を考えていました。
エクセルとかについているsumみたいな、和を求める関数というのを
書きたいのですが、考え方が根本的におかしいでしょうか?
0743デフォルトの名無しさんNGNG
double sum = 0.0;
for(int i=0; i<array.length; i++){
  sum += array[i];
}
0744デフォルトの名無しさんNGNG
>>743
ものすごく助かりました。+=という書き方、はい!ありました!!
やっぱり本でよんだだけの知識はダメですね。大感謝です。
すこし生きた知識がふえました。
0745デフォルトの名無しさんNGNG
>>688
> 商用 Unix

商用 Unix ?
0746デフォルトの名無しさんNGNG
>>698
ちがうぞ おい

>>701
圧縮するとバックアップファイルが壊れたときに全部取り出せなくなるので、アーカイブのみで圧縮はしない
という話もあったな。

>>708
大文字って定数の場合ですよね?

>>732
もっと自分の状況とかいろいろ説明すれば、率直な回答もできるが、ほとんど情報がないので、だれでも
適切な回答をしていないと思うよ。

0747デフォルトの名無しさんNGNG
2次元配列の場合、配列の長さというのは、どっちの長さでしょうか?
行でしょうか?列でしょうか?
array[][]のarray.lengthはどっちの長さを指定しているのでしょうか?
行の長さ、列の長さを指定したい場合、それぞれどう書けばいいでしょうか?
0748デフォルトの名無しさんNGNG
double[] array = new double[2][3];
System.out.println(array.length);
System.out.println(array[0].length);
0749デフォルトの名無しさんNGNG
>>747
System.out.println(array.length);
一発解決
0750名無しさんNGNG
>>747
2次元配列というものは存在しない。あるのは配列内の配列。
0751デフォルトの名無しさんNGNG
class arraylength {
public static void main(String args[])
{
    double[][] array = new double[2][3];
 System.out.println(array.length);
 System.out.println(array[0].length);
}
}
をやってみますた。array.lengthだと前のほうに入っている
値がでるのですね。つまりここでは2ですね。
array[0].lengthで後ろの3ですね。なるほど!
ありがとうございました。
0752デフォルトの名無しさんNGNG
>>750
ふむ、なるほど、だからarray[0].lengthという書き方になるのですね(想像)
理解が深まりすた。皆様いろいろありがとうございます。
0753デフォルトの名無しさんNGNG
>>752
そういうこと。array[0] と array[1] では配列の長さ違うかも知れない。

double[][] array = new double[2][];
array[0] = new double[5];
array[1] = new double[10];
System.out.println(array[0].length);
System.out.println(array[1].length);
■ このスレッドは過去ログ倉庫に格納されています