【初心者】Java質問・相談スレッド76【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/11/27(日) 19:24:09質問をする前に、貴方が見なければならないサイトについての情報は、
下の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 を使え。
・内部クラスから外部クラスのローカル変数は使えない。他の方法を考えろ。
前スレッド
【初心者】Java質問・相談スレッド75【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1131860937/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
次スレは>>980あたりでお願いしまする。
0002デフォルトの名無しさん
2005/11/27(日) 19:26:45> http://pc8.2ch.net/test/read.cgi/tech/1131860937/968
> すいません。
> こういう感じです。
> java.sql.SQLException: Column index out of range.
>
> at com.mysql.jdbc.ResultSetMetaData.getField(ResultSetMetaData.java:468)
>
> at com.mysql.jdbc.ResultSetMetaData.getColumnName(ResultSetMetaData.java:337)
>
> at isbn_mysql.main(isbn_mysql.java:42)
まず英語くらい嫁
カラムインデックスが範囲外だといってるぞ
0003デフォルトの名無しさん
2005/11/27(日) 19:28:13とかにはならないはず。
ってことはプログラムのどこかに間違いがあると見た。
ソースを晒してくれると早い。
0004デフォルトの名無しさん
2005/11/27(日) 19:32:250005デフォルトの名無しさん
2005/11/27(日) 19:34:00スレをちゃんとよく見ろ。
前スレはあと3レス残ってるぞ
0006デフォルトの名無しさん
2005/11/27(日) 19:53:37それをやるなら「うはwwwwおkwwww」だろ糞が。
0007デフォルトの名無しさん
2005/11/27(日) 21:17:18ありがとうございます。
ソースはこういう感じです。
try
{
//接続の準備
String drv = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql:///amp";
String usr = "";
String pw = "";
//データベースへの接続
Class.forName(drv);
Connection cn = DriverManager.getConnection(url, usr, pw);
0008デフォルトの名無しさん
2005/11/27(日) 21:17:56Statement st = cn.createStatement();
String qry = "SELECT * FROM md_bni";
//問い合わせ
ResultSet rs = st.executeQuery(qry);
//データの取得
ResultSetMetaData rm = rs.getMetaData();
int cnum = rm.getColumnCount();
while (rs.next())
{
for (int i = 1; i <= cnum; i++)
{
System.out.print(rm.getColumnName(i) + ":" + rs.getObject(i) + " ");
}
System.out.println("");
}
//接続のクローズ
rs.close();
st.close();
cn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
0009デフォルトの名無しさん
2005/11/27(日) 21:33:13>System.out.print(rm.getColumnName(i) + ":" + rs.getObject(i) + " ");
0010デフォルトの名無しさん
2005/11/27(日) 21:35:44objectはy軸ってこったな
----
import java.awt.Container;
import javax.swing.*;
import javax.media.j3d.Canvas3D;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class MyDialog extends JDialog {
private Canvas3D canvas;
public MyDialog() {
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
Container pane = getContentPane();
//canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
//pane.add(canvas);
pack();
}
public static void main(String[] args) {
MyDialog dialog = new MyDialog();
dialog.setVisible(true);
}
}
----
javaプログラムが終了しました。
しかしながら、プログラム中断のcanvas関連のコメント文をはずして実行するとダイアログが正常に
終了しなくなってしまいます。
具体的にいいますと、
%> java MyDialog
と打った後、全くコマンドプロンプトが戻ってこなくなるのです。
これはどうしてでしょうか? Canvas3Dに何かしらの設定を行う必要があるのでしょうか。
教えてください。
0013デフォルトの名無しさん
2005/11/27(日) 21:59:55意味不明
実行してダイアログを削除って何?
0014デフォルトの名無しさん
2005/11/27(日) 22:03:47どういうことですか?
while (rs.next())
{
for (int i = 1; i <= cnum; i++)
{
System.out.print(rm.getColumnName(i) + ":" + rs.getObject(i) + " ");
}
System.out.println("");
}
を消して System.out.println(cnum);で表示cnumをj表示させたら
1と表示されました。
0015デフォルトの名無しさん
2005/11/27(日) 22:08:531と表示されました。
○ を消して System.out.println(cnum);でcnumを表示させたら
1と出力されました。
誤字多くてすみません。
0016デフォルトの名無しさん
2005/11/27(日) 22:15:39配列arrayの長さが3だとして
あなたは
for (int i = 1; i <= 3; i++)
System.out.print(array[i]);
って書きますか?
ごめんなさい、 >>11のようなコードを書いて、
%> java MyDialog
と打って、プログラムを実行します。
そうすると、ダイアログが表示されます。
そのダイアログを閉じると、プログラムが正常に終了し、プロンプトが戻ってくるのですが、
中段のコメントアウトをはずし、canvasをダイアログに貼り付けると、
ダイアログを閉じても、プログラムが終了しないままになってしまうんです。
これは、どうしてでしょうか?
0018デフォルトの名無しさん
2005/11/27(日) 22:26:35JTabbedPaneとJMenuBarは同時には使えないんですか?
JFrameクラスのインスタンスをframe1とします。
frame1にJMenuBarを加える。
frame1にgetContentPane()してからJTabbedPaneを加える。
上のようにしてもタブしか表示されません。
0019デフォルトの名無しさん
2005/11/27(日) 22:27:54おまえ・・・そのAAどこで・・・
0020デフォルトの名無しさん
2005/11/27(日) 22:29:29BorderLayoutのCENTERをJTabbedPane, NOTHをJMenuBarでも無理?
0021デフォルトの名無しさん
2005/11/27(日) 22:34:32できました!
上にはfor (int i = 1; i <= cnum; i++)かいてたんですけど、
cnumが大きいので10にしてました。
for (int i = 1; i <= 10; i++)
そこがいけなかったんですね
どうもありがとうございました。
0022デフォルトの名無しさん
2005/11/27(日) 22:40:29誰かがx軸とy軸って書いた意味を考えよう
002318
2005/11/27(日) 22:45:54002418
2005/11/27(日) 22:56:31原因はJMenuBarにJMenuを加えていなかったことでした。
加えてみると、タブもメニューバーも表示されました。
JMenuBarはJMenuを加えることで初めて厚みがでるんですね
0025デフォルトの名無しさん
2005/11/27(日) 22:57:50SUNが学歴だけではダメだぞと釘を刺すために作った仕様さ。
0026デフォルトの名無しさん
2005/11/27(日) 23:01:05誤爆?
0027デフォルトの名無しさん
2005/11/27(日) 23:17:28ダイアログ上に3Dオブジェクトを
表示させようとしているのか?
ふつうそういうことやるかね?
0028デフォルトの名無しさん
2005/11/27(日) 23:17:56意味不明
0029デフォルトの名無しさん
2005/11/27(日) 23:19:15イマジネーションが足らない奴だな。
エスパー度が低いってのはPGとして致命的だぞ。
そうです。3Dオブジェクトをダイアログ上に表示させようとしています。
駄目でしょうか? ダイアログが不適であれば、他に何を使うべきでしょう?
あと・・・できれば、やっぱりダイアログを使いたいので・・・どうしても、駄目なんでしょうか?
0032デフォルトの名無しさん
2005/11/28(月) 00:16:41項目をX軸にいくつか書いていって
そっから下(Y軸)にデータを書いてくでしょ
0033デフォルトの名無しさん
2005/11/28(月) 00:58:37javaプログラムからMatLabと通信したいのですが無理ですか?
0034デフォルトの名無しさん
2005/11/28(月) 01:03:57おめえは占い師かアホ
勘だけでしか行動できない
論理的思考能力が薄い奴のほうが
プログラマ向いてないぞ( ゚Д゚)ゴルァ!!
0035デフォルトの名無しさん
2005/11/28(月) 01:04:21Frame, JFrame
0036デフォルトの名無しさん
2005/11/28(月) 01:08:51Runtimeクラスを使えばできる
0037デフォルトの名無しさん
2005/11/28(月) 01:22:03しかしMATLAB6R1xに入っているJavaは
何故か相変わらずMSJVMだったよな。
あれは最新版MATLAB7では直っているんだろうか?
っていうかSun純正Javaにしてもらいたいもんだな。
IBM製JVMでもいいかもしれないが。
MATLABからJavaオブジェクトを生成して
呼び出して使うということなら知っているが、
Javaから呼び出す具体的な方法は知らんな。
Runtimeクラスとかつかえばできなくもないが。
0038デフォルトの名無しさん
2005/11/28(月) 02:55:57JDBCがセットアップしたはずなのに使えません。
ファイルのコンパイルはできるのですが実行しようとすると
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.ClassforName0(Native Method)
at java.lang.ClassforName(Unknown Source)
at Sample1.main(Sample1.java:15)
て出て実行できません。コレって一体どういう事なんでしょうか?
誰かわかる方お願いします。
0039デフォルトの名無しさん
2005/11/28(月) 03:13:24バイナリモードで読み書きしたいのですが、どうすればよいのでしょうか?
0040デフォルトの名無しさん
2005/11/28(月) 03:23:300041デフォルトの名無しさん
2005/11/28(月) 03:29:14どうも有り難う御座いました。
0042デフォルトの名無しさん
2005/11/28(月) 03:49:26この断定おかしくないけ?
staticな内部クラスの場合はそうかもしれんが。
0043デフォルトの名無しさん
2005/11/28(月) 05:06:45まあutf8変換で苦しんでくれ(w
0044デフォルトの名無しさん
2005/11/28(月) 06:06:26ACCESSでも
まともなプログラマなら
カラム名には日本語使わないよ
君子危うきに近寄らず
0045デフォルトの名無しさん
2005/11/28(月) 07:36:45num a=1;
String str = ”文字列”;
このstrに数字をaの値を入れるにはどうしたらいいですか?
String str = ”a”;
としたらstrには文字列aだから、ダメなのですが。
int型のaに代入された値をstrに文字列として入れる方法を教えてください。
0046デフォルトの名無しさん
2005/11/28(月) 07:43:010047デフォルトの名無しさん
2005/11/28(月) 08:02:580048デフォルトの名無しさん
2005/11/28(月) 08:03:59int a=100;
String str;
str = a.toString();
としたら、
Ans.java:9: int は間接参照できません。
str1 = a.toString();
というエラーがでます。
0049デフォルトの名無しさん
2005/11/28(月) 08:10:45宿題スレとのマルチかよ…
0050デフォルトの名無しさん
2005/11/28(月) 08:12:02どっちに書けばいいのか迷ったので両方にお願いしました。
すいません。
0051デフォルトの名無しさん
2005/11/28(月) 09:40:41内部クラスが static ではない or ローカル変数が final ではない
とアクセスできない
0052デフォルトの名無しさん
2005/11/28(月) 10:27:32無名クラスじゃない内部クラスから、ローカル変数にアクセスする方法を教えていただきたい。
0053デフォルトの名無しさん
2005/11/28(月) 11:01:29次にfor文をつかって20個の要素をすべてにaddしようとしたら、
ary[1], ary[2], ary[3]は要素数が30になったのに、ary[4]だけは50になってしまいました。
なんででしょう?考えられる可能性があったら教えてください。
arraylistの仕様でしょうか?
0054デフォルトの名無しさん
2005/11/28(月) 11:05:33ソース貼れ。
お前さんがどこか間違えてる。
0055デフォルトの名無しさん
2005/11/28(月) 11:51:59エスパーを求めるな
0056デフォルトの名無しさん
2005/11/28(月) 12:11:29ArrayListをarraylistって書くな。
0057デフォルトの名無しさん
2005/11/28(月) 12:43:09その説明だけじゃ答えようがない。
0058デフォルトの名無しさん
2005/11/28(月) 13:04:49歯磨けよ。
0059デフォルトの名無しさん
2005/11/28(月) 13:20:08自慰は自宅でやれ
0060デフォルトの名無しさん
2005/11/28(月) 13:25:00RubyのPStoreとかPythonのShelveみたいなものを想定しています。
ttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=PStore
http://www.python.jp/doc/nightly/lib/module-shelve.html
0061デフォルトの名無しさん
2005/11/28(月) 14:22:010062デフォルトの名無しさん
2005/11/28(月) 15:32:46今は
new Integer(rs.getObject("hoge").toString());
とやってます。たぶんすごく無駄なことをやっているんだろうな
と思うのですが・・・
006360
2005/11/28(月) 15:47:08FileOutputStream/FileInputStreamを使ってjava.io.Serializableをimplementsするオブジェクトを読み書きする、というページがたくさん見つかり、内容は大体理解できました。
↓のような、もうちょっと高水準なライブラリはないのでしょうか。
FiledMap fm = new FiledMap(new File("data.fs"));
MyClass foo = (MyClass)fm.get("foo");
foo.setCounter(foo.getCounter() + 1);
fm.put("foo", foo);
fm.close();
0064デフォルトの名無しさん
2005/11/28(月) 15:47:31mapに存在する値の一覧(コレは固定)を入れといて、getしてnullじゃ無かったらあるよ
てなことをしてるんだすがそこで質問です。
finalでmap宣言して、static句でmapに入れてあげても、mapの中身は替えられるですよね?
(mapオブジェクトがfinalなだけだからシングルトンオブジェクトのような感じになっちゃうのかな?間違ってたらスマソ)
値変えられないコレクションてどうやってつくればいいの?
0065デフォルトの名無しさん
2005/11/28(月) 15:48:14cast
0066デフォルトの名無しさん
2005/11/28(月) 15:49:16java.util.Collectiosあたりでもぐぐれ
0067デフォルトの名無しさん
2005/11/28(月) 15:58:56public static <T> List<T> singletonList(T o)
0068デフォルトの名無しさん
2005/11/28(月) 16:02:13<T> List<T>
unmodifiableList(List<? extends T> list)
0069デフォルトの名無しさん
2005/11/28(月) 16:03:57staticメソッド使ったほうがよくね?
0070デフォルトの名無しさん
2005/11/28(月) 16:23:06>>68
<T>ってテンプレートだっけ?1.5からつかえるやつの。
1.4じゃどうすれば?
0071デフォルトの名無しさん
2005/11/28(月) 16:39:28http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Collections.html
unmodifiable~
ってか>>66で既に出てるんだからAPIドキュメント読むくらいして欲しいぞ。
0072デフォルトの名無しさん
2005/11/28(月) 16:52:55ありがとん
0073デフォルトの名無しさん
2005/11/28(月) 17:02:15Point a[] = {
{1,2},
{3,4},
{5,6}
};
みたいなオブジェクト配列の初期化はどうやればいいんでしょうか
0074デフォルトの名無しさん
2005/11/28(月) 17:06:52import java.awt.Point;
...
Point[] points = new Point[] {
new Point(1, 2);
new Point(3, 4);
new Point(5, 6);
}
007574
2005/11/28(月) 17:08:26Point[] points = new Point[] {
new Point(1, 2),
new Point(3, 4),
new Point(5, 6)
}
0077デフォルトの名無しさん
2005/11/28(月) 17:36:44Generics
Java GenericsはC++ templateとは厳密には
同義ではないらしい。
タイプセーフだし
豆蔵のページでそう説明されていた。
0078デフォルトの名無しさん
2005/11/28(月) 17:38:46(Integer)rs,getObject("hoge");
と書き換えればいいが、
rsってJDBCのResultSetのことか?
なら
int hoge = rs.getInt("hoge");
のほうがいいだろ。
0079デフォルトの名無しさん
2005/11/28(月) 17:43:33TigerになってもGenerics使えるのが少ないんだな。
引数にGenericsで型を指定できるが戻り値には指定できないんだな。
Object getObject(int i, Map<String,Class<?>> map)
この ResultSet オブジェクトの現在行にある指定された列の値を、Java プログラミング言語の Object として取得します。
Object getObject(String colName, Map<String,Class<?>> map)
この ResultSet オブジェクトの現在行にある指定された列の値を、Java プログラミング言語の Object として取得します。
0080デフォルトの名無しさん
2005/11/28(月) 18:53:040081デフォルトの名無しさん
2005/11/28(月) 19:19:280082デフォルトの名無しさん
2005/11/28(月) 19:22:460083デフォルトの名無しさん
2005/11/28(月) 19:31:400084デフォルトの名無しさん
2005/11/28(月) 20:29:31ごめん。該当の文書いた本人だけどすっごくケアレスミスした予感。申し訳ない。・゚・(ノД`)・゚・。
確かにそれは内部クラスの中でも無名クラスのみに該当することだ罠 orz
0085デフォルトの名無しさん
2005/11/28(月) 20:31:03……とりあえず、質問者が 『無名クラス』 じゃなくて 『内部クラス』 って単語を多くつかってたような気がする〜
とか言い訳してみる 。・゚・(ノД`)・゚・。
0086デフォルトの名無しさん
2005/11/28(月) 21:53:11ObjectInput in = new ObjectInputStream(inFile);
while(true){
Data data = (Data)in.readObject();
//終了条件省略
}
で,class Dataをいくつか直列化して保存してあるファイルを読み込もうとしてるんだけど,OutOfMemoryErrorが発生して読み切れません.
objは毎回破棄しているから,FilInputStream内にファイルの中身が全部詰まってしまっているせいだと思うんだけど,回避方法はありませんか?
-Xmxを使わない解決法を探しています.
保存されているObjectは一つ5M程度,ファイルは80M程度です.
0087デフォルトの名無しさん
2005/11/28(月) 22:00:16普通にプロファイラで調べたら?
0088デフォルトの名無しさん
2005/11/28(月) 22:33:56やりたいことは・・・
巨大なデータを保存して,取り出したい
⇒普通に全データを一気に取り出したのではメモリが足りない
⇒分割して保存
⇒分割して取り出したい
⇒ファイルの後半にあるデータを取り出そうとするとOutOfMemoryError←いまここ
fileの中にDataが配列のようにずらずら並んでいると思ってください.
その中の一部だけ取り出して,メモリ不足を回避.わーい.
というのを狙っていました.
0089デフォルトの名無しさん
2005/11/28(月) 22:40:02それと直列化したいオブジェクトそのものを分割することも。
分割して圧縮して直列化して
取り出すときに解凍して統合する。
objは毎回破棄って?まさかSystem.gc()をつかってるわけではない?
java.lang.ref.SoftReferenceとか使って解放させた方がいいかも。
0090デフォルトの名無しさん
2005/11/28(月) 22:52:36圧縮することは根本的解決にならないので・・・
で,
while(true){
in.readObject();
//終了条件省略
}
にしてもやっぱりOutOfMemoryですた.
ちょっと読み込んで,読んだ分はメモリから削除して次を読んで・・・
とやりたいだけなのに.
0091デフォルトの名無しさん
2005/11/28(月) 23:00:51個人的には、ObjectInputStream 側が悪さしていそうな予感。
だけど確証が持てないので……シリアライズ使うの止めた方が懸命。
それほどの巨大データなら、独自にデータベースもどきを作った方が早いと思うよ。
0092デフォルトの名無しさん
2005/11/28(月) 23:19:40in.readObject();
一発だけでOutOfMemoryErrorじゃない?
Dataがリスト構造みたくつながってて、全部釣れてきちゃうんじゃ?
0093デフォルトの名無しさん
2005/11/28(月) 23:24:340094デフォルトの名無しさん
2005/11/28(月) 23:25:30要らないメモリ変数にはnull突っ込まないとGCされないよ。
単純にバッファに読み込まないでseekすればよさそうだけど、多分探すの大変で遅いだろうね。
DBみたいに固定長のファイルフォーマット仕様を考えて、それを読み込むぐらいだな。
単純にメモり積むのが簡単だけど。
0095デフォルトの名無しさん
2005/11/28(月) 23:40:09メモリに展開したら…
つうか、何でそんなでかいのよ。
0096デフォルトの名無しさん
2005/11/28(月) 23:42:16nullかどうかじゃなくて切り離されたタイミングでGCで回収対象になるんだから
ループ内で変数に代入していたら他に参照がなければちゃんときえる
意味のある場合以外はnull代入はやめたほうがいい
どうでもいいが>>86はObjectInputStreamの仕様わからないで使うなよ・・・
ちゃんとマニュアルを読んでみよう
ヒント:以前もoutputのほうで問題出ていた
0097デフォルトの名無しさん
2005/11/28(月) 23:42:57nullにしただけでもGCされるとは限らないし
下手にやみくもにnullしただけだと
返ってパフォーマンスを悪化させることもあるし。
java.lang.ref.Referenceを上手に使った方がいいかと思われ。
0098デフォルトの名無しさん
2005/11/28(月) 23:46:00long型とint型の数値を比較するために
条件文の中でキャストってできるのでしょうか?
int i;
long j;
i=1
j=88888888888888
if( (long) i < j ) ←←←←←←←←←←←←条件文の中でキャスト可能?
{
・・・・・・・・・・・・・・・・・・
}
0099デフォルトの名無しさん
2005/11/28(月) 23:46:321バイトづつ、固定バイトずつ読み込む
read()系メソッドつかったほうがいいのでは。
っていうかもっといいのは
直列化オブジェクトがどんなクラスの
オブジェクトなのか非常に気になるな。
もしかしてリストの中にでっっかいリスト
が入っているとかか?
それともひたすらnewしすぎてメモリ消費が膨大になっているか。
while文の中でRuntime.getMemory()
とかgetfreeMemory()とか使ったら
どんな数値がでるのか気になる。
0100デフォルトの名無しさん
2005/11/28(月) 23:47:02コンパイル、実行してみればわかる
0101デフォルトの名無しさん
2005/11/28(月) 23:47:45なぜ-Xmx使っちゃいけないのか気になるぞ
■ このスレッドは過去ログ倉庫に格納されています