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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2007/06/27(水) 07:23:27
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

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

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。
08618162007/07/22(日) 14:51:24
>>817
おお、うまくいきました。
Graphicsクラスからしか取得できないと思っていました。
ありがとうございました。
0862デフォルトの名無しさん2007/07/22(日) 15:01:53

JFlexとJacでちょっとしたもの作ろうとおもってるんだけど、
ビルドをeclipse上で自動化したい場合ってどうすればいいの?
0863デフォルトの名無しさん2007/07/22(日) 15:03:05
×jac
○jay
08648622007/07/22(日) 17:47:46
申し訳ございません。
eclipseのスレがありましたのであちらで質問します。
ありがとうございました。
0865デフォルトの名無しさん2007/07/22(日) 20:10:02
英語と日本語が混ざった長文をテキストエリアなどに表示される場合、
正確に一画面文の文字数をカウントすることをご教授願います。
フォントサイズから一画面の文字数を数える場合、
英文が入るを正確にカウントできません
0866デフォルトの名無しさん2007/07/22(日) 20:14:06
できるよ。
文字数を読むメソッドがある
0867デフォルトの名無しさん2007/07/23(月) 02:05:51
>>846
通常、POSTとGETは使い分けるよ。使う目的も違うし、HTTPにおけるパラメータの
送信方法も異なってくる。また、Tomcatの場合はHttpServletRequestのsetCharacterEncodingは
GETパラメータには利かない。(※いくつかの設定は存在する)

Servletを学習するなら、同時にHTTPについて学習するのはすごく有意義だし、Web上に色々参考に
なる記事が沢山落ちてるから、まずはPOSTとGETは具体的に何が違うのかを学習すると良いと思うよ。
0868デフォルトの名無しさん2007/07/23(月) 09:13:08
ちょっとでも、お役に立てれば。
↓
http://www.yukinko-net.jp/
0869デフォルトの名無しさん2007/07/23(月) 12:23:50
Rhinoの質問いいですか。
Rhinoでコマンドライン用のスクリプトを書こうとしているのですが、
コマンドライン引数の取り方が分かりません。
RubyでいうところのARGVです。
Rhino argv で検索しても C のソースしか引っかからないし。
どなたかお願いします。
0870デフォルトの名無しさん2007/07/23(月) 12:32:59
args
0871デフォルトの名無しさん2007/07/23(月) 12:57:16
>>869
RhinoはJavaによるJavascriptの実装だから、実装内容に関わるような話ならこのスレかもしれないが、
単なるスクリプトプログラミングについてここで聞くのはスレ違い。
ある言語について質問する時に、その言語の処理系が何で実装されているかに関わらず、
普通はその言語のスレで質問するだろ?
0872デフォルトの名無しさん2007/07/23(月) 12:57:53
>>870
argsは定義されていないようです。

print(args); //=> ReferenceError: "args" is not defined.

Rhinoは1.6R5です。
0873デフォルトの名無しさん2007/07/23(月) 13:01:36
>>871
JavaScript一般の話ではなく、あくまでRhino固有の話なので、JavaScript関連のスレではなくここで質問しました。
Rhino専用のスレはないし、RhinoはJava6から標準装備ですし、ここが一番適切ではないでしょうか。
0874デフォルトの名無しさん2007/07/23(月) 13:39:30
>>871
JavaScriptのスレでこんなもんわかるやついるわけないだろ。Javaスレ行けっていわれるのがオチ。
0875デフォルトの名無しさん2007/07/23(月) 13:53:57
>>874
じゃあお前が答えてやれよ
俺はRhinoは嫌いだ

>>869
arguments
0876デフォルトの名無しさん2007/07/23(月) 14:07:55
>>869
jrunscript で実行してるなら arguments で取れるはず。

そうでない場合は、自前でScriptEngineにセットしないとダメなんじゃね?
scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("arguments", args);
0877デフォルトの名無しさん2007/07/23(月) 14:26:41
>>875,876
argumentsでとってこれました。ありがとうございました。
ちなみにこういった情報はどこで見つけるものなんでしょうか。
0878デフォルトの名無しさん2007/07/23(月) 14:30:03
>>877
http://java.sun.com/javase/ja/6/docs/ja/technotes/tools/share/jrunscript.html
0879デフォルトの名無しさん2007/07/23(月) 15:59:42
>>874
呼んだ?
おまえら少しはEcma Scriptスレに顔出して上げてください。
ネタがないんで普段は実装と仕様の差異の話で盛り上がっとりますよ。

SpiderMonkyが人気ないからRhinoで持ちきりなんだが・・・。
java6のRhino劣化品。いらない子。

>>878
それmozillaのdocの劣化コピペだからmozillaの開発者向けサイトかRhinoのdocに全部書いてある。
0880デフォルトの名無しさん2007/07/23(月) 16:28:58
>>879
一応別のツールだから劣化コピペとは言い切れないんじゃね?

Rhino のツールでは -l でスクリプト言語指定したりできないっしょ。
0881デフォルトの名無しさん2007/07/23(月) 18:51:12
いやjdk6に入ってるjs.jarはスループット優先でRhinoの機能かなりとっぱらってサイズ減らしてるんだよ。
さらにコンパイラ省かれてるから一切最適化されてない純粋なインタープリタで動いてる。

Rhinoのドキュメントに組み込みガイドがあって
そこにスループット優先でビルドする手順が書かれてるんだけどそれと同じ事してる。+JavaAdaptorが劣化。

jrunscriptはそのRhinoのScripting APIに従った純粋なラッパー。

Rhinoの殆どの実装クラスがjavax.script.*じゃなくてcom.sun.*にあるから自分でJSオブジェクト実装とかクラスシャッターでセキュリティ制限とかできない問題もある。
ecmaスレで詳しい話題が出てるよ。
0882デフォルトの名無しさん2007/07/23(月) 20:26:28
>>881
javax.script は Rhino とは別物だよ。
で、jrunscript と org.mozilla.javascript.tools.shell も別物。
だから jrunscript の、より詳しいドキュメントとして mozilla のドキュメント読めというのはダメ。
0883デフォルトの名無しさん2007/07/23(月) 23:29:23
>>869はjrunscriptとはいってないだろ。
Rhino1.6R5と言っただけ。Rhinoがjavaの実装で6から標準装備だからこっち来たと。

>>876が勝手にjrunscriptと言い出しただけだろ。だからecmaスレ行けって。
0884デフォルトの名無しさん2007/07/23(月) 23:37:36
>>883
俺は >>879 にレスつけただけなんだが。なんで >>869 の話が出てくるんだ?
0885デフォルトの名無しさん2007/07/24(火) 01:27:16
Rhinoってなに?
0886デフォルトの名無しさん2007/07/24(火) 01:39:57
どっかの誰かさんが作ったjavaのライブラリ
0887デフォルトの名無しさん2007/07/24(火) 02:51:47
>>884おまえ上の流れくらい読めよ。馬鹿だろ?
0888デフォルトの名無しさん2007/07/24(火) 02:53:20
jdbcのドライバのロードを static { } 内に記述して一度だけ実行するようにしたいんだけど、
これって可能なんでしょうか。コードは以下のような感じ。

class Hoge {

static {
try {
Class.forName("org.postgresql.Driver");
0889デフォルトの名無しさん2007/07/24(火) 03:00:58
誤爆

class Hoge {
  static {
    try {
      Class.forName("org.postgresql.Driver");
    } catch (ClassNotFoundException e) {
      throw new InternalError(e.getMessage());
  }

  public static Connection open() {
    Connection conn = DriverManager.getConnection("foo", "bar", "baz);
    return conn;
  }

  // 以下略
}

コンパイルエラーは以下。
[javac] シンボル: 変数 DriverManager
[javac] 場所 : Hoge の クラス
[javac] Connection conn = DriverManager.getConnection("foo", "bar", "baz");
[javac] ^
[javac] エラー 1 個
0890デフォルトの名無しさん2007/07/24(火) 03:06:50
静的初期化子の中のcatch節の終了の}が無い
0891デフォルトの名無しさん2007/07/24(火) 03:07:07
>>889のソースコード、改めてみるとなかなかひどい抜けがあるけど勘弁してくれ。

クラスパスが通ってないのかなと思って servlet-api.jar にも classpath を通してみて
HttpServlet を継承しただけのコードを書いてみたけど、こちらは問題なかった。
ビルドに用いている ant の build.xml のクラスパスの部分は以下。lib/ 内には
postgresql.jar が配置されている。

<target name="compile">
<mkdir dir="${bin.dir}" />
<javac srcdir="${src.dir}" destdir="${bin.dir}">
<classpath>
<!-- <fileset dir="lib">
<include name="*.jar" />
</fileset>-->
<pathelement location="lib/postgresql.jar" />
<pathelement location="/usr/share/tomcat5.5/common/lib/servlet-api.jar" />
</classpath>
</javac>
</target>

0892デフォルトの名無しさん2007/07/24(火) 03:13:33
>>890
取り急ぎ書いたんで抜けた。すまん。他にも "baz" の終わりの " が抜けたりしてる。
手元のコードはちゃんとしてるから大丈夫。
0893デフォルトの名無しさん2007/07/24(火) 03:17:47
そして>>889にはったエラーメッセージに肝心のエラーメッセージがはってないな。
DriverManagerに対して

「シンボルを見つけられません。」

というメッセージです。
08948882007/07/24(火) 03:20:11
解決しますた。

DriverManagerってずっと postgresql.jar の中にあるクラスと思ってたら java.sql.DriverManager
だったのな。。。
0895デフォルトの名無しさん2007/07/24(火) 03:21:33
>>892
import java.sql.DriverManager;してる?
0896デフォルトの名無しさん2007/07/24(火) 03:23:38
遅かったorz 解決して何より
まあシンボルが見つからないエラーは完全名を指定できていないミスが多いからね
0897デフォルトの名無しさん2007/07/24(火) 03:23:59
まさに今同じミスをやらかして修正に追われていた。
Eclipseの補完機能に頼りすぎておんなじ名前のメソッド入った
パッケージがこんがらがるとこういうことになる。
0898デフォルトの名無しさん2007/07/24(火) 04:14:49
設計時に使うパッケージは大方分かってるからワイルドカードでインポートして
クラス名が被るのは限定名でアクセスしてあとから「インポートの編集」すると混乱が減るよ。
0899デフォルトの名無しさん2007/07/24(火) 06:42:38
インポートのワイルドカード嫌う人おおいみたいだけどなんで?
コンパイル遅くなるから?
実行時にも遅くなる?
import *;
ができないからどっちもどっち?
0900デフォルトの名無しさん2007/07/24(火) 07:30:15
importの意味を知っていれば実行時に遅くなるなんて台詞は出てこないはずだぞ。
0901デフォルトの名無しさん2007/07/24(火) 07:44:01
>>899
importは「このクラスはこいつらに依存してますぜ」というある意味クラスの設計情報みたい
なもの。仕様変更やデバッグするときに鬼のようにimport hoge.*;とか書かれまくっていきな
りプログラム中でクラスが使用されているとどのクラス追いかけたらいいのかわからなくなる。
でっかいシステムなら尚のこと。
俺の場合作る手間より直す手間を減らすため、かなぁ。
0902デフォルトの名無しさん2007/07/24(火) 10:00:23
importなんて久しく意識してないな。eclipseが勝手に完全名書いてくれるからねえ
0903デフォルトの名無しさん2007/07/24(火) 10:03:03
import hoge.* でもIDEのサポートでどのパッケージはわかるから別に困らんし、
使うオブジェクト全部をimportで指定するのは面度だが、
これもIDEのサポートでさほど手間でもない。
どっちでもいい気がするが、プロジェクトのやり方に合わせるのが基地。
0904デフォルトの名無しさん2007/07/24(火) 10:16:44
入門向け書籍でサンプルコードを1行でも削るために使用されてるだけじゃね?>import の *
0905デフォルトの名無しさん2007/07/24(火) 10:31:57
importで*を使うと実行速度が低下するって聞いたんだけど本当?
0906デフォルトの名無しさん2007/07/24(火) 10:37:36
>>905
>>900
0907デフォルトの名無しさん2007/07/24(火) 10:51:50
遅くならないの?
0908デフォルトの名無しさん2007/07/24(火) 10:54:42
コンパイル時に解決されるのに、実行時に影響があるわけが
0909デフォルトの名無しさん2007/07/24(火) 11:04:52
あーそうだね
やっとわかった
ごめんね
0910デフォルトの名無しさん2007/07/24(火) 16:56:27
けど無駄なリンクが発生するから要らないリンク時間がかからない?javaって動的リンクだし。
まあ、無駄なアクセスがあればの話だけど。
0911デフォルトの名無しさん2007/07/24(火) 17:00:45
全然分かってないじゃないか
0912デフォルトの名無しさん2007/07/24(火) 17:02:19
importじゃなくabbreviateとかそんな予約語だったほうが良かったのかな
0913デフォルトの名無しさん2007/07/24(火) 18:12:23
>>910
hoge.Hegeクラスを参照しているソースファイル中で、
import hoge.*;
とやった場合と、
import hoge.Hege;
とやった場合でコンパイル後のclassファイル中のHegeクラスの名前の指定の相違点を確認。
0914デフォルトの名無しさん2007/07/24(火) 19:33:39
import a.*;
import b.*;

とかなってるときに、
パッケージ b 内にしかなかったクラスの名前と同じクラスをパッケージ a に追加すると、
追加したところとは異なるところからコンパイルエラーが発生してびびる
もっとも、たまたまシグネチャが合ってエラーが発生しなかったらと思うともっと心配かも
0915デフォルトの名無しさん2007/07/24(火) 19:38:57
無駄なリンクが発生するので、たぶん
要らないリンクに時間が掛かります(コンパイルに)
0916デフォルトの名無しさん2007/07/24(火) 19:56:13
クラスサイズが大きくなるってのは?
0917デフォルトの名無しさん2007/07/24(火) 20:11:12
ならないよ
コンパイラの名前解決時に影響するだけ
コンパイル後はまったく一緒、クラスファイルにはフルネームで格納される
0918デフォルトの名無しさん2007/07/24(火) 20:15:09
>>915-916
無駄なリンクなんて発生しねえしサイズも大きくならねえよ
importは単にこのクラスもしくはパッケージからクラス定義を拾ってこいっていうコンパイラへの指令
コンパイラの実装次第でワイルドカードを使った時のクラス検索の効率に差が出るかもしれんが
0919デフォルトの名無しさん2007/07/24(火) 23:06:32
import * ワロタ
どこの都市伝説だよw
0920デフォルトの名無しさん2007/07/24(火) 23:43:08
import *;

永遠に compile oh what a night in jamaica!
0921デフォルトの名無しさん2007/07/24(火) 23:43:17
すべてのパッケージからクラスを探し出すのか
0922デフォルトの名無しさん2007/07/25(水) 00:11:46
結局クラスパス上になければコンパイルエラーだし
クラスパス上にあるなら import *; でも探すことはできるはず。
importってコンパイルを手助けしてあげるためにあるのか?
>>901の意味合いももちろんわかるけど。
0923デフォルトの名無しさん2007/07/25(水) 00:15:11
Javaのバージョンを変えてリコンパイルし直すと、ソースいじってないのにファイルサイズ増えるよね。
これってバージョンがあがってリンク先が増えたからだと思ってた。
富○通正社員の俺
協力会社の新人に笑われたorz
0924デフォルトの名無しさん2007/07/25(水) 00:18:12
大丈夫落ち込むほどYOUの会社の評価は高くない。
0925デフォルトの名無しさん2007/07/25(水) 03:05:55
そしてなにより板の空気をよめない
923は最悪
0926デフォルトの名無しさん2007/07/25(水) 03:39:37
いろんな苦労の末に入ったばっかりなんじゃないかなー
0927デフォルトの名無しさん2007/07/25(水) 08:37:36
Rhinoって何て読む?
アール日野?
0928デフォルトの名無しさん2007/07/25(水) 08:39:34
サイさんは英語でなんと言うのでしょう赤坂?
0929デフォルトの名無しさん2007/07/25(水) 09:27:12
>>923
落ち目だからな・・・。
0930デフォルトの名無しさん2007/07/25(水) 12:52:40
J2EEとJavaは何が違うんですか?
0931デフォルトの名無しさん2007/07/25(水) 12:56:24
>>930
それは関西と大阪は何が違うかという質問に近い。
0932デフォルトの名無しさん2007/07/25(水) 13:03:05
>>931いやいやいやw

関西と関西弁の違い、と思う
0933デフォルトの名無しさん2007/07/25(水) 13:25:59
日本人と関西人の違いだろ
企業と企業広報の違いでも有るかな
0934デフォルトの名無しさん2007/07/25(水) 20:57:24
Javaで動画や音声のストリーミングって出来ますか?
動画はともかく、ねとらじとかをJavaから利用できないかな?
0935デフォルトの名無しさん2007/07/25(水) 21:05:11
やろうと思えばできる、やるかどうかは別だが
0936デフォルトの名無しさん2007/07/25(水) 21:06:21
>>930
ファミコンとディスクシステムのような関係
0937デフォルトの名無しさん2007/07/25(水) 21:36:59
>>934
さがせばストリーミングライブラリがいくらでもある。

J2EEの名称はもう使われてないな。
0938デフォルトの名無しさん2007/07/26(木) 00:41:29
JAVAアプレットのプログラムを作ってるんですが
Mainのプログラムから描画の処理のところだけ切り出して
別のクラスにかきだしたいのですがいくらやってもうまくいきません
どうすればいいですか?
どなたか教えて下さい
0939デフォルトの名無しさん2007/07/26(木) 00:45:52
エスパーが来るまでお待ちください。
0940デフォルトの名無しさん2007/07/26(木) 00:49:37
>>938
どうすればいいかは、
あなたが考えれば一番うまくいくでしょう。
0941デフォルトの名無しさん2007/07/26(木) 00:57:00
まあパッシブレンダリングだと混乱するのも分かるけどな。
0942デフォルトの名無しさん2007/07/26(木) 01:23:16
javaのパッシブ/アクティブレンダリングはそういう使い方するもんか?
GUIにタイミング任せるか、プログラムで自分でやるかの話だろ?

アプレットはエントリポイントが違うってんなら分かるが。

>>938
せめてソースくらい上げましょうぜ旦那?
0943デフォルトの名無しさん2007/07/26(木) 01:28:40
>>938
描画処理?
とりあえずソースだな。
0944デフォルトの名無しさん2007/07/26(木) 01:35:17
プログラム内からrmiregistryを立ち上げたいのですが、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36623&forum=12&7
http://itpro.nikkeibp.co.jp/article/COLUMN/20061208/256374/?ST=develop
を見て、sun.management.Agent内でその処理を行っているのはわかったのですが
このソースのどこで立ち上げてるかさぱり分かりません。
誰がわかる人がいたら解説お願いします。
0945デフォルトの名無しさん2007/07/26(木) 10:21:31
Java って、内部クラスから外側のクラスの this ポインタを取得することってできないの?

class Outer {
  void Hoge() {
    Inner inner = new Inner();
    inner.Foo();
  }
  class Inner {
    void Foo() {
      // ここで Outer の this がほしい。
    }
  }
}

コンストラクタで明示的に外側のクラスの this を渡すしかない?
0946デフォルトの名無しさん2007/07/26(木) 10:35:56
>>945
Outer.this
0947デフォルトの名無しさん2007/07/26(木) 14:24:44
class Inner はstatic finalのほうがよくね?
0948デフォルトの名無しさん2007/07/26(木) 15:25:23
派生元のクラスでprivateで定義されているメンバ変数に
それを継承したクラスの方からアクセスするにはどうしたらよいですか?
0949デフォルトの名無しさん2007/07/26(木) 15:41:37
>>948
java.lang.reflect.Field
0950デフォルトの名無しさん2007/07/26(木) 15:42:49
>>948
private で宣言されたメンバは継承されない

getter 用意してアクセスしろ
0951デフォルトの名無しさん2007/07/26(木) 16:02:25
>>949
ありがとうございます
1.4でも使えますか?
0952デフォルトの名無しさん2007/07/26(木) 16:08:39
継承はされるだろ
0953デフォルトの名無しさん2007/07/26(木) 16:22:11
>>952
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.2
> Members of a class that are declared private are not inherited by subclasses of that class.
> Only members of a class that are declared protected or public are inherited by subclasses
> declared in a package other than the one in which the class is declared.

継承されてたら言語仕様に反する。
0954デフォルトの名無しさん2007/07/26(木) 16:33:06
>>951
1.4でも使えるけど、セキュリティマネージャが許可しない場合は使えない。
例えばアプレットとかだと、Field#setAccessible() が許可されないはず。
0955デフォルトの名無しさん2007/07/26(木) 18:01:23
JAVAさんってC#くんが嫌いなんですか?
0956デフォルトの名無しさん2007/07/26(木) 18:12:42
普通設計段階でprotectedにするだろ。そういうの。

>>955
ゲイツ君がpure javaさんを嫌いで古臭いjavaさんの実行モデルを元に「・・・頼むよ君」と呼んできたのがC#くん。
0957デフォルトの名無しさん2007/07/26(木) 18:33:30
>>938なんですが
もう一度質問します。アプレットのメインクラスの中にある
描画処理・・・・たとえば↓
public void paint(Graphics g){ 
   //描画処理
  }
を別のクラスに作って描画処理を丸々引き渡したいのですが
別のクラスから描画処理をやろうとするとウィンドウに描画処理が反映されません。
メインクラスからだと反映されるのですが・・・。
描画処理をほかのクラスに引き渡すにはどうしたらいいですか?
たびたび質問してしまって申し訳ありません。
0958デフォルトの名無しさん2007/07/26(木) 18:49:04
paintの引数のGraphics gを使えば、同じクラスだろうが別のクラスだろうが関係無くちゃんと描画されるハズ。
使ってるつもりなのに描画されないなら、多分つもりなだけで実際には使われて無いんだろう。
問題のコードをどっかにうpした方が回答がつきやすいと思うよ。
0959デフォルトの名無しさん2007/07/26(木) 19:08:29
INT型の変数が2147483647を超えるとマイナスになってしまいますが、これを防ぐにはどうしたらいいものでしょうか
0960デフォルトの名無しさん2007/07/26(木) 19:11:50
long
レス数が950を超えています。1000を超えると書き込みができなくなります。