【初心者】Java質問・相談スレッド63【大歓迎】
どうもです。 言葉を2進数に変換して それを表示して さらにその2進数から 言葉に変換するっていうのはありですか? 例えば hは1101000で 1101000はhになる。みたいな感じで。。。
ありです。
2進数を文字に変換するのは 2進数を一度10進数に直してから 文字に直すというのがいいのでしょうか? 他の方法があれば・・・ 2進数を10進数に直すときは String kk = "1001001" Integer.toString(kk, 10); でいいのでしょうか?
いい加減に「文字を2進数に変換する」とか「2進数を文字に変換する」という表現が いかに意味不明か気付けよw
>>3 「言葉」の完全な定義が無いと答えられません。
>>5 kk は2進数じゃなくて、文字列ね。
すみません・・・ 何って言っていいかよく分からなくて・・・
なんでわざわざ名前欄に名無しって入れるんだか。 それに少しくらいsageを覚えなさい。 じゃないとおまいにプログラムはまず無理
前スレの
>>972 javax.soundパッケージあたり
多少のことには目をつぶれ
まあ、適当に類推して
>>5 の質問に答えると、
"1001001"という文字列から73ていうintを得たいのなら、
Integer.parseInt("1001001", 2);
だ。
intを2進数で表現した文字列にしたい時は、
iを変換したい整数とすると、
Integer.toString(i, 2)
だ。
あのーーJavaのことはまったく何にも知らないど素人なのですが 「東京三菱ダイレクト」を利用しているのですが 多分ノートンインタネットセキュリティ2004を入れてからだと思うのですが ログインボタンを押しても画面の左下にjavascript:LoginJump(); と出るだけで別ウィンドウが開かなくなってしまいました 再起動したり、cookieを削除したりすると開くときもあるのですが 2回目はもう開かなくなっちゃうんです これはどうしたら直るのでしょう 。・゚・(ノД`)・゚・。どうしてよいものやらさっぱりわからないです 誰かお助けくださいまし
ここは javascriptのスレではなかったようですね それすらも気づかず失礼しました そちらで伺ってみます。
誰か、GSM圧縮の音声処理を試した人いますか? もしいれば、参考URL教えてもらいたいんだけど。 いろいろ探ったんだけど、なかなか見つからなくて。
>>11 Integer.parseInt("1001001", 2); これで73っていうintの数値が返ってきますよね? この73を文字に変えたいんですが・・・ hという文字を2進数で表すと 1001001になるので 逆に1001001という数を与えてhという文字を吐き出させたいのですが・・・
>>16 だ~か~ら~
文字列を二進数(数字)に表す、って事のおかしさが理解できないの?
hが1001001になるんだったら、どうやってそれを得たのかそのプログラムを書け。
>>17 char = 'h'
String uuu = Integer.toString(u, 2);
System.out.println(uuu);
これで1001001っていうのが返ってきました。
まちがえた char u = 'h'; だった
いい加減しつこいぞ…ここはお前のためだけのスレじゃない 本持ってるんならまずそれを読んで基本を勉強してから来い
ああ、「文字」ってchar型にしたいって事を言ってるの? だったら char c = (char)Integer.parseInt("1001001", 2) だ。 charもintも所詮は整数。キャストすればOK。 おそらくその点が分かってないんだと思うがw
22 :
デフォルトの名無しさん :05/03/08 01:50:36
こんちわ。 皆さん、Javaしてますか? さて。ただいま私はSolaris8で検索系Javaアプリを作っています。 そこで問題が出たのですが、TextFieldからTextFieldへフォーカスが移動すると、 日本語入力が勝手にOFFになってしまいます。 これは普通なのでしょうか? フォーカスが移るたび、Ctrl+Spaceで日本語入力をONをするのは使い勝手が悪いです。 どうにかならないでしょうか? ちなみにATOK12を使用しています。 Javaは1.4.2を使用しています。
>>21 ようは、 Integer.toString(u, 2); をつかって2進数表示したものの 逆をやりたいんです・・・うまく言えないけど
>>20 すみません。怒らせてしまったようで もう一度勉強してから来ます。。。 ありがとうございました
char k = 'h'; String kkk = Integer.toString(k, 2); System.out.println(kkk); char kk =(char)Integer.parseInt(kkk, 2) ; System.out.println(kk); これで元のhが出るようになりました
皆さんどのくらいパッケージ、クラス記憶してます? よく使うやつだけ覚えればOKですかね?
>>26 そんなもんわざわざ覚えなくてもリファレンス見ながら作ればいいだろ。
必要なものは自然に覚えるし、必要ないものはどうせすぐ忘れる。
そんなのはプログラムとか以前の一般常識の範疇だと思うんだけど。
「クラスの暗記」は、「参照渡し」、「ポインタ」、「Tomcat5.5」についで このスレでの禁句に認定されました。
APIなんざ憶えようとして憶えるする必要なし キーワードだけ憶えとけ
JSPからmysqlにアクセスする
簡単なプログラムを書いたのですが以下のエラーが出ます
javax.servlet.ServletException: 名前 jdbc はこのコンテキストにバインドされていません
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:498)
~
javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません
at org.apache.naming.NamingContext.lookup(NamingContext.java:764)
環境、環境変数はこんな感じです
CATALINA_HOME: c:\Program Files\Apache Group\Tomcat 4.1
JAVA_HOME: c:\j2sdk1.4.2_03
Path: .;%JAVA_HOME%\bin;c:\Program Files\MySQL\MySQL Server 4.1\bin
classpath: .;%CATALINA_HOME%\common\lib\servlet.jar;%CATANINA_HOME%\webapps\jsp10\WEB-INF\classes;
OSはXP。Tomcat,Mysqlの動作は確認済み。正常です
http://dev.mysql.com/downloads/connector/j/3.1.html からJDBCドライバをダウンロードしてmysql-connector-java-3.1.7-bin.jarを
%JAVA_HOME%common\libフォルダの中に入れました
考えられる設定ミス解る方いましたらご教授お願いします
すみません classpathの%CATANINA_HOME%\webapps\jsp10\WEB-INF\classes; は関係なかったです
エラーメッセージどおりlookupまわりじゃねーの? まずJSPからJDBC直でつないでみてよ
データソースがバインドされてないか、名前が間違っているか。
>まずJSPからJDBC直でつないでみてよ >データソースがバインドされてないか 駄目だ、さっぱり解らん。自分が何をやってるのかも不安になってきた JSPからmysqlに接続とか言ってる前に mysql,javaからのJDBCの基礎から勉強しなおしてきます 中途半端な質問で失礼しました
>>36 どうもです
ここ何日かでApache,Tomcat,Eclipse,jsp,サーブレット,jdbc,mysql・・・
ああ、特にEclipseの環境設定、mysqlのインストール
マジで情報の中に埋もれた、一回頭の中整理する
webサーバ構築してHP作ろうというのが最初の目的だったのに一体何処に進んでだろう、俺
>>26 > 皆さんどのくらいパッケージ、クラス記憶してます?
> よく使うやつだけ覚えればOKですかね?
デジャブだ。
以前も見た。
前スレよ全部読め
>>38 漏れと似たような経験をしてそうな香具師をハッケソ
Webサーバを構築しよう、
Javaで何かをやってみようとしたら
いろんなことが出てきて
沢山覚えて気がついたら当初予定していたこととは
違うことをしていたってやつ。
でも今では自宅サーバ構築しているし
Javaスキルもかなり向上してきた。
バイト先でもスキルが大いに生かされており
さらに新しいものを学ぶ土壌になっている。
Webサーバは主にブログに使ってる。
データソースなんて簡単なもんだよ。
Tomcatのドキュメントでも読んでみなよ。
本屋にいけばTomcatのデータソースについて解説している
本がたくさんある。
>>26 前スレでも出てたけど、本格的にJavaプログラミングをしたいなら
まず一通り暗記する必要はある。
英単語よりは覚えるのは楽なんだから、受験時代に返ったつもりで
暗記練習するのがいいかもしれない。
lang, io, util, nio, text 辺りは覚えておく必要があるのではないか?
いちいちリファレンス書を見る手間も軽減されるし。
>>41 暗記が得意なら暗記すれば良い。
暗記が不得意なら検索ツールを使用するとか工夫すれば良い。
どっちが良いとかは人によるからなんとも言えない。
>>41 どうやって暗記しろって思ってるの?
例えばどういう暗記練習が必要なのか、具体的に教えてみてよ。
単語帳でも作る?赤い線引いて、セロファンで隠すやつやる?トイレの壁にAPIリファレンス貼るの?
あほらしいと思うけど。
大体スペルなんかは、コードアシスト使ってれば、なんとなく覚えてるだけで十分だろ。
イテレータ使おうと思ったときに、Iteまで打てれば十分だ。
>いちいちリファレンス書を見る手間も軽減されるし。
それは同感だが、暗記練習する必要はないと思う。
覚えることで効率は上がるかも知れないけど、暗記作業は無駄だ。
それより学ぶことは一杯あるだろ?
> いちいちリファレンス書を見る手間も軽減されるし。 新しいバージョンが出るたびに差分を暗記するハメになる罠。 中途半端な暗記力の持ち主にはオススメしない。
パッケージだけ覚えておけば十分な気がするが。 「可変長データを扱いたいんだが、どんなクラスを使えばいいんだろう?」→java.util 「ファイルの読み書きってどうするんだっけ?」→java.io, java.nio 「日付の表示をきれいにしたい」→java.text, java.util 「文字列を区切る処理を書きたいんだが、何か便利なクラスがないかな」→java.lang、java.util 実際にはパッケージリストだけじゃ不便だろうから、 手元のJava本の索引も頭に入れておくとなおよし。
>>43 自分がやったのは、APIリファレンスの「メソッドの概要」部分を
ひたすら模写して、後でそれを見ないで書いてくのを繰り返す方法だった。
プリントしてメソッド概要部分だけを切り取って、小冊子を作り
常にそれを見ていた。タイピングよりも手書きの方が覚えられる。
>>45 従来の基本パッケージは、そんなに大幅に変わる事はないからね。
幾つかクラスとメソッドを追加するだけでいい。
5.0で覚えるべき新基本パッケージは、concurrent系の3つだけど
これはかなり覚えやすかった。
バージョンアップしても、そんな大変って訳でもないよ。
>>47 そんな事やってる暇があったら他人のプログラムでも読んでた方がマシって人の方が多そう。
>>48 大変じゃないのは、結局APIリファレンスに頼らないといけないぐらいにしか暗記してないから。
ってか、その程度なら覚えやすいってのは普通。
51 :
デフォルトの名無しさん :05/03/08 18:37:59
jarで起動するときにあらかじめメモリ確保することってできます? バッチファイル通して起動するとかじゃないと無理だとなんかヤダなぁと
>>47 暗記大好きタイプはプログラミング向いてないんじゃね?
なんでそんなめんどいことせにゃならん。
VisualEditorばっかり使ってるからあんまり覚えてないや
意図的にCPUに負荷をかけるようなツールを作りたいのですが、 どういう処理をやらせるのが一般的でしょうか? 無限ループでSystem.out.println()でも呼べばいいのかなぁと思ってますが
>>54 while(true)System.gc();
あ、欲を言えば負荷の量を調節できるようにしたいです 何か良い手法はありますでしょうか?
どうやって調整する事を想定してんの? 1.ソースそのままで外部入力で調整 2.ソース変更で調整
58 :
デフォルトの名無しさん :05/03/08 19:27:50
sleepと大量のスレッドを使えば?
60 :
デフォルトの名無しさん :05/03/08 19:40:44
負荷を調節するためだろ
なるふぉど
>>57 どちらでも結構です
何度か試して最適な負荷量を割り出した後はその値のまま固定して使う
という調整を想定してますので、ソース弄ってコンパイルやり直しでも無問題です
CPU使用率ってどうやって取得するの?
>>47 ギャグだよね?こんなことマジでするやついるの?
リファレンスを暗記するくらいなら、 src.zipの中身を読んで実際の動作を勉強するうちに 自然と覚えるというほうが良いな。
66 :
568 :05/03/08 20:43:58
>>47 それは覚え方としては激しく間違ってるよ。
実際のプログラミングでは、クラスや関数の仕様だけでなく、
前後の流れとか、はまった罠とか、生きたコードに関連づけて覚えることがなにより重要で、
そうすればコードを書くときに自然に関数等がイメージできるようになる。
ま、簡単にいうと「習うより慣れろ」ってことだな。
Dr.パソコンの冥福を祈りながらこの言葉をよく胸に刻み込んでおけ。
他人の覚え方なんて口出す必要ないのに。
答えた奴に突っ込んでる奴多いじゃん。
1週間前からJAVAを勉強し始めた者です。 入門書にてクラスとインターフェイスあたりまで勉強しました。 キーボードからの入力を受け付けるプログラムを作成する時に 画面に入力がエコーバックされないようにする方法って何かないのでしょうか? それともう一つ、キーボードから入力されたときに、その都度入力と予め定めておいた文字とが 一致するか調べるといったようなプログラム(一致しないと一致するまで足踏み状態)を作りたいのですが、 何か方法はないでしょうか?
>>72 > 画面に入力がエコーバックされないようにする方法って何かないのでしょうか?
jcurses とか使えば出来るかも。
this └jContentPane setjPanel.setPreferredSize(new java.awt.Dimension(600,600)); └jTabbletPane setjPanel.setPreferredSize(new java.awt.Dimension(590,537)); └jPanel .setjPanel.setPreferredSize(new java.awt.Dimension(440,115)); このように指定してるのですが何故かjPanelだけsetPreferredSizeが適用されません。 タブパネル上でパネルのサイズを指定するにはsetPreferredSizeだけでは駄目なのでしょうか? どなたか、jPanelのサイズの指定の仕方を教えていただけないでしょうか? よろしくお願いします。
>>74 jTabbletPane ってのが何かわからん。
PreferredSize よかレイアウトマネージャはどーなってる?
タブレットの情報を受け取れる pane なんだよ。たぶん。 tablet にしては b が一個多いけど。
>>75-76 すいません、jTabbedPaneでした。
jPanelのレイアウトマネージャーは、
>alignment LEFT
となってます。
念のため、ソースをアップしました。
56~61行目です。
http://www.uploda.org/ 55005.zip
よろしくお願いします。
>>77 jPanelの位置を決定するのはjPanelの親(jTabbedPane、
もしくはjTabbedPaneが使用するコンポーネント)のレイアウトマネージャだから、
jPanel自体のレイアウトマネージャを見ても解決しないと思うよ。
79 :
デフォルトの名無しさん :05/03/09 00:38:15
for (int i = 0; i < bytes.length; i++) { s = Integer.toHexString(bytes[i] & 0xFF).toUpperCase(); if (s.length() == 1) { s = "0" + s; } System.out.println(s); ↑ これをもうちょっとキレイに整理したいのですが、どのような例がありますでしょうか? 宜しくお願いします
>>79 は?
質問するなら、何やりたいのかくらい書けよ。
1.5: printfを使う。
>>77 JTabbedPaneってそういうもんだよ。
JTabbedPane内に入れたJPanelはそれが1枚のタブとなるから
JTabbedPaneのサイズに合わせて、自動的にサイズが決まる。
この図では
http://java.sun.com/docs/books/tutorial/figures/uiswing/components/TabbedPaneDemo.gif JTabbedPaneに4つのJPanelを追加しているが、
それぞれのJPanelでサイズ指定できるとしたら、どういう画面になるのか意味不明だろ?
4つすべてがJTabbedPaneのサイズによって同じサイズになる。
>>74 がどういうレイアウトしたいか良く分からんが
JTabbedPaneに追加したJPanelに、更にJPanelを追加して、そいつのPrefferedSizeを指定すれば
望みどおりになるのでは?
this
└jContentPane PreferredSize(new java.awt.Dimension(600,600));
└jTabbletPane PreferredSize(new java.awt.Dimension(590,537));
└jPanel [FlowLayout] ←レイアウトマネージャはお好みで。
└jPanel. PreferredSize(new java.awt.Dimension(440,115));
>>74 >何故かjPanelだけsetPreferredSizeが適用されません。
ちなみに、PreferredSizeがどういう使われ方をするかは、レイアウトマネージャによって決まる。
絶対的なサイズ指定ではないから。例えば、GridLayoutだとPreferredSizeは全く使われないし、
BorderLayoutのNORTHに置いた場合は、高さだけ使われるし、WESTに置くと幅だけ使用されたりとか。
文字列,double,double 文字列,double,double ・・・ っていう情報が入っているtxtファイルを読み込みたいんだけど どうしたらいいですか?
>>84 「~だとできるけど、○○をどうすればいいか分からない」と書かないと
「ファイルを開いて読め」としか答えようがないんだけど。
文字列
文字列
・・・
のtxtファイルだと読み込めるのか?doubleを取り除いて読み込む方法がわからないと言う意味か?
「,」で区切りたいんだと思う
指摘されてはじめて気付くくらいぼけてました
>>86 さんの言うとおり,で区切って読みたいんです
配列でString[i]とdouble[2][i]に入れていく感じなんですが
split
89 :
デフォルトの名無しさん :05/03/09 03:10:53
ドラッグ&ドロップしたファイルのファイル名だけを読み込みたいのですが、サッパリです。 ファイル名を指定してデータを読み込むことはできるのですが・・・ 教えてください賢者様
>>87 まずは何が分からないのかを整理した方が良いよ。
おおざっぱにいうと、
1. ファイルを読み込む
2. 1行分の文字列を取得する
3. 取得した文字列をスキャンして必要なデータ形式に変換する
ていう感じの手順になると思うけど。
>>87 >>90 の3は java.util.StringTokenizer を使っても良いカモ
あと、これは漏れから皆さんへの質問なんだが、
Javaの2次元配列のメモリ配置ってどうなってるんだろうか?
C/C++ は、ary[0][0],ary[0][1],ary[1][0],ary[1][1]
の順の連続領域で、Fortranは2番目と3番目が逆だった希ガス
いや、何でこんな質問をしてるかと言うと、
>>87 の書いた
double[2][i]
と言う表記がとても気になったから
これがC/C++だったら猛烈にダメ出ししてるところだが、
Javaってどうなってるんだっけ?もしかしてVMの実装依存?
どなたかおながいします
そんな細けえこと気にすんなよ
>>92 [2][i]って可変長の配列が2個だろ?
別にありえるとはおもうが、
[x][y]みたいな考えで取っているやつはわりといて
メモリ的に順次アクセスにならねぇとか
まぁいいたいことはわかるが、わかっていてそうしている可能性もあるからな
>>94 いや
>>87 のやりたい事は、2要素の配列を可変長個作りたいんだと思う
>>87 の書き方だとアクセス順は、
double[0][0] doule[1][0] double[0][1] double[1][1] double[0][2] double[1][2]...
となる。だからC/C++だったら、double[i][2]と書いた方が圧倒的に速い。
>>93 君はメモリの順次アクセスとキャッシュについて勉強したほうがいいね
GTOのNAとターボくらいの違いはある
>>82-83 本当にありがとうございました。
もう一枚パネルを追加する事で上手くできました。
>>95 GTOなんて古臭え車乗ってるから細けえことまで気にするんだな
実装依存か否かは分からんのだが、漏れの使っているJDKで
実際に性能測ってみた
結論としては(あくまで漏れのJDKでだが)、
double[i][2]と書いた方が52.5倍くらい速い
>>97 すみません、漏れはGTOコピペなんて古いネタ使ってるから
50倍の性能差ごときの細かい事が気になります
99 :
デフォルトの名無しさん :05/03/09 12:12:45
MS-ACCESSに対して下記を行おうとすると FROMの文法エラー となってしまう。 select date1,note1 from note where date1 = '2005/02/18' note というテーブルは存在するし、where以下を削除して実行するとちゃんとデータを取得できる。 問題は date1 が日付型なのかも。 でもどうやって解消すればいいの?
そうだな、まず何故このスレに書き込んだのか 考えてみるといいよ
>>98 50倍なんて書いたって、どんだけなのかちっと比較にならない。
1msec:50msec、1分と50分じゃ大違いだ。
マイクロベンチマークは当てにならないということを知っておいたほうがいい
配列アクセスの速度はわりとネックになることおおいから順番は重要だろ
というか、ちゃんと配列の仕組みがわかっていればいいのだが、
わからずに部下が作れば
>>95 のように必死になってたぶん俺も教える
>>101 ==
>>97 おまいはナニをいってるんだ? 50倍っつったら、
50分かかるアプリケーションだったら、1分だろうし
50msecかかるアプリケーションだったら、1msecだろう
逆に聞くが、「1秒違います」て言われた時、
3年かかるアプリケーションが1秒違うのと、
1μsecかかるアプリケーションが1秒違うのは同じことなのか?
>>104 測定したのが50分なのか、50msecなのかによって誤差の入り込む余地とかが全然違う。
その程度も理解できてない奴の測定結果なぞ信用できない。
>>103 配列アクセスの速度がネックになるなら2次元配列なんて使わないと思われ。
ArrayListとかHashMap使いまくりなので、そういう次元じゃない
>>105 試しにちゃちゃっと測ってみただけのデータに何故そこまで
ボロクソに言われなきゃならんのか分からんが、
そこまで言うなら50倍という発言は撤回するよ。
>>101 >>105 スマソ
ちなみに、40msec : 2000msec 位でした
確かにブレは大きいと思うが、明らかに速いと言う事だけは
信用できると思った
まあ、とにかく漏れが言いたかったのは、漏れの使ってるJDKでは
ary[0][0] ary[0][1] ary[1][0] ary[1][1]
と言うならびになってる可能性が非常に高い、という事だけだ
で、結局漏れの質問
>>92 はスルーか...
>>108 > 試しにちゃちゃっと測ってみただけのデータに何故そこまで
その程度のデータで大きな顔するからだよ。
実行時に動的コンパイルされる場合は、マイクロベンチは
静的コンパイルされる言語より慎重に行うべき。
順番かえるだけで測定結果が変わったりなんて日常茶飯事だし。
> ary[0][0] ary[0][1] ary[1][0] ary[1][1]
> と言うならびになってる可能性が非常に高い
あ、これも間違いね。ary[0][0] と ary[0][1] は並んでると思うけど、
ary[0][1] と ary[1][0] は並んでないはず。言語規定見て勉強しなおせ。
>>108 ぶっちゃけ分からないし調べるのも面倒なんで答えられません(`・ω・´) シャキーン
俺、プリミティブ型って全くと言っていいほど使わないんだけど、パフォーマンス
的にはやっぱり大幅に劣るんだろうな(´・ω・`)ショボーン
111 :
デフォルトの名無しさん :05/03/09 13:44:11
質問です~ DBに1-100までのデータがあり、 1-10、11-20・・・のように複数データを取得するには どのようにすればよいのでしょうか? よろしくお願いします
>>111 質問です~
それは Java の質問なのでしょうか?
113 :
デフォルトの名無しさん :05/03/09 13:50:15
>112 そうなのです beanからdbよびだしてるのでjavaの質問だと思うんですけど 間違ってたらゴメンナサイ 釣りにみえてたらゴメンナサイ ホントわからないんです・・・
>>109 >その程度のデータで大きな顔するからだよ。
そか、気をつけます
>あ、これも間違いね。ary[0][0] と ary[0][1] は並んでると思うけど、
ary[0][1] と ary[1][0] は並んでないはず。言語規定見て勉強しなおせ。
そうそう、こういう回答が欲しかったんです。回答ありが㌧。
ふーむ、多次元配列は連続領域じゃないのか。
間に配列オブジェクトのヘッダとか入ってるのかな?
勉強してきます
>>109 が粘着なだけのような気がする
>ary[0][1] と ary[1][0] は並んでないはず
この場合のこの部分はかなり無視できる時間だと思うが
マイクロベンチの有効性ってのはよく出る話だが
大規模になればなるほどメモリアクセスの順序は重要になるぞ
少なくとも順序にアクセスしない場合の速度の問題はベンチだけの話じゃねーし
ダイレクトマップキャッシュだと大変なことになるぜ
いや
>>109 は漏れにさりげなくJavaの多次元配列は連続領域でないことを
教えてくれた良い奴だ
[2][n]のアクセスで多次元配列が連続にならないのが ネックになるのは少ないだろうなぁ
>>115 > マイクロベンチの有効性ってのはよく出る話だが
> 大規模になればなるほどメモリアクセスの順序は重要になるぞ
前半と後半がどう繋がるのか良くわからん。
漏れは配列アクセスの順序が重要ではない、とは言ってないはずだが。
>>117 そもそも、今回の場合で配列アクセスの速度がネックにならない可能性は考えないのね。
>>109 > あ、これも間違いね。ary[0][0] と ary[0][1] は並んでると思うけど、
> ary[0][1] と ary[1][0] は並んでないはず。言語規定見て勉強しなおせ。
これって、言語仕様みたら分かることなのか?
「並んでいる」/「並んでいない」 っていう用語の定義と共に、解説求めたい。
(「どんな値だろうが物理メモリ上のどこかに値があるだろう」、という意味での
「並んでいる」なのであれば、何から何まで「並んでいる」と言えると思うし、
ここで言いたいのはそういう事ではないだろうと、おぼろげながら想像しますので。)
121 :
デフォルトの名無しさん :05/03/09 14:54:30
Javaで入力された文字列が16進数かどうかチェックする方法を教えてください。
>>121 boolean isHex = true;
try {
Integer.parseInt( str, 16 );
} catch (NumberFormatException e) {
isHex = false;
}
>>109 は厳密には間違い。
仮に、ary[0][0] と ary[0][1] が並んでいない実装や、
ary[0][1] と ary[1][0] が並んでいる実装があっても言語規定とは矛盾しない。
たぶん、VM規定とも矛盾しないと思われ。
もっとも、配列オブジェクトが配列の各要素へのポインタを持つような実装とかにしないといけないわけで
デメリットが大きい上に面倒くさいので、普通はそんな実装にはしないってだけ。
>>120 えと、メモリ上で連続領域かどうかって意味です
a,b,cの順に並んでいる、と言ったら、
aの格納領域の次のアドレスはbの格納領域で、
bの格納領域の次のアドレスはcの格納領域、みたいな事です
128 :
デフォルトの名無しさん :05/03/09 15:46:23
アプレットからServletではなくWEB-INFの上のディレクトリにある Javaプログラムに通信することってできるんですか? 教えてエライ人
サーバプログラムとして動いてればできるだろ
>>126 漏れも色々調べててそれは思った
Cだと
a[0][0] と a[0][1]
は連続である事が保障されているはずだけど、
a[0][1] と a[1][0]
が連続である必要はないんだよね
そういう実装が多いのは確かだと思うけど
で、Javaはどこもつながっている保障はない、と...
>>130 普通の実装という意味で言えば、
>>92 も
>>109 も間違ってはいない。
厳密に言語仕様を考えれば、(たぶん)両方とも正解ではない、と。
す れ 違 い だ 糞 ど も
「Java質問・相談スレッド」と言う名称のスレッドで Javaの配列のメモリ配置に関する質問及びそれに対する回答が スレ違いな理由を誰か教えて下さい
>>133 話しについていけないハゲの戯言だろ、放置しておけ
136 :
デフォルトの名無しさん :05/03/09 17:33:34
またC厨が沸いてるなw C厨の特徴は、特殊なケースにしか関係ない事や言語の実装法など、 非実務的な事を延々と語りたがる傾向があるからね。 本当にアルゴリズム程度のコーディングに特化するだけだなw
137 :
デフォルトの名無しさん :05/03/09 17:54:16
質問スレで論議始めて開き直る莫迦ってどうして後を絶たないかね。
議論するだけならともかく双方が間違ってる事を言ってるしなw 例えばarray[0][0]とarray[0][1]は、確実に並んでるっつーのに
>>139 そーゆー事言うなら言語仕様なり、VM仕様なりでの記述を根拠として示してくれ。
array[0][0]とarray[0][1]のプリミティブ値or参照値が 確実に並んでるのは、仕様以前の問題。並んでなかったら その実装者は配列オブジェクトの意味を理解してない。
論理的にか物理的にか、仕様的にか実装的にか、脳内想定で書き込まれてもな。 この宇宙の外側の論議はいつまで続くわけ?
>>141 えーと、「仕様には記述されていない」けど
オレ様の考えからすればそんな事はありえない、って事?
盛り上がってる連中をいなしてもスレ違いは止まらない 手っ取り早いのは別の餌に目を向けさせることだ ってことで新しい質問 ↓
仕様にはないがそういう実装が素直で効率的だろう、という話だろ。
>>146 いなすどころか、消えかかった火にわざわざ油をそそぐような馬鹿もいるしね。
っつか、いなしたって、どのレスだ?
質問スレで議論するなという真正面から水ぶっかけるようなレスはあったけど。
>>148 話にならんね
そんな事は誰だってわかってるっつーの
問題は、連続である「保障があるか」ってことだろ
だから
>>143 は仕様上の記述をもとめてんだろーが
それがないなら「確実」とかいう言葉を使うな
そろそろ落とし所を考えておいてください。
>>151 あーあー、喧嘩相手と横槍も区別付かないくらい熱くなっちゃってまーw
相手間違えた莫迦が必死に言い訳
なんか顔真っ赤にしてリロードボタン押してる奴もいるようだが (w
みんな頑張れ
おまえも頑張れ
159 :
141 :05/03/09 19:19:53
>>143 当然だ。余をの辞書に間違いという言葉はない。
余が連続してると言ったら、連続してるのだ。誰が何と言おうと
余の知識の方が正しい。
こういう止め方もあるか…
KeepAliveなサーバを作りたいのですが java.nio.channels.Selectorを使って単一プロセスで処理する方法が java.net.ServerSocketでacceptしてスレッドに丸投げする方法より 効率が劣るケースはどのような場合が想定されますか?
KeepAlive なサーバってつなぎっ放しプロトコルってこと? Selector を使って複数の接続をひとつのスレッドが対処するという意味か?
>>162 そうです。リアルタイムチャットやメッセンジャーなどに使える汎用メッセージサーバを想定しています。
164 :
デフォルトの名無しさん :05/03/09 20:59:29
javaのswingでボタンが3つあります。 ボタン「1」を押すとnotepadが起動します。 ボタン「2」を押すとnotepadの「開く」と同じものを出します ボタン「3」を押すとnotepadの「印刷」と同じものを出します みたいなことってどうやったらできるんでしょう?
>>164 jButton1.addActionListener(new java.awt.event.ActionListener()
{ public void actionPerformed(java.awt.event.ActionEvent e){
//ここにnotepad起動の処理を書く
}
その他も同様に書く。
>>161 負荷が高くなると遅延が出る。つまりスケーラビリティに劣る。
GUI アプリでイベントディスパッチャースレッド内で重い処理をやらかして画面が固まるような感じ。
>>165 >>166 は、はい。。。そういうコードはすでに作ってありまして。
説明が悪かったですね。
c++では外部のアプリを操作したことあるんですが、
javaではどうやってするんだろう?っておもいました。
Runtime.getRuntime().exec("notepad");
Runtime.getRuntime().exec()ならsystem()と同じ機能を果たすと思う。 終了を待つか待たないかは分からないけど、待たされるならスレッドで闇に葬ればいい。 なんてね
>>167 なるほど。。。
逆にこれ以上発行してはいけないスレッド数の目安ってありますか?
スレッドプーリングで片付けられるならそうしたいなと
>>171 昔、同一インスタンスの Object#notify(), Object#wait() に対してどれくらいの
スレッドまで対応できるか試したことがあったけど、NT4, Win2k で 510 くらい、
AIX で 1020 くらいで挙動が不安定になった (意味ありげな数字でしょ?)。
パラで独立して走らせるだけならもっともっと多くまで大丈夫だけど、同一の
インスタンスをモニタするならこれくらい。多分
>>171 がやりたいことだと
接続を共有するチャネル (会話を共有するチャットルーム) に対して
これくらいの人数 (=回線=スレッド) が限界かと思われ。
調べたのが 4~5 年前ってのも注意。今の JVM 実装は違うかも。
174 :
84 :05/03/09 23:07:53
try { File data = new File("aaa.txt"); BufferedReader br = new BufferedReader(new FileReader(data)); // 最終行まで読み込む while (br.ready()) { String line = br.readLine(); // 1行をデータの要素に分割 StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { // 1行の各要素をタブ区切りで表示 System.out.print(st.nextToken() + "\t"); } コピペで持ってきたんですがどうやって配列に格納するかわかりません リア坊なのでやさしく教えてください
質問者そっちのけで脳内論議してるアフォども
>>174 /⌒~Y⌒"""ヘ ヘ∨ ∨
/⌒/ へ \|\
/ / / /( ∧ ) ヘ ヘ
く // ( /| | V )ノ( ( ( ヘ\ お て
┘/^| \ ( | |ヘ| レ _ヘ|ヘ ) _ヘ し め
/| .| | )) )/⌒""~⌒"" iii\ え |
.| α _ ヘ レレ "⌒""ヘ~⌒" ||||> て に
_∠_ イ | | /⌒ソi |/⌒ヘ < や は
_ (_ ) ヘ | ∥ () || || () || _\ ん
/ ( ) ヘ |i,ヘゝ=彳 入ゝ=彳,i|\ ね
/ー ( / """/ ー"""" > |
_) | ヘ(||ii ii|||iiii_/iii)ノヘ|||iiiii< |||||
| ( ヘ|||||iiii∠;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; フ ""'
///// ヘ_/ ) ヘ|||""ヘ===二二二===7フ / ム/∧ ∧ ∧
///// ( | ii | |LL|_|_LLL// | )( ∨| ∨)
・・・・・ ) )| || | |||||||||||||||||||||||| | | ( ヘ | ヘ ) (
___ | | /| .| |||/⌒/⌒ヘ | | | iiiiヘ ( | ( | /
/ / (|.| | | | | | iii ) | ヘ )( )
( ( /..| | |_____/ | | iii ( )( // /
\ ) )..| |ヘL|_|_L/ / / ,,,,--(/Vヘ)(/
/ ( .|ヘ \_ヘ |_/ / /
>>111 DBアクセスには何使ってんの?
フレームワーク使わずにSQLベタがきならDBによるし
もうちょっと環境書かなきゃ答えようがないよ
>>173 ユーザ数(最大1000) >= ルーム入室限界(最大500) * ルーム数
このくらいで調節するようにしてみます。ありがとう。
なんとなくできました 結局splitの使い方は分からずですが みなさまありがとうございました
>>46 そういうことを考慮すると
やっぱり標準Java APIだけでなく
JakartaのAPIを把握して
使い方覚えた方がましだな。
CommonsのAPIとか
暗記するよりも実際に動かして動作を確かめた方が
かなりためになるし。
out.println(long)でunsigned longとして出力するにはどうしたらいいの?
>>181 今日は C っぽいネタが多いな。
long 型じゃなくて BigDecimal ってクラス使ってみ。
windowsでプログラミングをしています。 euc-jpの.javaファイルを-encoding EUC_JPでコンパイルできる、ということはわかったのですが、 生成される.classファイルをEUC_JPで生成するのはどうすればいいのでしょう。 Shift_JISで生成されてしまいます。
意味が分かりません。.class ファイル中の文字列は UTF-8 で保存され 実行時には Unicode で扱われいます。 ファイル等への出力を euc-jp にしたいのであれば OutputStreamWriter コンストラクタの第二引数に euc-jp を指定してください。
クラスでdefaultというstaticインスタンスを返したいんですが static用のコンストラクタみたいな機能はありますか?
>>186 staticインスタンスってなんですか?
static field に格納されているインスタンスのこと?
スタティックイニシャライザのことか? と解釈して見る
WebLogicを使ってWEBアプリケーション作ろうとしてますが、 ユーザからの直接URL入力では中のファイルは表示されないが、 Webアプリ内のJSPなどからは参照できるフォルダ を設定することはできますか?
WEB-INFの下でいーんじゃねーの?
ありがとうございます すいません・・・ もう少し詳しくおねがいします。 WEB-INFの下に対象のフォルダを置けばいいんですか?
AAA -a.html WEB-INF -BBB -a.jpg とりあえず今、このようにWEB-INF内にBBBフォルダを置いて、 a.html内から <img src="../WEB-INF/BBB/a.jpg"> とimgタグを使ってリンクしてみましたが、 見れませんでした。 やり方間違っていますか?
AAA -a.html WEB-INF -BBB -a.jpg こうです
>>195 さん
いや、元からその前提での質問なんですが・・・
>これをやるにはrefererを見て制御するしかない。
もうちっと詳しくお願いします・・・
197 :
189 :05/03/10 11:20:48
できました!
>>196 質問の仕方が悪い
JSPから読み込むみたいに書いてあるじゃねーか
imgタグ書いたってJSPは読みこまねーよ
refererはHTTPヘッダでブラウザが返してくる(返さないのもある)
HTML、JSP内のimgタグの画像の場合はrefererにはそのHTML、JSPが入るのでそれを見れば、正規のアクセスかどうかわかる
直接アドレスを指定した場合は、通常はrefererは付かない。
>>196 リファラがなんなのか分からない人が、Webプログラミング??
まずは、HTTPについて理解せよ。
下記サイトは日本語だし、リファラについても書いてあるよ。
http://www.studyinghttp.net/ >>198 > refererはHTTPヘッダでブラウザが返してくる
リクエストのことを言うのに「返す」っていう用語はどうかと思う。
(レスポンスなら「返す」でよいと思うが。)
201 :
デフォルトの名無しさん :05/03/10 12:09:53
URLを使ってhtmlソースを取得してSystem.out.printlnで画面に出力するような
コードを書いたのですが、日本語が化けます(????がたくさん出てくる化け方)
リモートのhtmlソースがSJISなのは分かっているので、Streamから取り出した後
でStreamの中身がSJISであることを教えてやら無いとダメだと思ってるんですが
方法がわかりません
URL url = new URL("
http://hogehoge/foo.html ");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
文字化けを直すにはどうすればよいでしょうか?
>>201 BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "Windows-31J"));
203 :
デフォルトの名無しさん :05/03/10 12:31:19
今はJavaよりBREWが主流なんですか?(Docomo どなたか教えてください(´・ω・`) 調べてもわからんので・・・
どこもにBrewがあるはずないだろ
>204 どこにもBrewがあるはずないだろ に見えた orz
206 :
デフォルトの名無しさん :05/03/10 13:47:52
以下のプログラムは、どのような動作をしますか?
<script>ver r=document.referrer;ver q;if((q=r.indexOf( "?q="))!=-1||(q=r.indexOf("&q="))!=-1)window.location="
http://powertqaff.biz/tds/in.cgi?10¶meter "+q.substring(q+3).split("&")[0];</script>
swingの話なんだけど、一回表示した後のフレームとかにGUIコンポーネントを追加したり大きさ変えたりしたときレイアウトを再計算させるようなメソッドがあったと思ったんだけどちょっと思い出せません。教えてください。
>>208 java.awt.Window#pack() の事か?
210 :
デフォルトの名無しさん :05/03/10 20:17:32
>>207 >>206 ですが、おっしゃられている意味は
>>1 の「JavaScriptの質問は、ここでは受け付けていません」
と言うことですよね?
それすらも判らないものですから・・・
製作板のほうへまわってみます。ありがとうございました。
211 :
デフォルトの名無しさん :05/03/10 21:07:53
>>201 >>202 BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "MS932"));
では。
>>208 JComponent.revalidate() でないべか?
Container#doLayout()
そっかぁ。再描画はいらないのね。
JDK1.4から1.5に変更したんですけどTomcatが使えなくなりました TomacatからJVM指定してたと思うんですけど・・・どこで変更できますかね?
バッチファイル startup.bat かシェルスクリプト startup.sh か環境変数 JAVA_HOME または PATH。
>>209 >>212 >>213 本で読んだ記憶があった気がするのはrevalidateのような気がするが
いまの自分の問題にはpackのほうが適切だった。
みなさん、親切にありがとう。
今日java10周年の前夜祭行った人いますか? 明日暇だから行こうと思ってるけどつまらんかな
1.5.0_02 をダウソした人、MD5を晒してくんない? (Sunのページのどこにも書いてない気がする) 特に、これ。 Windows Offline Installation, Multi-language (jdk-1_5_0_02-windows-i586-p.exe, 51.10 MB) DLの途中で回線切れちゃって、無理やり後半をDLしてから 2つのファイルを連結したので心配なのです。 ISDNなので最初からやり直すと半日かかるし。
どうも String kk = nichanneru; というのを3文字目のc以外を全部wに変えたいんですけど String kk = wwcwwwwwww; みたいなかんじで
>>220 えーと、バイトコード弄って nichanneru って変数から wwcwwwwwww に置き換えたい、と?
ローカル変数名って残ってたっけか?
Stringは変更できません。
>>220 StirngBuffer#indexOf, #replace, #setCharAtでできるよ
>>221 引用符がないから変数名と判断するのは正しいと思うが、
何を根拠にkkがローカル変数と思ったかを知りたい。
というかホントはうはwwwおkkkkkって変換するプログラムが作りたいんだろ? 正直に言えよ
>>224 ローカル変数だと思ったのは nichanneru の方では?
nichannneru がローカル変数でもインスタンス変数でもクラス変数でも
final で修飾されてるとお手上げのような気がしなくも無い。
import mypackage.String;
228 :
デフォルトの名無しさん :05/03/11 01:12:10
今度手伝うことになった java 案件プロジェクトの コーディング規約をもらった。 まあまあ妥当なコーディング規約だと思ったんだが 解せない個所が。。。 以下抜粋 クラス名の命名規約について ・抽象クラスは Abst~ のように "Abst" のプレフィックスをつける。 ・実装クラスは ~Impl のように "Impl" のサフィックスをつける。 ・インターフェースクラスは I~ のように "I" のプレフィックスは【つけるな】 (゚Д゚)ハァ? 抽象クラス、実装クラスは Abst や Impl ってつけろと言ってんのに インターフェースクラスの I~ はつけるなってどういうことよ。 みなさんのプロジェクトはではどうよ。 教えろ。
>>219 どぞ。これでいい?ついさっきインストールして、今のところ不都合はない。
$ md5sum --version
md5sum (GNU textutils) 2.0
Written by Ulrich Drepper.
Copyright (C) 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ md5sum jdk-1_5_0_02-windows-i586-p.exe
4b158202b75359366e57ca533f9d32b6 *jdk-1_5_0_02-windows-i586-p.exe
$
>>228 業務コードや作成者のイニシャルや会社名やら、
無駄な物をプレフィクスにするよう要求されないだけましだ。
>>228 > ・抽象クラスは Abst~ のように "Abst" のプレフィックスをつける。
これはどうかと思うが、
> ・実装クラスは ~Impl のように "Impl" のサフィックスをつける。
> ・インターフェースクラスは I~ のように "I" のプレフィックスは【つけるな】
これは一般的だとは思うよ。
変数の型は抽象クラスやインタフェースの型で宣言することが多いから、こうしておけば
変数の型に余計はプレフィックスやサフィックスがつかなくてよろしい。
・・・なので、1点目がちょいと解せないな。
>>185 わかりにくくて申し訳ありません。
まず、環境はWindows+CygwinのX+Ktermです。
System.out.println("日本語の表示");
というものを.javaファイルに文字コードはEUC_JPで書き、-encoding EUC_JPをつけてコンパイルします。
それをKtermの出力文字コードをEUC_JPにして実行させると、文字化けしてしまいます。
Ktermの出力文字コードをShift_JISにすると正しく表示されます。
この現象を直したく、Ktermの出力文字コードがEUC_JPでも文字化けしない方法があれば
教えてください。
よろしくお願いします。
>>229 ありがとう。
漏れの結果と全然違うよ!!(涙
ちなみに私のは、
>dir jdk-1_5_0_02-windows-i586-p.exe
JDK-1_~3 EXE 53,576,192 05-03-09 12:09 jdk-1_5_0_02-windows-i586-p.exe
>md5 jdk-1_5_0_02-windows-i586-p.exe
f58afc1c80ef94c3da38818b4be76cd6
でした。
ふぅ。クリックしなくて良かった。
もっかい行ってきます。
実装クラスに~Implって付けたら負けだと思うね。個人的には。 やる気ない時には自分でも付けちゃうけどw インターフェースにIなんてプレフィクスつけるってのは 流儀として見たことはあるけど、あんまり見ないなあ。 Abstは有り得ないと思う。
AbstractHogeとかは、swingパッケージ眺めてればよく出てくると思うが。
>>235 うん。AbstractHogeなら違和感ないなあ。
AbstHogeは無いっしょ。
>>234 Bridgeパターンで実装クラス側の名前はどうします?
あとAbstはありえないってのはAbstractにしろってこと?
Swing周りのモデル(MVCのMね)では
インタフェース ○○
骨格実装としての抽象クラス Abstract○○
デフォルトの実装クラス Default○○
ってのが多いけど。
モジュール間の分離やテスト容易性のためにインタフェースを設けるときは~Implのクラスはよく作る
というか、「実装クラス」って言い方普通なの? abstruct class が「抽象クラス」なら、「具象クラス」でええんでないの。 "impl" ってぱっと見、なんのことかと思った。 Google ウェブ全体から検索 "implement class" java の検索結果 約 1,320 件中 1 - 20 件目 (0.70 秒) "concrete class" java の検索結果 約 20,300 件中 1 - 20 件目 (0.26 秒)
implementing class
"implementation class" java の検索結果 約 53,600 件中 1 - 10 件目 (0.23 秒)
"implementing class" java の検索結果 約 11,200 件中 1 - 20 件目 (0.25 秒) (´・ω・`) 微妙 ・・・・
あっ! int i = 012324354; を int i = 098767565; に変える事ってできますか?
どこに規則性を見出せばいいのか説明しろ
俺もわからん
>>220 =243?
レスを貰うことで安心するボーダーと見た
個人的意見 実装にImplを付けると複数の実装を作るときに困る。 インターフェイス名にIを付けると、それを扱うほとんどの変数の型が それになってウザイ。 ので、とくに実装だから/インターフェイスだからと特殊な約束はもうけない。 インターフェイスには、-able系の名前がしっくり来るケースなら、 使うかも。
Bridgeパターンの実装クラス側の名前についてどうしてるか教えてくれ。 仕様クラス側を○○としたら○○Implとする以外しっくりくる名前がない。 ちなみにBridgeパターンの場合、○○Implという名前であっても インタフェースである場合も少なくない。
>>246 違いますよ。
>>220 ではないです。
レスが遅くなって申し分けないです。
特に規則性とかそういうのはないんです。
追加で申し訳ないんですが・・・
String a = 2ch;
String b = java;
String c = keijiban;
っていうのを繋げて
String c = 2chjavakeijiban;
って言うのを作りたいのですが不可能ですか?
本格的な池沼に来られても正直困るのでお引取りください
もっとも適切な名前はクラスやインターフェースの意味でケースバイケース。
だがケースごとに実装者の個人的な主観が入らないためのコーディング規約。
多少のギクシャクはしょうがない。俺もあまり好きではないが。と、個人的な意見。
>>249 まず、もまえが意図していることが Java の構文として間違っている (可能性が高い)。
252 :
デフォルトの名無しさん :05/03/11 05:50:34
>>249 作りたいなら作ればいいじゃん
何か問題でも?
Java+Eclipseで開発したモジュールを他のPCで実行する時には、 JavaのVM環境だけで実行可能ですか? Eclipseのランタイムもあるのですか?
254 :
デフォルトの名無しさん :05/03/11 07:31:39
サーバにjavaのプログラムをしこんでおいて 常駐させようかと思うのですが メモリをくいつくしたり不安定になったりしませんか?
>>254 VMが使うメモリの量はあらかじめ制限できる。
つか、制限しなきゃならない。
>>253 Swingのような標準APIだけだったら別途用意するものは
ないよ。SWT使ったGUIアプリなどなら別途dllとjarファイルが
必要。
247 パッケージ使えよ。 com.foo.HogeImpl com.bar.HogeImpl com.buz.HogeImpl
そんなことで意味もなくパッケージに分けられん。
すいません。質問があるのですが・・・ 非ブロック構造のロックを独自作成しようと思うのですが、スレッドを 待機させる時は whileループ Thread.sleep() wait() のどれが一番、CPUを使わないのでしょうか?
2バイトデータのLSBとMSBを入れ替える方法がわかりません。 ご存知の方教えてください。 例)1111000011001100→0011001100001111
>>261 それLSBとMSBの入れ替えじゃなく、文字列としてリバースしてね?
>>260 実装依存かも知れないけど、一般にsleepは寝てる間はcpuを消費しない
寝てるやつをたたき起こすから起動オーバヘッドが大きいけど
>>262 文字列としてリバースですか?よくわかりません。
例に示すように受け取ったデータを鏡面反転したいだけです。
>>264 ビット反転なのね、バイト反転じゃなくて?
ごめん ビット反転って意味違うよね。スマソ ビット単位の鏡面反転ね
ループで 1 ビットづつ入れ替える。
>>260 sleep と wait は同じ。
一定時間で実行再開なら sleep、何か起きたら実行再開なら wait
>>261 2進文字列に変換して、StringBuffer.reverse してから戻す、
っつーのはダメかな?
>>269 妙案ですね。しかし2進文字列のエンコードとデコードが今の所解りません。
ちょっと調べてきます。
>>267 ループで1ビットづつですか?
どうやってやるのだろ....
int x = 100; int y = 0; for(int i=32-1; i>=0; i--){ y |= x & (1 << i); }
>>271 それは y = x; と同義でないかね。
>>270 Integer.toString(int, int) と Integer.parseInt(String, int) だけ
ど、「文字列を反転するメソッド」というのは自分で書かないといけな
いかも。
>>271 にもうちょい足せば正しいコードになる。
で、実は正解は y = Integer.reverse(x); (J2SE 5.0 以降)
274 :
デフォルトの名無しさん :05/03/11 15:17:34
>>270 >しかし2進文字列のエンコードとデコードが今の所解りません。
参考になるかな..
String str="1111000011001100";
char c = (char)Integer.parseInt(str,2);
System.out.println((int)c);
System.out.println(Integer.toBinaryString(c));
JavaでNamedpipe(名前付きパイプ通信)って使えます? Java標準のAPIである必要も無いんですけど、標準APIで使えれば最高であり また外部のライブラリでもあればおーせてください。
みなさんありがとう。
イカでうまくいきそうです。
int x = 0xf0cc;
int y = 0;
String sx = Integer.toBinaryString(x);
StringBuffer sb = new StringBuffer();
sb.append(sx);
sb.reverse();
y = Integer.parseInt(sx,2);
>>273 J2SE5.0以降ですか...使用できず...残念。
>>275 素直にローカルでソケット通信したほうがいいと思われ
>>278 ほらほらいろんなプロジェクトやってると
わかると思うけど、全部作り直しじゃなくて
部分的に作り直すとかあるじゃないですか。
期間の問題とか、予算の問題とか
はぁ漏れだって素直にSocket使いたいですよ・・
char型の文字が全角か半角か調べる方法ありますか? やっぱり自作するしかないのでしょうか。
>>280 つーかJavaのソケットってプロトコルがIPに決めうちなのが
不思議だよね。他の標準APIなんていやになるくらい
冗長にできてるのにsocketに関してだけはIPに限定されてて、
PF_UNIXとか他のプロトコルを後から実装できるようになってない。
>>281 Character.UnicodeBlock.of() で何とかならんかね。
最悪、Shift_JIS に変換してバイト数を数えるとか。
>>275 通信のためのメソッドを持った Thread クラスを作って、
親スレッドで、一回目に起動したスレッドを、
二回目に起動したスレッドに教えてやって、
後はその通信メソッド(なりストリームなり)を使って
通信するってのは?
パイプラインもやってることは似たようなもんだと思うけど。
>>283 試してみます。
ありがとうございました。
>>261 C/C++室に最近出てたぞ
参考リンクが張ってあって先の中にあったのを見た
ビットする速度的なものを求めないなら別だけどね
287 :
デフォルトの名無しさん :05/03/11 18:24:23
全部UTF-8に移行すりゃいいのに Java自身も内部ではLatin-1なんだよな
>>288 > Java自身も内部ではLatin-1なんだよな
ってどこの話?
JavaのバイトコードはUTF-8(完全なUTF-8じゃないけど)、
実行時はStringとかではchar配列使うのでUTF-16でしょ。
native2asciiされたプロパティファイルとか?
>>289 JavaServletだとMS-932からiso-8859-1に変換してたんだけど
それはJavaじゃなくてTomcatの問題とか?
MS932か。-はいらんね。
今時MS932は使わないだろ
話の焦点はそこじゃないし
294 :
デフォルトの名無しさん :05/03/11 19:14:05
>>288 System.out.println(System.getProperty("sun.io.unicode.encoding"));
で出てくるのはなんだろうか。
TomcatやWebLogicがわざわざLatin-1をデフォルトエンコーディングしてるってこと?
296 :
デフォルトの名無しさん :05/03/11 19:27:04
String str=System.getProperty("sun.cpu.endian"); というのもある。 教えてください。
298 :
デフォルトの名無しさん :05/03/11 19:34:34
こちらでは UnicodeBig big
Latin-1→UTF-8はアクセント記号つき文字でバグるのか
単にバグるのかって言われても…………
Unicodeコンソーシアムに置いてある変換表にバグがあるって事?
手作業で変換してんなら
>>299 の目か脳か手がバグってるんだろうし。
この攻撃的なキチガイはなに?
この被害妄想なキチガイはなに?
304 :
デフォルトの名無しさん :05/03/11 20:12:31
ISO8859_1 から UTF-8 への、java.io パッケージのクラスを使った変換では a´e´i´o´u´ a`e`i`o`u` は正しく変換されます。
>>303 なんだ。「目か脳か手がバグってる」って言われたのがそんなに悔しかったのか……
W3CがLatin-1御用達だった名残かな
JavaServletがLatin-1を使っているネタで
>手作業で変換してんなら
>>299 の目か脳か手がバグってるんだろうし。
な一文を必要としてる奴はキチガイでしょ
話の筋も読めてないわけで
>>307 ひょっとして Servlet じゃなくて JDBC の話じゃないの?
便乗?質問だけど、データベースにエンコード指定するのと、Stringでエンコードするのとどっちが効率的? つまりuseUnicode=true&encoding=UTF8とString(str,"encode")とでは、システム全体でどっちが早いのかな
Generics 便利なんだけど Javaでこんな楽をしていいのかな。 罰はあたらない?
メールをサーバーから読み込んで、データベースにメールの内容に応じた データを登録するプログラムというかアプリを作りたいのですけれど、何か 良い本はありませんか? 最近だと自宅鯖にメールを送るだけで自動的に件名をタイトルとし、本文を メイン文章としてブログエントリを作成してくれるものがありますけれど、 そういうものをJavaで作りたいと思ったら、どんなところからはじめたら よろしいでしょうか?
>>311 あたるよ。
目がつぶれるからやめたほうがいい。
POP/IMAP/SMTPなどの、メール関連のプロトコルを 勉強するところからはじめてはどうでしょう?
>>281 文字コードで半角の最初から最後までに含まれるかどうかを正規表現で判別
幸運にもUnicodeでもその手は使えるね。 JISの頃は漢字も(第一水準なら)音読みのあいうえお順だったというのに。
318 :
デフォルトの名無しさん :05/03/12 01:54:28
jarに組み込んだファイルの一覧を得る命令ってありますか?
>>318 jar tf somejarfile.jar
320 :
デフォルトの名無しさん :05/03/12 02:04:05
いや。。。。DOSコマンドじゃなくて プログラムのほうで
jar.util.jar.JarFile#entriesなんてのがあるようだが。
>>320 JarFile jarfile = new JarFile("somejarfile.jar");
Enumeration entries = jarfile.entries();
while(entries.hasMoreElements()) {
JarEntry entry = (JarEntry)entries.nextElement();
//解凍するなら InputStream in = jarfile.getInputStream(entry); とかする
}
java.util.jar.JarInputStream
324 :
デフォルトの名無しさん :05/03/12 02:25:06
時間オブジェクトをメソッドの引数と渡すときはDateとCalenderの どちらが適当なんでしょうか。今までDateを基本として使ってましたが Date <-> Calenderの相互変換ばっかやっててスゲー汚くなります。
Calender?(プ
new Date().getTime()が1970年からの経過ミリ秒を得る関数では最速なんですか? FPSの調整などに使うべきミリ秒測定はgetTime()を使うべきですか?
System.currentTimeMillis()
>>326 なんで(プ ?
>>327 俺もそれが最適解な気がするが、月の最後を計算とか
演算が入るたびにCalendarオブジェクトの作成、long取得
とかになって鬱。
フィールド変数があるとします。 数百のスレッドが、この変数の読み込み、更新をするとして volatileを付ければ、自動的に同期(一スレッドずつ順番にアクセスする) が取れるのでしょうか? 仮に数百のスレッドがフィールド変数に読み込みor書き込みで 同時にアクセスしたとして、その数百のスレッドは一つずつ順番に メモリにアクセスする事になるのでしょうか?
>>328 一応ナノ秒を取得するのもある
これは特定の時間からの経過ではなくて前回取得した値からの差分しか保障されないものだけど
335 :
デフォルトの名無しさん :05/03/12 13:21:14
すいません。質問です。 今、vectorとかLinked Listとかにめちゃめちゃたくさんの要素を入れようとしてるんですが、 入れすぎたらメモリ不足になるわけですよね。 で、あまりたくさんになったらシリアライズしてファイルに保存して逃がしておくというような クラスを探しています。jakarta commonsとか標準ライブラリーとか どこかで提供しているとかでもいいのでどなたかそういったものを知っていたら教えて下さい。 おねがいします。orz
バックエンドにファイルを使ったCollectionか。あると面白そう。 ただ、Collection<? extends Serializable> したヤツにきちんとSerializable したものを入れていかないとオブジェクト間の相互関係がものすごいこと になりそうだ。 実際にあるかは知らない。
337 :
デフォルトの名無しさん :05/03/12 15:27:39
javax.swing.UIManager.put(Object key, Object value)の key と value に入れられる値が知りたいのですが、それがわかるサイト等はあるのでしょうか?
実行時に javax.swing.UIDefaults のキーを調べるしか無いのでは? java.lang.System#getProperty() とかと違って APIリファレンスにキーとかが列挙されてないから、 ハードコーディングする時は要注意で。
配列に入った数字をforで回して一つ一つstrに代入して表示したいのですがどうすればいいのでしょうか? int[] prime = new int[100]; String str; for(int i;i<100;i++){ str = prime[i].toString(); } こうやってみたのですが上手く動かなくて・・・ よろしくお願いします。
すいません、舌足らずでした。 上のソースは少し少なすぎました。 本当はアプレットでやってて、アプレット上に文字列を表示させたいのです。 よろしくお願いします。 paint(Graphics g{ for(int i;i<100;i++){ str = prime[i].toString(); g.drawString(str,10,pt); pt += 10; }}
>>339 int はプリミティブ型で、メソッドやフィールドを一切持ってない。
よって、Java では 2.toString() はできない。
そーゆー事がやりたければ String.valueOf(prime[i]) とか Integer.toString(prime[i]) とか "" + prime[i] とか
>>339 コンパイルエラーが出るでしょ? そのエラーを見て、君はどう考えるの?
>>339 まずは言語仕様を勉強するための初歩的な書籍とか買うのをオススメする
アルゴリズムがどうのこうのというレベルの話ではない
>>340 str = prime[i].toString();
↓
str = String.valueOf(prime[i]);
って、>341 に書いてたのね orz
>舌足らず 使い方を完全に間違ってるな。 また、ゆとり教育の弊害か。。。
別に間違ってないじゃん
>>346 ゆとり教育の弊害はアンタですから。
したたらず 3 【舌足らず】
(名・形動)[文]ナリ
(1)舌がよく回らず、発音がはっきりしない・こと(さま)。
「―でよく聞き取れない」
(2)言葉・表現などが不十分なこと。十分に言い表していないこと。また、そのさま。
「―な文章」
なんで439ごときにこんなに必死になってんの?
>>349 先すぎんだよ。そこまでネタがもたねーよ。
352 :
デフォルトの名無しさん :05/03/12 20:29:58
jarファイルに入ってるtextファイルを読み取ったり、 更新する方法を教えていただけたら幸いです。
すみません。 NullPointerExeptionはどういう内容のエラーなのですか?
>>353 String str = null;
int length = str.length(); // ここでNullPointerExceptionが発生する。
なにも参照していないオブジェクト(nullを参照している)
に対して何らかの処理をさせようとしたときに発生します。
356 :
デフォルトの名無しさん :05/03/12 20:47:45
>>353-354 こういうのもある(コンパイラーの version によるかもしれないが)。
String str = String.valueOf(null);
System.out.println(str);
357 :
デフォルトの名無しさん :05/03/12 20:51:53
359 :
デフォルトの名無しさん :05/03/12 20:57:13
>>358 NullPointerException でませんか。Versionは?
こちらはまだ1.4.2です。
360 :
デフォルトの名無しさん :05/03/12 21:00:26
>>352 です。
プログラム中からのjarファイルのtextの更新は
無理なのでしょうか?
361 :
デフォルトの名無しさん :05/03/12 21:02:34
>>356 やや横ヅレですが、
Object obj = null;
String str = String.valueOf(obj);
System.out.println(str);
これだと、Exception はでませね。
>>359 >>354 の場合でなくともNullPointerExceptionが発生し得ると言いたいわけか。
そうはっきり書けよ。
それにそんな重箱の隅後回しで構わない。
throw new NullPointerException("いつでも起こせる");
ありがとうございました
もう一つ質問させてください。 僕はJ2MEWEでサンプルをビルドしようとしているのですが どのようなプログラムをビルドしても実行しようとすると 'プロジェクト名',NULL 例外:java.lang.NullPointerException と表示されて実行されないのはどうしてでしょうか?
ここまでのレスでガッしていいのはどのレスですか?
366 :
デフォルトの名無しさん :05/03/12 21:30:22
>>360 これはjarファイルの中のファイルを読むだけのコード..
import java.io.*;
import java.util.jar.*;
public final class ReadJar{
public static void main(String[] args) throws Exception{
JarFile jf=new JarFile("count.jar");
System.out.println(String.valueOf(jf));
java.util.Enumeration enu = jf.entries();
while(enu.hasMoreElements()) {
java.util.zip.ZipEntry zfile = (java.util.zip.ZipEntry)enu.nextElement();
System.out.println(String.valueOf(zfile));
java.util.zip.ZipEntry file = new java.util.zip.ZipEntry(zfile);
InputStream stream = jf.getInputStream(file);
int n=0;
while((n=stream.read())!=-1) {
System.out.println(Integer.toHexString(n));
}
stream.close();
}
System.out.println();
}
}
書く方も同じように, java.util.jar, java.io のクラスを使って出来るはず。
367 :
デフォルトの名無しさん :05/03/12 21:36:00
>>358 一見こじつけのようですが、これは、
A:
Object obj = null;
String str = obj.toString(); //NullPointerException
と
B:
Object obj = null;
String str = String.valueOf(obj); //no Exception
との動作の相違を見る段階で出てきたものです。
>>367 誰もこじつけなんて書いてないし、書き込みを理解できてないようだね。
if (param == null) throw new NullPointerException("引数paramがnullです");
なんてコードを書いてはいけない決まりは無いし、別段珍しいことでもない。
367にしたって君がその違いを発見できて嬉しかったという以上の意味はないよ。
369 :
352 :05/03/12 22:23:14
ありがとうございます リソースと一緒にアプリ本体もjarに入っちゃてる場合、 リソースの更新は難しいですね。
370 :
デフォルトの名無しさん :05/03/12 22:25:50
>>369 リソースのファイルだけ更新すれば..?
abstructだなぁ。
372 :
デフォルトの名無しさん :05/03/12 23:13:02
たとえば
>>366 の
System.out.println(String.valueOf(zfile)); //System.out.println()はこの場合、テスト用のうちだし
で、jarファイルに入っているファイルの名前がわかるので(println()を使わず、if-elseブロックで)
リソースファイルだけを取り出して更新できるということです。
>>360 JAR 内のファイルを更新するのは技術的には可能だが普通やらない。それはもはや
アプリケーション・リソースじゃなくて個別設定やデータだから外部ファイルを使用する。
大抵は {user.home}/.hogehoge とかいうディレクトリに保管。
374 :
365 :05/03/13 00:00:08
質問の仕方が悪かったでしょうか?
375 :
デフォルトの名無しさん :05/03/13 00:05:07
あの、Javaのネットワークプログラミングのエラー処理の解説をしてるサイトとか 書籍をどなたか知ってやっしゃらないでしょうか? オレイリーの「Javaネットワークプログラミング」とかでもエラー処理は適当なので参考 になりません。実践でもちろん身につけるべきですが、あるならあるにこしたことはないです。 よろしくおねがいします。
>>375 正常終了しようがエラーが起きようが、処理で使った InputStream/OutputStream/Socket は必ずクローズする。
ユーザにエラーをどう通知するかは要件次第。
いじょ
というか、ネットワークプログラミングは Java 固有の問題ではないので、 ネットワークそのものについての知識がある程度無いと、 Java の知識だけでは、踏み込んだ処理は書けないと思う。 (というか、サポートするクラスライブラリの仕様さえ理解できないと思う)
378 :
デフォルトの名無しさん :05/03/13 00:18:38
>>375 ネットワークということでなく、Java全般で、ちょっと古い本ですが、
"Javaデバッグ明快技法"Will David Mitchell (鈴木義幸訳)、オーム社、2001
というのがあって、エラー処理についても若干書いています。役立つかどうかわかりませんが。
ああ、エラー処理ってプロトコル上の終了手続きのことか? だったらスレ違い。 最悪、TCP/IP ぶっちぎりを想定していないアホサーバは存在しないと想定して良い。
Javaの環境について良く理解できていないのですが、大きく分けて下記の3つが
あると思っています。
J2SE (Core/Desktop)
J2EE (Enterprise/Server)
J2ME (Mobile/Wireless)
そこで質問なのですが、
1. 単に「JDK」と言うときは、必ずJ2SE Development Kitのことを指しているのでしょうか?
J2EE SDKの環境を意味するような場合はありますか?
下記のページを見る限りでは、5.0においては、JDKとはJ2SEのDeveloptment Kitのことを
意味していると思うのですが、、、5.0以前においても同じですか?
http://java.sun.com/j2se/naming_versioning_5_0.html 2. システムにインストールされているJavaの環境が、SDKなのかJREなのか、
またはJ2SEなのかJ2EEなのか、はたまた32bitなのか64bitなのかを、コマンドで
確実に見分ける方法はありますでしょうか?
初歩的な質問ですみません。
そもそも質問自体が意味不明な場合にはご指摘をお願いします。
>>308 1. → 今も昔も JDK と言えば大抵 J2SE のことを指す。
2. → コマンドレベルで「確実に」は無理。インストールしただけじゃ {JAVA_HOME]\bin が
PATH に設定されないし。Windows でレジストリが見えるなら
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit などでとりあえず
分かる。IBM JDK はちょっと違うけど。
383 :
デフォルトの名無しさん :05/03/13 00:56:47
int a=3; int b=7; int res; res=a+b System.out.println("計算"+res); と int a=3; int b=7; int res; res=a+b System.out.println("計算"res);ではコンパイルして実行するとどうなりますか?? あと何故resの前に+をつけなきゃだめなのか教えて下さい よろしくお願いします
>コンパイルして実行するとどうなりますか?? 実行すれば誰にでも分かることを何故ここで聞く?
386 :
デフォルトの名無しさん :05/03/13 01:01:37
すみません 今パソコンがないので本で勉強をしているんでよろしければ教えていただけると幸いです
387 :
デフォルトの名無しさん :05/03/13 01:04:18
ちょっと冷静になって考えてみてくれ。 >今パソコンがないので本で勉強をしているんでよろしければ教えていただけると幸いです そういう質問をみんながやりはじめたら、このスレがどうなるか。
389 :
デフォルトの名無しさん :05/03/13 01:16:34
そうですね 分かりました 本最後までみてみます…
座学で自転車に乗れるようになるのだろうか。
座薬で痔は治るのだろうか。
>>337 >>338 やってみたよ。MetalLookAndFeel で566種類、
BasicLookAndFeel を無理やりサブクラス化して
480種類でした。
private static void print(LookAndFeel laf){
System.out.println(laf);
UIDefaults defaults=laf.getDefaults();
Object[] properties=defaults.keySet().toArray();
Arrays.sort(properties);
for (int i=0;i<properties.length;i++){
System.out.print(i+": "+properties[i]+" : ");
Object value=defaults.get(properties[i]);
if (value==null){
System.out.println("*value is null*");
}else{
System.out.println(value.getClass().getName());
}
}
}
GUIアプリケーションでタイトルバーを含まないウィンドウサイズの指定方法はどうすればできますか?
394 :
デフォルトの名無しさん :05/03/13 10:21:22
>>383 結果として
一文目が計算結果10
二文目が結果結果resでFA?
でもresを文字として扱うならば"res"だからコンパイルできないかな??
あってますか??
>>394 「答え2つ出しておいて『あってますか??』はないだろ」と思った。
>>396 だとしたらなおさらじゃん。
>>388 の指摘を受けて
コンパイルできる環境用意するか、本読んで理解するかするんでしょ。
>>394 の発言は邪魔だよ。
スマン俺のせいで 中とな知識だった
>>393 JFrame f=new JFrame("ぬるぽ");
f.setVisible(true);
f.setVisible(false);
Insets insets=f.getInsets();
f.setSize(
200+insets.left+insets.right,
200+insets.top+insets.bottom);
setVisible(boolean) よか pack() かなぁ。
>>400 WiKiでウィンドウ サイズ タイトルバー等検索しましたが、確答しませんでした。
>>401 ㌧クス試してみます。
ところで、何故FrameクラスのsetSize(int,int)メソッドはタイトルバーを含んだサイズ指定なんでしょうか。
タイトルバーは環境によりサイズが違うんでそれを含まないサイズ指定のほうがいいような。
404 :
デフォルトの名無しさん :05/03/13 18:00:48
オブジェクトのサイズってどうやって調べればいいんだっけ、そんなメソッドあったよう な気がするけど、思い出せないので誰か教えてちょ
405 :
デフォルトの名無しさん :05/03/13 18:48:56
406 :
デフォルトの名無しさん :05/03/13 18:52:45
>>393 int width = 任意, height = 任意;
JFrame frame = new JFrame();
((JComponent) frame.getContentPane()).setPreferredSize(
new Dimension(width, height));
frame.pack();
現在接続しているクライアントの状況を60分ごとに表示するスレッドを作っています。 長時間動作を考える時、このコードのように冒頭でIterator i;を宣言するのと、 毎回 Iterator i = activeServers.iterator(); のように記述するのではどちらの方がメモリーを食わないで済むか分かりません。 どなたかお力添えをお願いいたします。 public void run() { List activeClients = ClientService.getActiveClients(); Iterator i; while (true) { try { Thread.sleep(60 * 60 * 1000); // 60 分スリープ } catch (InterruptedException e) { break; } i = activeServers.iterator(); while (i.hasNext()) publishUpdate((ManagedClient)i.next()); //クライアントの接続状況を一つづつ更新する } }
>>407 質問の内容と逸れるけど、、
60分ごとに
ClientService.getActiveClients()
しなくていいの?
>>403 JFrameのスーパークラスとメソッドの意味が違ったら問題でしょ。
>>381 > 1. → 今も昔も JDK と言えば大抵 J2SE のことを指す。
> 2. → コマンドレベルで「確実に」は無理。
有難う御座います。
環境は全てUNIX系なので、レジストリ参照は無理です。
>>382 > 何がしたいんだ?
私は開発者ではなく運用管理者なのですが、いくつかのシステムの
Java環境をバージョンアップしなければならない状態です。
しかし単に「JDK1.4.1が入っている」などの情報しか無く、システムを
構築したところにも聞くことが出来ないという状態で、何のJava環境を
使用しているのか、実機を調べてみるしかない状態です。
今回の場合は、Sun Java System Web Server 6.1が動作中のシステムの
Java環境をバージョンアップしたいのです。
server.xmlのjavahomeの設定などから、どのPATHにあるjavaを使用して
いるかは分かりますが、そのjavaの環境が32bitなのか64bitなのか
j2seなのかj2eeなのかなどを見分けることが出来ればと思った次第です。
411 :
デフォルトの名無しさん :05/03/13 21:41:01
>>403 Q.何故FrameクラスのsetSize()メソッドはタイトルバーを含めたサイズ指定なのですか?
>>409 A.もしタイトルバーを含めないメソッドに変えた場合サブクラスのメソッドと意味合いが違ってしまうからです。(読み違えてたらすみません。
これは私が望んでいた回答とは違います。
それは私が言葉足らずだったからかなのかも分かりません。
継承されたクラスを含むFrameクラスのsetSize()メソッドではタイトルバーを含めたサイズ指定ですが、タイトルバーを含まないサイズ指定のほうがデメリットが少ない思います。
タイトルバーは環境による大きさの差異が大きく、製作者の意しない表示をすることがあります。(ウィンドウのサイズを変更しなければ見えない部分等今までに何度か見てきました。
タイトルバーを含むサイズ指定をする上でのメリットは何がありますか?
>>407 一、変数のスコープは最小にするべし。
二、変数は宣言と同時に初期化すべし。(nullでの初期化は×)
三、変数の使いまわしは常に悪。
というわけで、Iteratorを使うときは
for (Iterator i = activeServers.iterator(); i.hasNext(); ) { ... }
が正解。
>>407 60分毎なら
{
List activeClients = ClientService.getActiveClients();
for (Iterator i = activeServers.iterator(); i.hasNext(); ) {
publishUpdate((ManagedClient)i.next());
}
}
を別メソッドにした方がよさげ。
>>413 java.awt.Component<-...<-java.awt.Window<-java.awt.Frame<-javax.swing.JFrame
という継承関係がある以上、setSize()はComponetからJFrameにいたるまで
表面上同じ機能にしなければならない(mustに限りなく近いshould)。
それはメリットとかデメリットとかとは別の次元の話。
継承するときのお約束だから。
だからあなたの疑問が「JFrameにはどうしてタイトルバーを含まない
サイズ指定を行うメソッドが(setSizeとは別に)ないのですか?」と
いうものだったら同意してくれる人がいるかもしれないが、setSizeに
関してはそれはないと思っていい。
>>416 なるほど。分かりやすい!
んじゃどうして
「JFrameにはどうしてタイトルバーを含まないサイズ指定を行うメソッドが(setSizeとは別に)ないのですか?」
>>413 >>409 が言っているのは、以下のようなことだと思う。
Container は、自分自身のサイズ(外部境界)と、配下のコンポーネントを配置
する領域(内部境界)の2つを持っている。
外部境界と内部境界の差異(Insets)は、Windowの周囲の枠、タイトルバー、
JComonentであればBorderも。
Container の上にさらに上位のContainerが存在する場合、上位から見ると、
配下のコンポーネントの内部境界は重要ではなく、外部境界のほうが大事。
そのため Container.getSize() は外部境界を返す。
ContainerのサブクラスであるFrameが、スーパークラスと別なサイズを返す
と一貫性がないため、Frame.getSize() も当然外部境界を返す。
>>410 java -version は見た?
んで、J2SE と J2EE について勘違いしてる。
思いっきりカブっちまいました。すみません。 ていうか、Insetsを足すか引くかだけの話でしょ。そんなに 面倒ではないと思うけど。 俺はDefaultMutableTreeNode とDefaultTreeCellRendererを タイプするほうがよっぽど面倒。
>>419 外部境界と内部境界。
すっごいよく分かりました。サンクス!
ごめん、ネタで言ってみただけ。 Eclipse使ってるから、DefaultTreeCellRendererでも DefaultT までで充分。
へぇ、Eclipseってそんな機能あるんだ。 漏れはJ2SDKとMeadow(emacsのwin移植版)
>>425 開発環境だったら補完は当たり前の機能。
あと Meadow でも補完くらいできるけどな。手で打ってんの?
>>408 どりあえず動いているようですが、念のため for 内にgetActiveClients() を配置しておきました。
>>414-415 さま
アドバイスありがとうございます。for 内にIteratorを置くようにしてみました。コツが少し理解できたとおもいます。
428 :
Java天才プログラマ :05/03/14 00:26:53
>>411 それはjava Scriptの質問なのでスレ違いです。
SocketChannel#readで受け取れるデータ長って\0を受け取るまですよね? readするまでに2度文字列が到着してしまった場合は、前のデータと連結されるんですか? それとも次のreadまで待機でしょうか?
jdbcでデータベースmysqlを使ってるのですが日本語部分の文字化けで困ってます
どうかお力を貸してください
環境
JDK 1.5.0
mysql 4.1.10
JDBCドライバ mysql-connector-java-3.1.7
データベースhellodb,テーブルhello_world_tableは
http://www.hellohiro.com/jdbcmysql.htm と全く同じです
mysqlの設定ファイルmy.iniでも
[mysql]
default-character-set = sjis
[mysqld]
default-character-set=sjis
としています
ソース (例外処理略) public class Display { public static void main(String[] args) { Class.forName("com.mysql.jdbc.Driver"); //文字コードをMS932,Windows-31J,euc-jpにしてもだめ Connection connect=DriverManager.getConnection("jdbc:mysql://127.0.0.1/hellodb?useUnicode=true&characterEncoding=SJIS","root","root"); Statement state=connect.createStatement(); ResultSet rset=state.executeQuery("select NO,LANGUAGE,MESSAGE from hello_world_table"); String result=""; while (rset.next()) { for (int i = 0; i < 3; i++) { result=rset.getString(i+1); if (result==null) { result="null"; } System.out.println(new String(result.getBytes())+'\t'); } System.out.println(); } rset.close(); state.close(); connect.close(); } } 以上です 何でもいいので気づいた事がありましたら教えてください
OSはWindosXPですm(__)m
MySQL4.1はバグ持ちでWinではUTF8以外はだめぽ 4.0までの資料は投げ捨てたほうがいいというくらい別物でかなりのこまったちゃん DBをUTF8設定でcharacterEncodingをUTF-8にすればOK ただし、コマンドラインからのsqlコマンド群が問題になる Windowsで4.1はやめたほうがいいというのは基本中の基本 Windows以外でも大変なのにWindowsはさらにひどいからね
いや>>430に対してのレスだし、JDBCの部分の話だから
436 :
java天才プログラマ :05/03/14 10:49:47
>>430 ワタクシもそれではつまづきましたよ。
JavaからMySQLへのUni → SJIS変換は出来ますが、
MySQLからJavaへの変換は不可能ですね。
しかも、エンコーディング指定をするとBlobデータが入れられなく
なるし、バイナリデータを入れて自分でJava側で変換するのが
いいでしょう。そっちの方が速度的にも早いかもしれません。
欧米のメーカーは、ホントに文字エンコーディングへの関心が
ないです。
437 :
デフォルトの名無しさん :05/03/14 12:20:02
Javaでイチから開発環境を整えようとして、これさえあればまあ安心じゃない? というツールやアプリがあれば教えてもらえないでしょうか。 4月から自社で開発を行うように、と上司に言われたのですが、 どうやら新人君や今までJavaを知らない別枠の開発者にも 教えたりすることになりそうなのです。 私もそんなにJava知ってるわけじゃないんですが・・・。 私はとりあえず JDK eclipse Tomcat DB(できればOracle) プラグイン くらいがあれば、自分でローカル鯖立ててコンパイルやテストができるかなぁと 考えているのですが何か他にいいツールやおすすめの方法があれば教えてくださいです・・・。 あと、なにか間違っていることがあれば指摘してもらいたいです。 どうかよろしくお願いしますm(_ _)m
>>437 5年前の俺と同じ状況だな。
まあ、それだけあれば十分だろ。
ただし顧客にメーカー保証提供したいなら、Tomcatじゃなくて市販のにしろ。
439 :
デフォルトの名無しさん :05/03/14 12:41:20
>>438 ですね。それはそうです。
ただ、今日連絡が入ったばかりで、
顧客がどこなのかも分からないです。
開発だけならTomcatのほうが便利でいいかと。
あとはXMLとかの知識に疎いので、そちらの勉強もしておかないとだめですね。
web-xmlの中身とか説明しろやゴルァとか言われたら即座に返答できないかも・・・( ;´・ω・`)
Emacs
>>439 開発はTomcatでもいいのだが、納品が違う場合は納品時と同じテスト環境用意するの忘れずに
あとは追々勉強していけばいいと思われ
>>437 NetBeansがあればTomcatはいってるし構築二時間かけれないならオススメ
GUI作成があるなら特にオススメ
4.0はまじでEclipseよりかるいよ・・・
みなさん色々レストンクスです。
>>440 Emacsってなんすか?聞いたことあるようなないような。
>>441 納品があるんですかねぇw
>>442 NteBeansって聞いたことないや(´・ω・`)
まだまだ勉強しないとだめですね(`・ω・´)
444 :
デフォルトの名無しさん :05/03/14 16:19:08
質問です DBに接続して取得したデータをarraylistに格納したあと、 格納したデータ(番号、名前、性別)から性別だけを取得することはできるのでしょうか?
>>444 できるよ。
arrayListに格納したオブジェクトの型で一度キャストする必要があるけど。
当然ながらgetterメソッド、setterメソッドがないとだめだよ。
確かJDK5.0だとコーディングの仕方が少し楽になるんだったかな。
447 :
デフォルトの名無しさん :05/03/14 16:29:52
>>445 ,446
なるほどぅ
setterとgetterメソッドあればいけるのですね
もうちょっと頑張ってみますです
449 :
デフォルトの名無しさん :05/03/14 17:24:48
JavaにはVC++のMSDNみたいな便利なヘルプってないのでしょうか? というより、Javaのヘルプは何が標準的なんでしょうか。 当方、Eclipseを使いはじめたのですが ドキュメントが英語で困っています。 今のところネットにあるクラス階層が出てくるヘルプサイトみたいなのを使っているのですが いまいち使い勝手が良くないです。
英語を勉強するのはどうかな?
>>449 質問の意図がよくわからない。Eclipse付属のドキュメント
は日本語訳のものも配布されているから持ってくればいいけど、
これでJavaの言語仕様とかAPI仕様が勉強できるわけじゃないしね。
Javaアプリケーションで画像を読み込みCanvasに表示させるにはどうすればいいでしょうか?
最近は超初心者が増えてますね
import java.applet.Applet; import java.awt.*; class HogeCanvas extends Canvas{ private Image myChara = null; private int x = 100,y = 100; HogeCanvas(){ Applet a = new Applet(); myChara = a.getImage(a.getDocumentBase(),"chara.gif"); } public void paint(Graphics g){g.drawImage(myChara,x,y);} } class HogeHoge{ private Frame mainFrame = null; private HogeCanvas mainCanvas = null; public static void main(String[] args){ HogeHoge test = new HogeHoge(); test.mainFrame = new Frame(); test.mainCanvas = new HogeCanvas(); test.mainFrame.setTitle("Oyaji"); test.mainFrame.setLocation(0,0); test.mainFrame.setSize(800,600); test.mainFrame.add(test.mainCanvas,"Center"); test.mainFrame.show(); test.mainCanvas.requestFocus(); } }
C:\programs\java\oyaji>javac HogeHoge.java HogeHoge.java:11: シンボルを解決できません。 シンボル: メソッド drawImage (java.awt.Image,int,int) 場所 : java.awt.Graphics の クラス public void paint(Graphics g){g.drawImage(myChara,x,y);} ^ エラー 1 個
自分はプログラミング初体験なため、言語という概念がまだヨーワカランタメ 他の人に説明出来ないくらいホントにチンプンカンプンになるのです・・・ サンプルコードとかを見ながらやって、この処理はつかえそうとおもっても クラス名直さないとかあたりまえなのです orz そんなヘボ人間ですいませんホントスイマセンorz
>>444 ArrayListに格納するのは、番号、名前、性別のデータをインスタンス変数に持った
クラスがいいと思う。
ResultSetからgetするときは、定義したクラスをnewして、それに値をセットし、それをArrayListにaddすればよいのではないでしょうか。
g.drawImage(myChara,x,y); を g.drawImage(myChara,x,y,this); に変えれ。 つか、それだけ詳細なエラーメッセージ出ててなぜわからん?APIドキュメントくらい読めよ。
460 :
◆magic.fu7c :05/03/14 20:11:19
auの携帯ゲームが作りたくてプログラミングしているものです JavaでJ2MEWirelessToolkitを使って簡単なプログラミングをしてみたんですが実行できませんでした hello.javaというテキスト ↓中は class hello { public static void main(String args[]) { int a; a=1; System.out.println(a); } } というファイルを作って パッケージしてビルドしました そして実行を押したら実行できませんでした 何故できなかったのでしょうか?教えて下さい
>>429 SocketChannel#readで受け取れるデータ長は、ByteBufferのサイズまで。
ストリームの終了まで来たときには、readが-1を返すので、普通は-1が返るまで
ループする。
ちなみにByteBufferのサイズ分読み取れるという保障もない。読み取れたサイズを
readが返す。
>>460 実行は出来ているが画面になにも出てないだけちゃうんか?
>>461 それはつまり下品な言い方ですが、2通目のメッセージが残尿的に読み込まれてしまうということですか?
>>463 同じストリームを使って通信してる限りそりゃそうだろ。
465 :
460 :05/03/14 23:34:07
実行したら1がでると思うんですが… Exception; java.lang.ClassNotFoundException とでます 違う本には最初のところにinport javax.microediton.midletなど書いてあったんですがこの文がなければ実行できないのでしょうか? よろしくお願いします
ファイル名とクラス名の大文字小文字が一致してないとかいうオチ?
>>464 なるほど、transactions per secondを調節するのは奥が深そうですね。
468 :
460 :05/03/14 23:42:02
J2MEWirelessToolkitには Unable to create MIDlet hello java.lang.ClassNotFoundException;hello at com.sun.midp.midlet.Selector.commandAction(+47) at javax.microedition.lcdui.List.keyPressed(+71) at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+147) at com.sun.kvem.midp.lcdui.EmulEventHandler$EventLooprun(+275) と表示されました
469 :
460 :05/03/14 23:49:20
大文字小文字はあってました ファイル名クラス名同じにしてみましたら J2MEWirelessToolkitには java.lang.IlleagalAccessException と出ました
>>461 そもそも「1通目」「2通目」という考え方自体がおかしい。
SocketChannel#readはプロトコルなんて解釈しないから、あるのは「ストリームの末尾かどうか」だけ。
だいたいメッセージの末尾まで一気に読み込むんだとしたら、途中で輻輳なり遅延なりが発生したら、
末尾がくるまでひたすら待ち続けてしまうだろ。
だから、readしたときに読めるだけ読む。何バイト読めるかは全く分からない。だからreadは読めたバイト数
を返す。
readはストリームの末尾(つまり相手がSocketを閉じた)に来たら-1を返すので、それまではひたすら
ループする。で、受け取ったバイト列を連結するのは君の仕事だ。readの仕事じゃない。
さらにメッセージの末尾はプロトコルによってCRLFだったり\0だったりするから、これを判定して
メッセージを分割するのも君の仕事だ。readで読んだバイト列の途中にメッセージ末尾があったり
する。メッセージ末尾符号で分割していったんファイルに書き出すなりメモリに溜め込むなりするの
はプログラマがやるってこと。
だから、君の言う通り2通目のメッセージがちょこっと読み込まれたりするんだけど、readから
みたらそんなこと知ったこっちゃない。CRLFだろうが\0だろうが、バイト列の一部には違いない。
ストリームの終わりがくるまでひたすら読めるものを読むのがreadの仕事だ。
471 :
460 :05/03/15 00:17:58
なんども書き込み失礼します コマンドプロンプトで実行するのとJ2MEWirelessToolkitで実行する結果は同じでしょうか??
472 :
デフォルトの名無しさん :05/03/15 00:19:13
クラス名 変数 = オブジェクト.メソッド(引数) の場合、変数にはオブジェクト.メソッド(引数)の結果が 格納されるのでしょうか? もしそうなら変数の型はクラス名の型になり intとかfloatとかとは明らかに違う特殊な型になるのでしょうか? クラスの型というのは具体的にどのようなものなのでしょうか?
はぁ?
476 :
460 468 469 :05/03/15 00:35:11
>476
まずau向けのJavaアプリを作りたいんならauのサイトからエミュ他一式ダウソしてらっさい。
で、藻前さんが460に書いたプログラムは、携帯Java環境でなくPC等で動かすアプリケーション。
携帯Java向けのプログラムはjavax.microediton.midlet.MIDletクラスを継承した
サブクラスを作ってその中に処理を詰めていくんであって、まるっきり方向がずれている。
とりあえず
ttp://mailsrv.nara-edu.ac.jp/~asait/java/java.htm ほか、「au java アプリ」でぐぐってヒットしたページを片っ端から嫁。
478 :
デフォルトの名無しさん :05/03/15 00:42:05
>>477 さん
ありがとうございました
って事は俺が読んでる本は…PC用か… 基礎固めにしか使えないという事ですね
本当ありがとうございました ずっとずっと悩んでいましたので助かりました
479 :
472 :05/03/15 00:45:29
>>475 レスありがとうございます。
型定義されたVoidとはどのようなことなのでしょうか?
お馬鹿ですみません。
480 :
デフォルトの名無しさん :05/03/15 00:47:59
>>472 > クラス名 変数 = オブジェクト.メソッド(引数)
> の場合、変数にはオブジェクト.メソッド(引数)の結果が
> 格納されるのでしょうか?
そのとおり。
> もしそうなら変数の型はクラス名の型になり
そのとおり。
> intとかfloatとかとは明らかに違う特殊な型になるのでしょうか?
「クラス名 変数」って書いてあるんだから、int や float とは違う型だろうね。
変数の型が int 型になるためには、「int 変数名」って書かなきゃならんし、
変数の型が float 型になるためには、「float 変数名」って書かなきゃならん。
特殊かどうかは知らん。特殊って何だ?
> クラスの型というのは具体的にどのようなものなのでしょうか?
何を知りたいのか、わからないよ。
具体的なソースコードと共に質問するといいんでないかい?
482 :
472@質問改正 :05/03/15 01:00:26
Aaa aaa = Bbb.method(hikisuu) 上記のようなコードがあるのですが これは何を表しているのでしょうか? aaaにはBbb.method(hikisuu)の結果が代入されるのですよね? その時のaaaの型はAaa型(Aaaはクラス名)となるのでしょうか? そうなるとJavaでは勝手に型が作れてしまうということですよね?
>>482 Aaa というクラス定義が本当にどこにも存在しないならコンパイルで失敗する。
Aaa という Java ファイルが存在せずコンパイルが通るならどこかに Aaa のクラスファイルが存在する。
JAR ファイル、クラスパス、ライブラリなどで調べるとよろし
なのか
> Javaでは勝手に型が作れてしまうということですよね?
Aaa があんたの作ったクラスならその通りですよ。
と答えればよいのか判断に困る
aaaにはBbb.method(hikisuu)の結果が代入されるのですよね? はい。 その時のaaaの型はAaa型(Aaaはクラス名)となるのでしょうか? はい。 そうなるとJavaでは勝手に型が作れてしまうということですよね? はい。(「そうなると」ってのはよくわからんが、型は作れる)
・型を勝手に作れる=>ひと言で言うならyes ・aaaにはBbb.method(hikisu)の結果が代入される 代入ってのもあまりいい訳語じゃないよな。英語だとassign。 割り振られる、というのもなんか据わりが悪いが、まぁ、 Bbb.method~ から返ってくる結果の値にaaaが紐付けされる、くらいか。 aaaの型はAaaと認識してもいいけど、 そのとき紐付けされているデータの型になっている という認識でいたほうがよいかな。Aaa部分は、返ってくる データがAaa型か、それを継承した型でなければならない と表明している。
486 :
472 :05/03/15 01:06:14
>>481 レスありがとうございます。めちゃくちゃ助かります。m(__)m
「クラス① 変数=クラス②.メソッド(引数)」とした時、変数に代入できる型は
クラス①で定義されている複数の型やメソッドのいずれかであれば
文法上正しいという認識でよろしいでしょうか?
代入しなくてもAaa型なんだが
488 :
デフォルトの名無しさん :05/03/15 01:07:07
クラスとインスタンスの区別がついてないんだろうな
>>486 というよりもだ、「クラス②.メソッド(引数)」を実行すると、メソッドの返り値として、なんか値が
返るわけだ。それはintかもしれんしStringかもしれんしAaaかもしれん。それはメソッドの内容に
よる。
で、「クラス① 変数」は、その返り値を入れる入れ物だ。返り値が入る型でないといけない。
メソッドがintを返すならintでないといけない。Aaaのようなクラスのインスタンスを返すなら、
「クラス①」のところは、AaaもしくはAaaのスーパークラスでないといけない。
そうでなければ、コンパイル時に「クラス②.メソッド(引数)の返り値はクラス①型の変数には
入らんわボケ」という意味の、しかし回りくどくて分かりにくいエラーメッセージが表示されて、
コンパイルエラーになる。
結局、クラス①から考えるんじゃなくて、メソッドのほうを先に考えないとさ。
>>486 > 「クラス① 変数=クラス②.メソッド(引数)」とした時、変数に代入できる型は
「変数に代入できる値の型」についてあれこれ議論しようというときに、
代入演算子が出てくるから、わけがわからなくなるんじゃないかな。
a) MyClass foo = AnotherClass.method(bar);
これは、次のようにも書ける。
b-1) MyClass foo;
b-2) foo = AnotherClass.method(bar);
b-1 を見るだけで(b-2 を見るまでもなく)、変数 foo の型はわかるし、変数 foo に
どんな値を代入できるかについても議論できる。
これは、
>>491 さんのとは逆の方向ですな。
標準入力からコマンドを取り込み、 区切り文字ごとに文字列を分割してコマンドを実行していくスレッドを作っています。 これだとメモリ・リークが起きないようなコードになっているでしょうか。 特にストリングバッファをクリアするコードが不安です。 int b; Vector v = new Vector(); StringBuffer sb = new StringBuffer(); InputStreamReader reader = new InputStreamReader(System.in); while ((b = reader.read()) != -1) { //標準入力から一文字づつ読み込む char c = (char)b; if (c == '|' || c == '\n') { //改行か垂直バーなら v.add(sb.toString()); //コマンドをVectorに格納 sb.setLength(0); //バッファをクリア if (c == '\n') { //改行ならそれまでのVectorをコマンドの引数として渡す dispatchCommand(v); v.clear(); } } else { sb.append(c); } }
別に問題ないと思うよ。個人的には Vector は使わない InputStreamReader を使わず System.in で済ます。あるいはいっそのこと BufferedReader 間で使う。 sb.setLength(0) の代わりに sb = new StringBuffer()、v.clear() の代わりに v = new Vector() にするけど。
こうしてまたヒープにゴミが…
496 :
デフォルトの名無しさん :05/03/15 10:59:55
jarファイルを実行したとき 「Could not file the main class. Program will exit.」と ダイアログが出力されて終了します。 他のjarファイルは実行できるのですが、1つ実行できないファイルがあります。 何が問題なのでしょうか。どなたかお教え下さい。お願いします。
498 :
デフォルトの名無しさん :05/03/15 11:10:26
ちと、質問なんですが、ファイルとかにシリアライズしたデータを書き込む時に、 いくつか変数があって、それが全て同じオブジェクトを参照してたとしたら、 同じデータが何度もファイルに書き込まれたりしないですよね? 一回本元のデータが書き込まれたら後の書き込みの時には参照だけですよね? でそんな風になってる時に後で書き込んだ変数だけを読み出してもちゃんとデータは 復元されるのでしょうか? 質問ばかりですいませんがよろしくおねがいします。
manifest書いとけば実行出来る罠
>>498 そういうときはオブジェクトIDだけが書き込まれている
>>497 実行って言わないんですか?javawで関連付けしてダブルクリックしました。
>>499 manifestがよく分からないのですが、教えてもらえませんか?
ググってみましたが良いサイトが出てこないので。
ぐぐらんでもJDKのドキュメント見れば分かるだろう。
>>502-504 色々とありがとうございます。貼って頂いたドキュメントなどで
しばらく調べてみます。
プログラム中に関数がいくつあるのか、 そういうのを調べるプログラムを書くことは可能ですか? 難しくないですか?
「クラスの中にメソッドがいくつあるか」ならできる JARの中も調べられるからできるな
まあ、そうですね。 クラス1つなんで。
>>494 ありがとうございます。
つまるところ
while (true) {
v.clear();
}
よりも
while (true) {
v = new Vector();
}
の方がヒープにゴミ(?)が残らず、メモリリークが発生しにくいと考えていいでしょうか。
>>506 リフレクションという方法で可能。 java.lang.reflect あたりを調べる。
commons-beanutilsのソースとか読んどけ。
>>510 マジッスカΣ(’’∥)
難しそう・・。
でも、調べてみます。どうも。
>>511 一応確認するが、ソースファイルからじゃなくて、classファイルからという意味でいいんだよな?
前の人たちが言っているのは、classファイルからという意味だから。
>>494 >>509 >.. の方がヒープにゴミ(?)が残らず、メモリリークが発生しにくいと考えていいでしょうか。
そんなはずはないのでは。わたしなら(Vectorを使うとして)v.clear()を使う。
変な覚え方すると同期処理のときつまづくからメソッド使っておくのが一番。
>>513 ソースファイルのみで、クラスファイルは存在しない状態で、
と言う意味?
>>517 お前頭いいな!
アンカーはよくわからんが
519 :
デフォルトの名無しさん :05/03/15 14:02:49
ひどい実装だと、配列で管理している内部データを、 クリア時に見かけの最後尾インデックスだけをゼロにして、 実は参照がなくなってないとか……なきにしもあらず。 Sunの実装は問題ないようですが。
521 :
デフォルトの名無しさん :05/03/15 15:10:40
java.util.Vector のメソッドclear()のソースは public void clear() { removeAllElements(); } public synchronized void removeAllElements() { modCount++; // Let gc do its work for (int i = 0; i < elementCount; i++) elementData[i] = null; elementCount = 0; } となっているからelementDataの参照ははずされてます。
>>517 なるほど、カスタムのdoclet作れば、色々とできそうだな。参考になった。
523 :
デフォルトの名無しさん :05/03/15 18:05:18
Runtime.execで実行したプロセスの標準出力を InputStream ins = process.getInputStream(); InputStreamReader isr = new InputStreamReader(ins); BufferedReader br = new BufferedReader(isr); String str; while((str = br.readLine()) != null) { System.out.println(str); } で出力しようと思ったんだけど 出力に日本語が含まれてたときに \202\347\212\324みたいな出力に・・・ どこでどうエンコードしたらいい?
strの内容をSJISにエンコードすりゃいいのとちがう?
>>523 InputStreamReader isr = new InputStreamReader(ins, "Windows-31J");
レスありがとうございます。
>>524 StringからStringへの変換はできるのでしょうか?
>>525 やはり\202\347\212\324という表示になってしまいます。
>>526 Windowsだと思ってたが、環境は?
>>527 環境を書くべきでした。すいません。
Windows XPです。
Reader使わずに、1byte毎出力してみたら?
>>529 同じでしたorz
気づいたのですが、このエンコードは日本語に限らず
半角スペースも"\_"(「 _ 」は半角スペース)になったりしています。
\も1byteで入ってるのか?
>>532 1byte毎に数値として表示してみなよ
「思います」じゃプログラムできんよ
今までRuntime.execで dir c:\ を実行していたのですが、 cygwinのlsを使うと日本語も正常に表示されるようになりました。 dirは諦めるしかありませんか?
535 :
デフォルトの名無しさん :05/03/15 19:16:01
バイトごとの数値を見た後、もう一歩進めて、 int k=0; byte[] b=new byte[512]; StringBuffer sb=new StringBuffer(); while((k = ins.read(b)) !=-1) { String str = new String(b,"MS932");//MS932は任意 sb.append(str); } ins.close(); System.out.println(sb.toString()); としてみては..
536 :
デフォルトの名無しさん :05/03/15 19:18:25
JavaからDBを扱うときに、query生成って皆さんどうやっていますか? Databaseクラスを作ってそのなかにgetUserID()とか言って取得・更新などのメソッドを全てつめこんで各所でSQL文を直書きしている私はもう死にそうです。 お願いです 誰か助けてくあdさい
>>535 \は1バイトであることが確認できました。
それは今から試してみます。
>>536 HibernateでもTorqueでも好きなの使え
あとはO/Rマッピングでぐぐれ
>538さん どうもありがとうございます。 Databaseくらすがを見るのがもう嫌になって昨晩あたりからDatabaseくらすにアクセスすると吐き気がするくらいダメになっていました。 グーぐるしてみます。ほんとにありがとうございます。
541 :
デフォルトの名無しさん :05/03/15 19:38:45
>>537 >\は1バイトであることが..
char c= '\' はユニコード番号0x5cで、ASCIIでは1バイトですがJavaでは2バイトcharのあつかい
になります。
>>541 出力された文字を
read()で1バイトずつ読み込み、
それを出力するごとに「-」を出力するようにしたところ、途中が
-\-
という表示になっていたため1バイトであると判断したのですが
やり方が間違っていましたか?
Javaの内部で\を扱えば2バイトかもしれませんが、
実際に出力された値としては1バイトだと思うのですが。
543 :
デフォルトの名無しさん :05/03/15 19:59:17
>>542 使われているエンコーディングで1バイト扱いということですね。Java内部でのことではなくて..
出力するときにSystem.out.println(Integer.toHexString((int)c))) の形を使うと全てのバイトが
16真数表示されます。(ここでcはchar変数)
544 :
デフォルトの名無しさん :05/03/15 20:02:19
jarファイルから同階層上のhoge.txtを 読み込む場合、マニフェストのClass-Pathに 相対パスを書く必要があると思いますが、 Class-Path: . ではうまくいきません。どう指定するのが よいでしょうか。おしえてください。 jar内部は以下のようになっていて jp/tokio/はパッケージです META-INF/MANIFEST.MF jp/tokio/JarTest1.class マニフェストの記述 Manifest-Version: 1.0 Main-Class: jp.tokio.JarTest1 Class-Path: .
545 :
デフォルトの名無しさん :05/03/15 20:04:15
>>543 >出力するときにSystem.out.println(Integer.toHexString((int)c))) の形を使うと全てのバイトが
>16真数表示されます。(ここでcはchar変数)
すみません、ただしくは
"出力するときにSystem.out.println(Integer.toHexString((int)b))) の形を使うと全てのバイトが
16進数表示されます。(ここでcはbyte変数) "
とすべきでした。
俺もがんばってJAVA勉強して就職するぞー
dirは諦めることにします。 お騒がせしました。 ありがとうございました。
Windows の ActiveX COMコントロールを java から直接操作する要件が出来まして、
jacob ってのを見つけたんですが、これを使ったことある人いますか?
ttp://sourceforge.net/projects/jacob-project/ やりたいことは、普通にAPIを呼ぶだけなんですけど、
Long hoge(a,b,c,d,e) というAPIってのがあったとして、a,b,cは引数でd,eはポインタ。
と、いうのがVBとかで動いてるんですけど、javaだと戻り値のLongしか拾えません。
d,eはnullしか帰って来ません。
よろしくです。
>>546 今はJavaだけできる人はありふれてるからなあ・・・
>>544 クラスじゃないものを読み込むのにクラスパスは関係ないかと。
ちなみにmanifestファイルの最後は改行で終わらないと読んでくれない。
551 :
544 :05/03/15 22:20:36
>>550 ありがとうございます。
Class-Pathは関係ありませんでした。
URL url=this.getClass().getResource(
path);
の相対パスが間違ってました。
あちゃちゃ
552 :
st :05/03/16 00:37:21
お願いします。 class tes1 { public static void main (String args[]) { String st = new String("あいう"); System.out.println("st = " + st); } } これを実行すると「あいう」って表示されます。 「st」はインスタンス変数ですから、 インスタンスが格納されるアドレスの先頭番地が 入るはずですよね? なんで「あいう」がはいってんスカ?
st=あいう って表示されるはずが あいう としか表示されないからおかしいって言ってるの?
>>552 全てのオブジェクトはtoStringを持っています。
new StringBuffer("st=").append(st.toString())
555 :
デフォルトの名無しさん :05/03/16 00:45:23
(byte型の変数) & 0xff; これでint型になおるそうですが、なぜでしょうか。 まず"0xff"がint型だからbyte型の数がint型の数と 演算を行うまえにJavaVMがbyte型から int型に符号拡張しますよね? そんときたとえば、もともとbyte型の変数が 0001 0001だったとすると 1111 1111 1111 1111 1111 1111 0001 0001に符号拡張されますよね? なんで1だらけなんですか? 0000 0000 0000 0000 0000 0000 0001 0001 でいいじゃないですか。 理由がわかりません。
(int型の変数) / 3がdouble型になるのと同じ理由です。 着目すべきは演算子
>>552 > これを実行すると「あいう」って表示されます。
> 「st」はインスタンス変数ですから、
> インスタンスが格納されるアドレスの先頭番地が
> 入るはずですよね?
まあ、そういう教え方する人もいるんだろうな。
「~が格納されるアドレスの先頭番地」は、
「~が格納されるメモリ中の領域の先頭番地」
くらいの表現がいいかもしれない。
(厳密には正しくないんだと思うけど。)
> なんで「あいう」がはいってんスカ?
「インスタンスが格納されるメモリ中の領域の先頭番地」ではなく、
「インスタンスのメソッド toString を実引数なしで呼び出した結果」
を表示しているから、「あいう」が表示される。
そのプログラムでは、インスタンス変数に入っているものを表示しようとしていない。
(インスタンス変数に入っている参照値そのものを表示する方法は、Java には無いんだと思う。)
>>552 連結演算子の定義がそうなってるから。
ところで話ずれるけど、
>>インスタンスが格納されるアドレスの先頭番地
これ、もしかしてObject#toString()の返り値のことを言ってるのだとしたら
間違い。あれはただのハッシュ値の16進表記。よくアドレスとか間違ったこと
言う人いるけど、どっからそういう情報持ってくるんだろ。なんか定番の参考書
にでもそう書いてあるの?
>>558 Object#toString()がただのハッシュ値であるというのは
確かにそうだけど、アドレスというのは間違いとは言えないと思う。
実際に実装としてアドレスを使ってるのは多いんじゃないの?
APIリファレンスにも、Object#hashCode()のところに typicallyなんて書いてあるし。
As much as is reasonably practical, the hashCode method defined by class Object does
return distinct integers for distinct objects.
(This is typically implemented by converting the internal address of the object into an integer,
but this implementation technique is not required by the JavaTM programming language.)
というわけで、定番の参考書どころか、SunのAPIリファレンスに書いてある。
>>555 > そんときたとえば、もともとbyte型の変数が 0001 0001だったとすると
> 1111 1111 1111 1111 1111 1111 0001 0001に符号拡張されますよね?
> なんで1だらけなんですか?
> 0000 0000 0000 0000 0000 0000 0001 0001 でいいじゃないですか。
> 理由がわかりません。
この0001 0001って、どっちがMSBなの?
MSBが0(非負整数)なら、0で符号拡張されると思うけど。
MSBが1なら1で符号拡張しないと、負の数じゃなうなっちゃうでしょ?
それとも質問者は2の補数とか知らないのか?
>>558 > あれはただのハッシュ値の16進表記。
私が使っている Java (version "1.5.0_01") では、
Object#toString() の戻り値としては、「ハッシュ値の16進表記」ではなく、
「オブジェクトの派生元のクラス名、アットマーク (@)、およびオブジェクトの
ハッシュコードの符号なし 16 進表現から構成される文字列」
が、返されます。
あなたはどこからそういう情報を持ってきているのですか?
なんか定番の参考書にでもそう書いてあるのでしょうか?
みんなつっこむ相手が違うと思うんだが...
>>561 そんなの文脈から@の右側のこと差してるのは明らかだと思うんだけど。
素で聞いてんの?それとも揚げ足取って遊びたいの?
564 :
デフォルトの名無しさん :05/03/16 01:07:35
ハッシュ値の16進表記? ~java.io.~@2423534 みたいなやつです。これはアドレスだと思ってましたが。 オブジェクト変数を表示させようとすると、上記のような表示になります。 String型でやると、文字が出ます。 クラス名 オブジェクト変数; これでオブジェクト変数4byte分がメモリ上に確保され、 オブジェクト変数 = new クラス名(); これでオブジェクト変数に格納されるメモリ中の領域の先頭番地がはいりますよね? で、オブジェクト変数を表示させようとするとアドレスが表示されるはずだと思いまして。 ハッシュ値の16進表記?って?
>>559 ああ、Sunのにはそうかいてあるのね。IBMのjavadocには
/**
* Answers an integer hash code for the receiver. Any two
* objects which answer <code>true</code> when passed to
* <code>.equals</code> must answer the same value for this
* method.
*
* @authorOTI
* @versioninitial
*
* @returnint
*the receiver's hash.
*
* @seeequals
*/
public native int hashCode();
としか書いてなかったから知らなかったよ。ありがとう。
>>564 えーと、ほとんどの実装では、その数字はアドレスですが
Javaの言語仕様上は、Objectのインスタンスが識別できれば
どんな数値でも良いことになってます。
それがハッシュ値って言ってるものです。
詳しくはObjectクラスのhashCode()メソッドの説明を見てください。
で、Javaのオブジェクトは、文字列表示する時には、暗黙にtoString()メソッドの結果が返されます。
どうしてもハッシュ値を表示させたいなら、hashCode()メソッドを呼んでください。
もう一度書きますが、hashCode()の戻り値はアドレスである保証はありません。
って書けばわかる?
>>565 IBMのjavadocか。
マニアックなもの見てますね。
> 知らなかったよ。ありがとう。
いえいえ。
>>566 > Javaの言語仕様上は、Objectのインスタンスが識別できれば
> どんな数値でも良いことになってます。
> それがハッシュ値って言ってるものです。
テキトーな事を思いつきで述べるやつらのオンパレードだな、ここは。
複数の異なるインスタンスが、同じ int 値を hashCode() の戻り値として
返すことがありえない、とあなたは言っているのですよ?
(だって、同じ値が帰ってきたら、インスタンスが識別できなくなる。)
569 :
デフォルトの名無しさん :05/03/16 01:21:55
いまいちよくわかりません。 String型でインスタンス化したときのオブジェクト変数を表示させようと するとObject#toString() の戻り値にもかかわらず16進ハッシュ値でなく、 文字列が表示されます。 たとえば、RandomAcessFile型でインスタンス化してオブジェクト変数を 表示させようとすると、16進ハッシュ値が出ます。 違いは?
( ・3・)???
実は566=559なんだけどさ。 > 複数の異なるインスタンスが、同じ int 値を hashCode() の戻り値として > 返すことがありえない、とあなたは言っているのですよ? おれはそんなこと書いた覚えはない。 なぜなら「識別」の定義を > (だって、同じ値が帰ってきたら、インスタンスが識別できなくなる。) なんてしてないから。 で、詳細はhashCode()メソッドを見ろとかいた。 上記のことまで書いたら木を見て森を見ずになって、初心者にわかりにくくなるからね。 探究心のあるひとはhashCode()メソッドの説明読むだろうし。 キミはequalsと==の違いの説明とかしてる時に 「でもStringは」とか言い出すタイプ? そういう人ってキラわれますよw
>>569 String 型のインスタンスの toString() を呼んだときは、
String クラスでは、独自の toString() の実装を持っている(オーバーライドしている)
ので、Object#toString() は呼ばれない、ってことじゃないでしょうか。
>>571 じゃ、「識別」の定義をおながいします。w
>>568 ん? Integer#hashCode()やString#hashCode()とかだと確かに違う
インスタンスが同じhashCode()の戻り値を返すことはあるけど、
今はObject#toString()の話でしょ? なにが気に入らない?
>>564 その妙にCくさい知識は棄てろ。
>クラス名 オブジェクト変数;
>これでオブジェクト変数4byte分がメモリ上に確保され、
そうとは限らない。「クラス名」を格納するための変数が用意されるのは事実だけど、
変数に入るのはメモリアドレスだけかどうかもさだかではないぞ。
>オブジェクト変数 = new クラス名();
>これでオブジェクト変数に格納されるメモリ中の領域の先頭番地がはいりますよね?
「クラス名」のインスタンスがヒープに作成されて、その参照が「オブジェクト変数」に
入ることは間違いないが、その「参照」がメモリ領域の先頭番地かどうかはわからない。
実装次第だろう。
で、「オブジェクト変数」をprintlnに渡すと、自動的に「オブジェクト変数.toString()」が
実行されて、その結果が表示される。参照の正体が表示されるわけではない。
で、Javaには参照そのものをどうにかする言語上の仕組みは存在しない。
>>566 hashCode() がオーバライドされてる可能性があるので
確実には System.identityHashCode(Object) の方がいい。
>>569 toString() がオーバライドされてるかどうか。
>>571 568ではないが、「識別」できる必要もない。
なぜなら int hashCode() { return 0; } とかでもいいから。
間違えた。 Object#toString() -> Object#hashCode()
C#でいうvirtualとoverrideにあたる機能ってありますか? それとも全部オーバーライドでsuperは抹殺ですか?
>>569 ObjectクラスのtoString()メソッドは、16進ハッシュのついた文字列を返す。
StringクラスのtoString()メソッドは、Object#toString()をオーバーライドして
いて、インスタンスが保持している文字列そのものを返す。
RandomAccessFileとしてインスタンス化されたなんかのクラスのtoString()は、
たぶん特に実装されてないので、スーパークラスであるObject#toString()の
結果を返してる。
たとえばBigDecimalクラスのインスタンスにtoString()すると、ハッシュ値じゃ
なくてBigDecimalが内部に持ってる数値の文字列表現を返すぞ。
toStringはすべてのクラスが持っていて、いくつかの(ほとんどの?)クラスは
オーバーライドしてハッシュ値以外の文字列を返すわけだ。
これで分かってもらえただろうか。
>>573 単に、嘘・でたらめ・間違った情報が気にくわねー。
>>577 javaは全部C#でいうvirtualです。
overrideはいちいち書かなくてもオーバライドすれば勝手にoverride扱いになります。
でsuperは抹殺とか言ってるけどC#ではbaseだろ?
>>577 privateでないインスタンスメソッドはすべてvirtualだと思え。
同名で同じ引数をもったメソッドをサブクラスで定義すると、オーバーライドしたことになる。
>>580 >>581 なるほど、使い分けする為のメソッドを用意することにします。
>C#ではbase
そこはJavaにあわせたんです。
まあ、あんまり荒らすのは本意じゃないので。 「識別」って書いたときに、そのようなツッコミが来ることを予測してたので わざと定義しないで、hashCode()を見ろって逃げたのよ。
まあ、VM の気持ちになって考えればわかること。
588 :
デフォルトの名無しさん :05/03/16 01:47:15
>>588 だから、toString()メソッドが、文字列を返すように実装されてるの。
>public static void main (String args[]) { >String st = new String("あいう"); .......... >「st」はインスタンス変数ですから、 ここに突っ込むやつがいなかったのが不思議。
インスタンス変数にはオブジェクト実体の参照が入っていて、文字列をもっているのは オブジェクト実体(インスタンス)のほうだろ。 で、くどいようだが、println( オブジェクト変数)は、オブジェクト変数の中身の参照を表示 するのではなくて、「オブジェクト変数.toString()」の結果を表示するんだっての。 インスタンス変数にメモリ領域の先頭番地が仮にはいってたとして、それがtoString()の 結果となんか関係あるのか?
しかし、
>>588 の記事は、「Javaじゃアドレスを4バイトであらわす」とか断言してるんだな。。
まあ、ほとんどの実装じゃそうだと思うけど。
>>588 そのページは非常によい説明のしかたをしてると思う。
しかし、プログラム初心者の場合は、そのページを読んだあと
K&R の「プログラミング言語C」を読むべきだと思うのは私だけだろうか。
Javaでアドレス読み取ることって出来るのかな?
595 :
デフォルトの名無しさん :05/03/16 01:58:21
>>591 すいません。
>で、くどいようだが、println( オブジェクト変数)は、オブジェクト変数の中身の参照を表示
>するのではなくて、「オブジェクト変数.toString()」の結果を表示するんだっての。
オブジェクト変数の中身を表示する方法と、「オブジェクト変数.toString()」の戻り値を
表示するのとは、全く同じじゃないんですか?
>>595 変数の中身を表示するっていうけど
中身ってなに?
何をもって「全く同じ」なの?
そこら辺について自分でも答えられない状態のような気がしてならない。
>>588 > オーバーライドはわかったのですが
わかってないじゃんw
599 :
デフォルトの名無しさん :05/03/16 02:11:30
すべてわかりました。 String st = new String("あいう"); これと、 String st = "あいう"; これが同じだということですね? これはストリング型がよく使われるから、インスタンス化しなくていいように。 で、st.toString();ってやると、stの中にある、「"あいう"が格納されている インスタンスを示すアドレス」を表示するのではなく、 インスタンス自体、つまり"あいう"が表示される、と。
後半はあってるが前半は違う。
始めてjavaに触るんだけど、お勧めの入門書を教えてほしいっす。
いやよく読むと後半も違うな。
釣りとしか思えない
>>599 まあ、いまのレベルなら、前半も大体あってると思ってもいいかも。
後半の「インスタンス自体」って表現の方が気にかかる‥。
というか、最初の段階からそこまで厳密に理解してる必要は無いと思うな。
""であらわされた文字列ってnew StringBuffer#toStringに置き換わるんだっけ?
>>606 強いていうなら、new String(...).intern()かなあ。
StringBufferに展開されるのは、文字列を + で演算した時の話。
>>605 Javaじゃアドレスを4バイトで表すとかいうウソを真に受けてるから正してるんですよ。
>>606 通常、
文字列リテラル一個のときは置き換わらない。
文字列リテラルばかりを + でつないだときはつながった一個のリテラルになる。
文字列リテラルと文字列変数を + でつないだときは StringBuffer で append されて最後に toString() される。
610 :
デフォルトの名無しさん :05/03/16 02:26:17
>>602 どこが?
はきそうなので寝ます。
また明日来ます。
>>601 やさしいJava or プログラミングレッスン
みなさんありがとう。また明日。というか今宵。
611 :
デフォルトの名無しさん :05/03/16 02:27:04
>>609 そんなこといってない
クラス型変数が4バイトだ。
>>599 ほぼそんな感じ。StringクラスのtoString()メソッドはそのように定義されてる。
当然他のクラスだと違う仕様になってるから、ハッシュ値が表示されたり、
訳の分からん文字列が表示されたり、とにかく a しか表示しないようなもの
もあるかもしれない。
それは toString() メソッドの仕様次第ということ。
ちなみに、stがアドレス値を持ってると仮定して、Javaにはそのアドレス値を
どうにかする仕組み自体がないから、そんなこと気にしないことだな。
613 :
デフォルトの名無しさん :05/03/16 02:28:58
つーかさ、Javaは、なまじっかハードの動きを隠蔽するからわかりづらいんだよ。 こりゃCの方が楽だな。
>>601 ちょっと邪道だが、他の言語(特にC系)である程度経験があるなら、
・SJC-P の受験参考書
→ 文法を覚える。
・Effective Java プログラミング言語ガイド
→ コーディング方法を覚える。
というのが、案外近道のような気がする。
実はprintln(String str)はprintln(Object obj)とは別物だから、 表示するときにStringのtoString()が中で呼ばれるとは限らないって 揚げ足取りはアリ?
616 :
デフォルトの名無しさん :05/03/16 02:34:00
>>615 既出でしょ?
objんときはスーパークラスのtoStirng()が呼ばれるって。
ところで、なんで toString() の話になったんだろ。 public static void main(String[] args) { String str = "hoge"; System.out.println(str); } このプログラムの最初の行にかかれているStringのオブジェクト(いんすたんす?) の、toString() メソッドってどっかで呼ばれるのか?
""で表記した文字列ってGCで消える?staticで保持して於いたほうがいい? 同一のものなら同じ参照をうんたらってネタをStringの解説で見た覚えがあるんだよね。
620 :
588 :05/03/16 02:42:09
>>617 RandomAccessFileやらObjectやらをprintlnすると、メモリアドレスっぽいのが表示されるじゃん!
なんでStringのときはメモリアドレスが表示されないんだよ! とかいうような話だったから。
>>618 そりゃスコープから外れればGCの対象になるわな。
しかし同じ文字列がすでに作られててまだGC対象になってない
(どっかで保持されてる)なら、同じインスタンスを使い回す。
>>614 いや、おれはJCPの受験参考書は読んどいた方がいい本だと思う方だな。
受験用だけあって、ポイントは押さえてるからね。
Effective Javaのまえに、「プログラミング言語Java 第3版」かな。
>>620 とりあえずね、println("st =" + st);の動作について
いえばね、"st = " + stのようにオペランドがString型の
場合の+演算子は文字列の連結を返すって仕様で決まってるから、
アドレスとかそういうのはおいておいて、結果として文字列が
返るって理解してください。
あと、System.out.println(String str)についてもPrintStream#println(String str)
の仕様で、文字列を表示するメソッドであると決まってるから、アドレスとか
参照ってのはおいておいて、文字列が表示されるんだと教条的に覚えといてください。
世の中、振り返ったら理解できたってこともないわけじゃないからとりあえず
理解は後回しにしといてね。
>>613 関係ないがNIOのDirectByteBufferってどう考えてもネイティブメソッドで確保したメモリ領域をJavaで扱うために用意したとしか思えない・・・
626 :
デフォルトの名無しさん :05/03/16 02:51:22
>>625 PureJavaそのものはJNIばっかり
>>618 "" に限らず、"a" みたいな文字列リテラル、というか文字列型の定数式 ("a" + 1) みたいなのも含む、は
コンパイル時に解決されて実行時には String#intern() された同じインスタンスを使いまわす。
文字列定数を持つクラスがアンロードされるまではインスタンスはGC対象にはならないはず。
new String("") みたいにすれば別のインスタンスを生成できる。
>>626 JDK 5.0 Update 2 がj2sdk1.5.0
630 :
626 :05/03/16 02:55:29
>>629 兄さん、626がお求めのはMac版ですぜ。
>>628 クラスのアンロードってことは内部の展開はstaticと考えてよい?
633 :
626 :05/03/16 03:04:13
とりあえず片っ端からDLしていったところ、 Solaris AMD64 packages - tar.Z ってなものが生き残りました。 が、その中に入っているほとんどの書類が開けず…
>>631 ああ、そっか。ちゃんと読んでなかった。
>>626 ごめんね。
MacはFreeBSDがベースだから、そっち方面と一緒に調べると幸せになれるかも。
見つからなくても今度は謝らないけどね。
>>625 allocateDirect( capacity) 以外にDirectBufferを生成する方法がないのに、どうやって
他で確保したメモリを使うのだね。
636 :
626 :05/03/16 03:07:45
>>633 追記
jdk-1_5_0_02-linux-amd64.binも生存。しかしその中に(以下同文
>>635 NewDirectByteBuffer関数
638 :
626 :05/03/16 03:09:06
>>634 そうでしたか。戯言につきあって頂きありがとうです。
>>626 Mac OS XにはJavaの実行環境はデフォルトではいってる。
開発環境がほしいなら、Appleのデベロッパページから、Mac用のを
ダウンロードするか、OS Xに一緒に開発キットのCD-ROMが付いてる
から、それをインストールする。
ttp://developer.apple.com/ja/ ここでApple Developer Connectionの無料会員になると、Mac用のIDEとか
Java開発環境とか、WebObjects試用版とかの最新版がダウンロード出来るよ。
Mac用のJava最新バージョンは1.4.2 Update 2ってやつな。
>>626 正しくはこっちな。
Apple Developer Connection
ttps://connect.apple.com/ ここから無料アカウントを取得してログイン>Downloads>Javaとリンクたどれば見つかるはず。
最新版はJava 1.4.2 Update 1で悲しい事に1.5はまだない。
ってのがMacの一般的なJava環境だと思う。
>>637 JNI関数って NIO もサポートしてたんだね....知らんかったよ....
ありがと。
644 :
626 :05/03/16 03:20:11
>>641 ああそうだった。実行環境だけUpdate 2が出たけど、開発環境はUpdate 1までだった。
だからJDKは1.4.2 Update1 Developer Toolsが最新。
一連のやり取りを見て思ったんですが、MacでFreeBSD用のJavaVMって動かせないのかな?
Mac→FreeBSD→Wine→Windows→Eclipse?
648 :
626 :05/03/16 04:02:21
メンバーになる条件にひっかかって(年齢)まだ取得できていませんが、 明日にでもやってもらおうと思ってます(親)。 てか早く寝なきゃヤヴァイんで。
>>627 ×PureJavaそのものはJNIばっかり
○PureJavaそのものはnativeメソッドばっかり
少なくともJNIを使ったものはPureJavaではありません。
>>647 それは無理。PPCとX86系のCPUの違いがまだ克服されていないはず。
ちなみにDarwineとかいうプロジェクト名だったと思う。>PPC用wine
バイトオーダーの関係か?
652 :
デフォルトの名無しさん :05/03/16 04:30:21
すみません初歩の事を教えて下さい
http://sterdust.net/のサイトを読んでみたんですが クラスとオブジェクトとコンスタントとは何でしょうか??
クラスの中にオブジェクトがあるという事でしょうか??上のサイトで説明すると運動会がクラス オブジェクトが競技であっていますか??
あとコンスタント何ですが…
クラス名 変数名 =new クラス名()
をすると 変数名でクラスを扱えるという利点なんでしょうか??
初歩ですみません どうかよろしくお願いします
>>652 釣りか?釣りなのか?
一応マジレスしとくと、運動会も、玉入れも徒競走も参加者も観客も全てクラス。
クラスは、そのルールを定義したもののことだ。100m走を例に取って説明するなら
数人がピストルの合図で走り始め、決められたコース上を100m走って先にゴールした人が勝ち。
という様な内容が定められているものだ。その定義に沿っている物なら小学校の運動会の100m走も
アテネオリンピック男子100m決勝も全て100m走というクラスで処理出来る。
(余談だがオリンピックの100m走には、ドーピング検査など小学校の運動会にはないルールがあるので、
100m走を継承し、オリンピック陸上種目というインターフェースを実装したサブクラスだろう)
インスタンスは、実際の競技を指す。上の例なら例えばアテネオリンピック男子100m予選第2レース
といった、具体的なある1回の競技の事を指す。このインスタンスには100m走というルールに従って
競技の参加者やスタート時刻などと言ったその競技固有の情報が格納され、処理される。
ちなみに、競技の参加者も出走者というクラスのインスタンスだといえる。
リンゴに例えるなら、リンゴという定義がクラス。
あなたがいま手に持っているリンゴなどという実体がインスタンス。
>>649 JavaAPIが利用してるならPureJavaでしょうよ
具体的にはVolatileImageなんかこれ利用してるんじゃないか?
655 :
BlackLightOfStar ◆ifsBJ/KedU :05/03/16 06:55:47
>>652 タイヤキ焼く機械あんだろ、鉄板で挟むやつ
あれがクラスで、出来たタイヤキがインスタンスだ
658 :
652 ◆magic.fu7c :05/03/16 11:25:49
みなさん凄く分かりやすい解説本当ありがとうございました
オブジェクトというのは運動会全体の事でよろしいのでしょうか??
あと
>>652 の下の質問もよろしくお願いします
>>658 変数名は鯛焼きに名前を付けて扱いやすくするんだよ。
右から何個目とかじゃわかりにくいだろ?
だから、良夫とか花子とか名前を付けるんだよ。
良夫はあんこはみ出てるとか、花子はあんこが尻尾までつまってないとか、インスタンスの状態もいろいろあるんだよ。
例外処理について教えて頂きたいことがあります。 コンストラクタの例外をcatchするときは public 戻り メソッド名(引数){ try{ クラス a = new クラス(引数); } catch(Exception e){ } } でよいのでしょうか?
>>660 それでOKだが、なるべく例外はまとめてじゃなく、個別にキャッチしろ
663 :
658 ◆magic.fu7c :05/03/16 11:50:48
>>659 さんありがとうございました
とても分かりやすい解説です
あとオブジェクトの事は658であっているでしょうか??
664 :
デフォルトの名無しさん :05/03/16 11:53:30
>>660 public 戻り メソッド名(引数){
クラス a=null;
try{
a = new クラス(引数);
}
catch(Exception e){
//e の処理
}
}
のほうがより良いかと。そうでないと、この try ブロックを出ると変数 a は
有効でなくなる。それが、例外を個別にキャッチすることにつながる。
>>663 うまい例えが見つからないが、少なくとも
>>658 の解釈は間違っていると思う
とりあえず、現段階ではインスタンスとオブジェクトは
同じものと考えてて問題ないと思うよ
ただ、「クラスとインスタンスの違い」は
重要なので、ここだけはキッチリ区別しておく事
このページの、
http://sterdust.net/ez/prog/base.html > Javaではオブジェクト指向を強く意識しています。
> オブジェクト指向というのはその名の通り、
> オブジェクト(物)単位でのプログラミングです。
> 例えば運動会というのを大きなオブジェクトとすると
> 運動会は徒競走などの競技の小さなオブジェクトを持つ事で
> 全体として運動会の機能を持ったオブジェクトになります。
という説明は、なんだか微妙だな。
特に、オブジェクト指向を知らない人への、最初の説明としては
持ち出している例が、私には適切だとは思えない。
オブジェクト=物、っていう認識はいいと思うんだけど、
その後すぐ出てくる例として「運動会」ってのが、微妙。
運動会って、物っていうよりか、「事」じゃねー?
どっちかというと、運動会の例は構造化プログラミングの説明に良いかも。
667 :
デフォルトの名無しさん :05/03/16 12:13:34
>>652 静的(static)でないクラスは設計図で、そのインスタンスは製品という譬えが
時々されるようですね。staticなクラスは既に設計図と製品とが同じものという
ことになるでしょうかね。一般のクラスはインスタンスというオブジェクトの
かたちでの製品(つまり、"new クラス名(引数)")にしないと働かないわけです。
クラスのインスタンスはオブジェクトですが、一方、配列もオブジェクトです。
668 :
◆magic.fu7c :05/03/16 12:34:45
って事はインスタンス化したオブジェクトがクラス? って感じですかね?製品に値段をつけて初めて売れるみたいな感じでしょうか?? 本当親切な回答みなさんありがとうございました
669 :
デフォルトの名無しさん :05/03/16 12:39:26
staticなクラスはjavaには無いよ。 staticなフィールドとメソッドならあるけど。かんちがいしないように。
>>666 に禿同
構造化プログラミングの入門としては、まあありえる
でもオブジェクト指向の入門としては、ありえない
良くある例はテレビかな
テレビという物は、スピーカとか画面とかいろんな部品が
集まって出来ているとかそんな感じ
機能の集まりではなくて部品(物)の集まりで物を作るのがOOP
>>668 もう見てないかも知れんけど、全然間違ってるよ
AWTとSwingで作ったjarファイルはJREが入っていれば プラットフォームに依存しないで動作しまよね。 SWTを使うと依存すると言いますが jarファイルを動作させるのに何かインストールしないとダメなんでしょうか? (例えばVBのランタイムみたいなもの)
>>672 dllが1~3個とjarファイルが1~2個ほど必要。
それぞれjava.library.pathとjava.class.pathを
通す必要はあるけどインストールってほど大げさでも
ないな。
>>668 クラスは単なる型(タイヤキの鉄板)に過ぎなくて、実体がないんだよ。
そのクラスをもとに作り出した実体(タイヤキ)をインスタンス(オブジェクト)というんだよ。
今の車の制御系統みたいにすでに一まとまりになってる箱を車につなげるだけという組み立て過程は オブジェクト指向の説明にぴったりじゃなかろうかと思ったり思わなかったり
676 :
デフォルトの名無しさん :05/03/16 14:15:52
>>669 ここではあまり本質的ではないが、内部クラスには静的クラスもある。
例:
public class InnerStatic{
public static void main(String[] args) throws Exception{
A a = new A();
A.B.mm();
}
}
class A{
private static int x= Integer.MIN_VALUE;
static class B{
private static int x = Integer.MAX_VALUE;
static void mm(){
System.out.println(String.valueOf(A.x));
System.out.println(String.valueOf(A.B.x));
}
}
}
>>673 swt.jar が無いと実行できないのはわかったのですが
>それぞれjava.library.pathとjava.class.pathを通す必要はあるけど
という作業の意味がわからないのですが、どういう事でしょうか。
あとdllは何のDLLで、どこに用意したらいいんですか?
とりあえずeclipse上でSWTを使って実行できたのですが
配布した先での実行の方法がわからないんですよね。
679 :
デフォルトの名無しさん :05/03/16 14:53:43
>>676 >>678 >>676 での用語法には誤りがあるので、訂正..
静的クラスは囲まれたクラスの一種類として考えられる。
内部クラスは、静的と宣言されていない囲まれたクラス。
タブって何を入力したらいいの?
タブをコピペすればいいじゃない
>>677 http://www13.plala.or.jp/observe/swt/swt_overview.html ここの、実行時のVM引数に指定しているのがそれ。
ここにswt-win32-xxxx.dllとかいう名前のDLLがあるはず。
xxxxの部分はEclipseやSWTのバージョンによって違うが。
このDLL、SWTのうちOS固有の実装部を提供している。
Linux/GTKならswt-gtk-xxxx.soとかなんとか別の名前だった気がする。
面倒くさかったら、Javaアプリを実行するディレクトリにこのDLLをコピーするという手もあり。
java.class.pathは、いわゆるクラスパス。
swt.jarをクラスパスに追加しておきましょうということ。
いろいろクラス用語が出て混乱してます。 インスタンスは、定義されてるクラスをアクティブ(プログラムから 使えるようにする)にしたものなんですよね。 オブジェクトはその中の変数群と見ていいのでしょうか? 静的クラスはないというレスがありますが、静的クラスとはつまり classの設計図そのものなんですよね。 何故こんな段階的に分けてるのか、今の所いまいち分かりませんが みなさんのように大きなプログラムを組むようになれば、その利点も 理解できると思います。
>>682 誰かに配布するときは同じディレクトリにmainがあるJARファイルと
swt.jar、DLLを入れてそこから実行してもらうのがよさそうですね。
>>677 JNIとかわかってないとSWTは進めれないかなぁ
>オブジェクトはその中の変数群と見ていいのでしょうか? だめです オブジェクトとインスタンスには明確な違いはありません 好みで使い分けても良いと思います、例えば new 演算子を用いてクラスからインスタンスを作る new 演算子を用いてクラスからオブジェクトを作る どちらも正しいです、ただインスタンスは明示的にあるクラスから 作られた「もの」を指す事が多いようです そのあたりは英語の意味からきてると思う
687 :
668 ◆magic.fu7c :05/03/16 16:35:15
回答ありがとうございました
オブジェクトというのは概念よりの言葉で、 インスタンスというのは、実装よりの言葉という気がする。 特定の言語に依存しないオブジェクト指向の話(モデリング等)を するときは、対象をオブジェクトというし、分析の初期段階では、 クラスさえ考慮しないかも。 インスタンスという言葉が出てくるのは、使用する言語が決まって、 実装設計に入ってから。 よく考えると、インスタンスは言語依存の要素も包含してるかもしれない。 Java でメモリ管理のしかたなどを考える場合は、インスタンスを考えるし。
全てのクラスはオブジェクトを継承してるんだYO! 世界はオブジェクトで構成されているオブジェクト至上主義なんだYO! OK?
ユーザーからインプットされた数字の4角形を作りたいんですがどうやるのでしょうか? たとえば 4を受け取った場合。 1 2 3 4 12131455 1116156 10 9 8 7 と渦巻状の左回りで順番に数字を並べたいんです。 どなたかご教授ください。
すいません2段目5が一つ多かったです。 ちなみに 3の場合。 1 2 3 8 9 4 7 6 5 となります。
696 :
デフォルトの名無しさん :05/03/16 18:46:53
しかし、本来これは「最小化されたときのアイコン」を設定するもの なんだよな。
ミニアイコン全般でそ? 起動用exeとフルアイコン、ミニアイコンを統一すれば何も困らなくなるね
700 :
696 :05/03/16 19:11:39
スクリプトシール(?)って何ですか?
702 :
デフォルトの名無しさん :05/03/16 22:20:34
1.5.0_02を使ってます。 T[] hoge = new T[size]; とすると 汎用配列を作成します。 ってエラーが出るんですけど、こういう処理を 実現する方法ってありますか?
>>702 1.5はこれできないの?
今まで多用してきたけど。。。
>>702 CollectionのVectorとかがVector<Integer> v = new Vector<Integer>();みたいになったと思うが。
それと同じ理由かどうかは俺にはわからない。
>>703 >>702 のいってるのは、Genericsのパラメータ化された型をつかって
配列が作れないってことだろ。
それは仕様。パラメータ化された型はすべてObjectとなるからね。
>>705 仕様なんですね orz
Javaでパラメータ型の配列って無理ですか?
Java Pressから抜粋。パラメータ化型の6つの制約。全部 Eraserのせいだけど、 これがないとJava 5.0のコードから1.4までのライブラリが使えなくなってしまうわけですよ。 1 型変数E に対して基本データ型を指定することはできない。 2 型変数E のオブジェクトを直接生成することはできない。 3 型変数E の配列を生成することは出来ない。 4 メソッドの戻り値として型変数Eの配列を返すようにしても、Objectの配列になる。 5 型変数は、staticメンバとstatic初期化子には適用できない。 6 イレイジャの結果、メソッドのシグニチャが同じになるメソッドは定義できない。 でもどうしても型変数Eの配列を作りたければ、リフレクションを使って無理矢理 作ることは出来る。
VMほんとうに最適化以外でいじってないからなぁ
ランタイムって自作プログラムと一緒に配布できます? 1M程度に収まるならそうしたいんですが
J2SEが1MBに収まるわけないだろう。
Erasure(「消去」という名詞)な。 Eraser(「消去する人/もの」という名詞)じゃないぞ。
ダブルクリックで動作するJARファイルを作ろうと思ったのですが どうしても[Failed to load Main-Class manifest attribute from パス名] となってしまいます。↓の内容で行っているのですが何か問題があるのでしょうか。 お助けください。 ディクトリ C:\Documents and Settings\Administrator\デスクトップ\manifest.mf C:\Documents and Settings\Administrator\デスクトップ\smp | ---MyMain.class mypackage | ―――MyAp.class sub | ―――SubAp.class コマンド C:\Documents and Settings\Administrator\デスクトップ>jar cvf smp.jar manifest.mf smp マニフェスト Main-Class: MyMain
完成したJARファイルの中身 C:\Documents and Settings\Administrator\デスクトップ>jar tvf smp.jar 0 Thu Mar 17 10:06:36 JST 2005 META-INF/ 71 Thu Mar 17 10:06:36 JST 2005 META-INF/MANIFEST.MF 20 Thu Mar 17 09:55:06 JST 2005 manifest.mf 0 Thu Mar 17 10:06:28 JST 2005 smp/ 527 Thu Mar 17 09:47:56 JST 2005 smp/MyMain.class 276 Thu Mar 17 09:47:52 JST 2005 smp/MyMain.java 0 Wed Mar 16 16:57:14 JST 2005 smp/mypackage/ 455 Thu Mar 17 09:18:54 JST 2005 smp/mypackage/MyAp.class 232 Thu Mar 17 09:18:36 JST 2005 smp/mypackage/MyAp.java 0 Wed Mar 16 16:57:14 JST 2005 smp/mypackage/sub/ 471 Thu Mar 17 09:18:54 JST 2005 smp/mypackage/sub/SubAp.class 250 Thu Mar 17 09:18:14 JST 2005 smp/mypackage/sub/SubAp.java
716 :
714 :05/03/17 10:18:42
すいません、下がっているようなのでageます
ディレクトリsmpはパッケージの一部なのか? その内容だと smp.MyMain というクラスでないと実行出来ないが。
jar cvfm smp.jar manifest.mf smp
719 :
714 :05/03/17 10:33:29
>>717 パッケージになっていませんでした。パッケージにして
その後
>>718 の方法でマニフェストを追加したら実行できました。
でも cvfmで別にマニフェストを追加しないとダメなのでしょうか?
721 :
714 :05/03/17 11:31:15
>>720 色々調べているうちにだいぶ分かってきました。ありがとうございます。
722 :
◆magic.fu7c :05/03/17 12:26:48
http://sterdust.net/に クラス名(){}はコンストラクタと書いてありましたが
変数=new クラス名()の()←の中に引数をいれるとどうなるんでしょうか??
あと
http://sterdust.net/にJAVA基礎編の関数についての項目にソースTest2.java class Test2{
int X1,X2;
int a,b,c;
Test(){
a=5;
b=3;
c=6;
X1=plus(a,b)
X2=plus(c)
reset();
}
int plus(int A,int B)
int C;
C=A+B;
return C;
void reset(){
a=0;
b=0;
c=0;
まだソースは下にあるんですが携帯なので省略させてもらいました もしこのソースが違うとお思いになりましたらお手数ですが
http://sterdust.net/でみて下さい 本当にすみません
で質問なんですが何故急にint A とint Bが現れたのでしょうか?? 実行する前に値をいれなきゃだめなんではないでしょうか??
あとvoidが返ると書いてあったんですがどういう意味なんでしょうか?よろしくお願いします
>変数=new クラス名()の()←の中に引数をいれるとどうなるんでしょうか?? 入れてみれば分かるでしょ、実行環境は無いの? だったらおじさんが丁寧に教えてあげるが ちなみにクラス名(){}だけがコンストラクタとは限らない >で質問なんですが何故急にint A とint Bが現れたのでしょうか?? 実行する前に値をいれなきゃだめなんではないでしょうか?? 仮引数です これも意味がわかんなかったらおじさんが丁寧に(ry >あとvoidが返ると書いてあったんですがどういう意味なんでしょうか? そのメソッドは特に返り値のデータを返しません と、このサイトに書いてある 最後にあくまで個人的意見だが Javaを勉強するのにこのサイトはやめた方がいい
724 :
722 ◆magic.fu7c :05/03/17 13:20:44
環境はあるとはいいがたいものなのでよければ教えて下さい コンストラクタと仮引数m(_ _)m ここのvoidは返らないんですか?よく分からないです… 一応目標はauのアプリを作る事なんですが いいサイトとしてここを紹介されたんです 何かいいサイトありましたら教えて下さい 質問の件よろしくお願いします
>>724 のコンストラクタ
まず、上記プログラムのコンストラクタ呼び出し箇所に引数を入れると
コンパイルエラーになります
理由は引数の型が違うからです このクラスのコンストラクタは
Test2() と規定されているので、引数はありません
ちゃんと型に従って使用しましょう
ちなみに一つのクラス中に引数の異なるコンストラクタを
複数持つ事もできます、例えば
class A {
A(){処理} //引数なしコンストラクタ
A(int a){処理} //int型引数を1つもつコンストラクタ
A(int a, int b){処理} //int型引数を2つもつコンストラクタ
A(double a){処理} //double型引数を1つもつコンストラクタ
}
というのもOK、この場合は
A a = new A(引数)
と書くと、指定された引数の数と型に合致するコンストラクタが
自動的に呼ばれます。でも上にも書いたけど、規定されてない引数を
指定するとコンパイルエラーになります
A a = new A(1,2,3) は引数の型に合致しないからエラー
わかった?
>>724 の仮引数
int plus(int x, int y){
int z = x + y;
return z;
}
この場合のxとyに値を代入してないのに使ってるけどいいのか?
って言うのが質問の意図だとおもって回答する
仮引数ってのは、メソッド名の後の()内に書く変数名の事で、
メソッドに渡された引数を受け取る箱だと思ってください
例えば、
int c = plus(10,20);
って呼び出しを行うとplusが呼ばれたときに、
x,yにそれぞれ10,20がそれぞれ代入されてから処理が開始されます
int c = plus(-1,5);
なら、x,yに-1,5がそれぞれ代入されます
わかった?
>>724 のvoid
メソッドは必ず何かを返すわけではありません
返すメソッドもあれば返さないメソッドもあります
返すメソッドの場合は、返却値のところに返す値の型を書く
返さないメソッドの場合は、返却値のところにvoidと書く
有名なSystem.out.println()なんかは、void型です
わかった?
728 :
デフォルトの名無しさん :05/03/17 14:10:10
こんにちは。 Tomcatのform認証で ドキュメントルートにlogin.htmなどとフォーム入力ページを置いて auth/*が認証をかけたい場所だった場合 フォーム入力ページに画像などを貼り付けると フォーム入力ページを表示する際URLがリクエスト先URLになってしまい画像がうまく出ません。 さらに認証を成功させたあとでフォーム入力ページで 使っている画像が見つからない404を起こしてしまう始末です(笑 フォーム入力ページの画像を絶対URL指定にするのは格好悪いと言うことで… 先輩方で動揺の経験をされた方はいらっしゃいませんか? 解決策を教えて頂けると非常に助かります
すいません、訂正です 誤 フォーム入力ページを表示する際URLがリクエスト先URLになってしまい画像がうまく出ません。 正 フォーム入力ページを表示する際、基準URLがリクエスト先URLになってしまい画像がうまく出ません。 www.hogehoge.net/auth/title.pngなどを引っ張ってこようとする
730 :
724 ◆magic.fu7c :05/03/17 14:16:10
もう少しコンストラクタの事を初歩から教えて下さい クラス名 変数=new クラス()でコンストラクタを作って変数で扱かえるよう扱いやすくしてるんですよね? でエラーになる理由はわかりましたが引数をよぶとどうなるんでしょうか?
.htmっていうのがアヤシイがそれはおいといてw www.hogehoge.net/login.htm www.hogehoge.net/img/title.png www.hogehoge.net/img/fugafuga.png www.hogehoge.net/auth/next.html とかじゃだめな理由は?
732 :
デフォルトの名無しさん :05/03/17 14:20:30
>>730 >引数をよぶとどうなるんでしょうか?
そのタイプ(int とか String とか)の引数を要求するコンストラクターを呼ぶことになりますが、
その引数を仮引数に持つコンストラクターのないクラスの場合はエラーとなります。
>>730 「引数をよぶ」とはどういうことでしょうか?
もう少し日本語の事を初歩から勉強してから戻ってきてください。
またはオブジェクト指向について勉強してからJavaしてください。
734 :
724 ◆magic.fu7c :05/03/17 14:20:56
付け足し たとえば
>>725 の
class A{
①A(){} と②A(int a){}はどう違うのでしょうか?? たとえば計算をする時に ①はint a=3とかかなければならない ②は a=3 でいいという違いでしょうか??そうする事で利点はなんですか??
>>734 メリットは外部から値を渡せるってことさ
>>724 のサイト
ここなんかオススメ
http://www5c.biglobe.ne.jp/~ecb/java/java00.html Java勉強する時は、文法的な事とオブジェクト指向的なことと
両方勉強しないといけないんだけど、ここはまずオブジェクト指向
すっ飛ばして文法的な部分を述べてる
で、文法をある程度マスターしたあたりで継承とかポリモーとか
オブジェクト指向について解説が始まる
そんな構成が
>>724 にお勧めな理由だ
今見てるサイトは、両方ごっちゃにして説明が進んでるから、
分かり辛いと思うよ
Javaをマスターして、いざauアプリ作成!となったら
今のサイトに戻ってみると良いかもね
>クラス名 変数=new クラス()でコンストラクタを作って変数で扱かえるよう扱いやすくしてるんですよね? コンストラクタは作ってない コンストラクタを呼び出して、そのクラスのインスタンスを作っているのだ
>>731 レスありがとうございます
www.hogehoge.net/auth/contents.jspにアクセスが来て
www.hogehoge.net/login.htmにリダイレクトしたときは
img src="../img/title.png"などと書けば出ますが
www.hogehoge.net/auth/sub/sub_contents.jspにアクセスが来て
同様にwww.hogehoge.net/login.htmにリダイレクトしたときは
img src="../../img/title.png"と書かないとダメになります
ということです、よろしくお願いします
739 :
◆magic.fu7c :05/03/17 14:30:37
みなさんありがとうございました
>>726 さんのサイトでまた勉強しなおしてきます
親切に教えて下さった方々本当に感謝しています 大雑把にはわかるんですが細かい内容がまだ不十分なので勉強しなおします
また書き込みするのでその時はまたよろしくお願いします
740 :
734 :05/03/17 14:33:22
自演乙
745 :
◆magic.fu7c :05/03/17 14:39:25
orz ありがとうございました
747 :
デフォルトの名無しさん :05/03/17 15:01:59
Vectorってとりあえず同期されているという事になってて、実際にソースを見ても メソッドはsynchronizedになってるみたいなんだけど、フィールドはvolatileとかで宣言されていない みたいなんです(見間違いだったらごめんなさい) これって、複数スレッドからいじったらフィールドの値が正しく変更されないと思うのですが、この考え はあたってますでしょうか?また、もしあたっていたとしたら、正しく変更されるようにするにはどうすればよいので しょうか?(Vectorを書き換えるとかは無しで) どなたか教えて下さい。
748 :
上に追加 :05/03/17 15:02:33
vectorをvolatileで宣言して使えばOKって事はないですよね?
>>723 > 最後にあくまで個人的意見だが
> Javaを勉強するのにこのサイトはやめた方がいい
同意。
変数名を大文字で始まる名前にしてたり、クラス名を小文字で
始まる名前にしている著者は、疑ってかかったほうがいいかも
と、私は思う。
>>747 > フィールドはvolatileとかで宣言されていないみたいなんです
そうですね。volatile はついてないね。
> これって、複数スレッドからいじったらフィールドの値が正しく変更されないと思うのですが、
> この考えはあたってますでしょうか?
synchronized やってれば、volatile までは必要にはならないんじゃ?
(逆に、volatile だけやって、synchronized やってないせいでおかしくなることはありうるけど)
「いじる」っていう動作を複数スレッドがほぼ同時に行おうとしても、必ず、どっちかのスレッドが
動作を完了しないと、他方のスレッドは動作が開始できないようになってるでしょ?
751 :
上に追加 :05/03/17 15:51:25
>>750 自分の理解ではvolatileというのは、各スレッドのローカルだけで変更されて
本元のデータが更新されていないという状況が、毎回本元への更新を行うようになる
ので避けられるというような宣言の事だと理解しているのですが違いますでしょうか?
つまりsynchronizedでメソッドを同期してようが本元が更新されてない状態で次のメソッドが
開始されてしまったらどうしようもないのではないかと私は思うわけですね。
volatileの本質的な理解が間違っているのでしょうか?
(・3・)アルェ~ public class HogeHoge { public int field1; ・・・・ public synchronized void setField1( int v ) { field1 = v; } public synchronized int getField1() { return field1; } ・・・・ }
753 :
747 :05/03/17 16:00:35
>>751 > 自分の理解ではvolatileというのは、各スレッドのローカルだけで変更されて
> 本元のデータが更新されていないという状況が、毎回本元への更新を行うようになる
> ので避けられるというような宣言の事だと理解しているのですが違いますでしょうか?
私も、大体そういうことだとおもいます。
もうちょい正確に言うと、ある変数が volatile 宣言されているなら、
・スレッドが変数の値を使う際には、毎回マスタコピーから読み取りを行うこと。
・スレッドが変数に値を代入する際は、毎回マスタコピーへの書き込みを行うこと。
が義務付けられているわけです。
> つまりsynchronizedでメソッドを同期してようが本元が更新されてない状態で次のメソッドが
> 開始されてしまったらどうしようもないのではないかと私は思うわけですね。
なるほど。ここの部分の理解が間違っているように思う。
> volatileの本質的な理解が間違っているのでしょうか?
volatile じゃなくて、synchronized の理解が間違ってるかと。。
synchronized なところに入る際と出る際には、オブジェクトのロックの設定と解除が
行われるだけでなく、 volatile で行われるような、スレッドの作業コピーへのマスタ
からの読み取り・ロードと、スレッドの作業コピーからの記憶・書き込みが義務付け
られている。
756 :
747 :05/03/17 16:27:46
>>754 なるほど、非常に分かりやすい説明ありがとうございます。synchronizedは
volatile宣言とおなじような機能を兼ねているのですね。
シリアルキー解析集「ALTEA」
大好評発売中!
http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960? 市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。
これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。
解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。
シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;
WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。
オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。
もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?
つまり volatileは共有ロック synchronizedは排他ロック という考え方はアリ?
759 :
デフォルトの名無しさん :05/03/17 17:10:51
2進法 0100の2の補数が 1011と書かれているサイトがあったのですが、 1100の間違いですよね。 釣りではないです。少し気になったので・・
そりゃ1の補数だな、1100で合ってる
>>759 まさかこの部分のことじゃないよな?
0100 1001
----------
1011 0110 <- 1の補数
1011 0111 <- 2の補数
1000 0000 -128<- 先頭ビットだけが0だと、そのビット内で最小の負の整数 これは確かに間違ってる
見やすくするために8bit数を2つに区切って記述してある と言うことを理解できなかったんじゃないかと
今気づきました。 4ケタって時点で気づくべきでした。 吊ってきます、わざわざサイトまで出向いて下さった方々ありがとうございました。 今ここ数年で一番赤面してます。
イ㌔
イ㌔
イ寺
イヒ
ヤンマーニ ヤンマーニ
質問させてください。 Delphiで固定長のデータを構造体定義に入れているプログラムをJavaに書き直してるんですが 間違っている or こうした方が良い などをご教授おねがいします。 実際にやりたいことはこの年月日のようなのが30個ぐらいあります。 Delphiでは@とかpcharとstrMoveをつかってやっていたんですが、Javaでは全部substringするのか?と。 その後、DBに書き込む事を目的としてます。 よろしくお願いします。 構造体定義をクラスにしてみました。以下がソースです。 public class Nengappi{ private int year; private int month; private int day; public void setNengappi (String strNengappi) { this.year = Integer.parseInt(strNengappi.substring(0,4)); this.month = Integer.parseInt(strNengappi.substring(4,6)); this.day = Integer.parseInt(strNengappi.substring(6,8)); } }
年月日だけでいいなら、SimpleDateFormatでparseするといいかもね。 一般的には、その方法しか無いんじゃない? あるいは無理矢理regexpつかってもいいけど。
>>776 ありがとうございます。やっぱりそうですか...。
実際には500byteぐらいのデータで項目もたくさんあるので、無理です。
Eclipseがsetterとgetterを作ってくれるので、個々のやつは作らなくても良いんですけどねぇ。
全体の固定長文字列をある文字数で区切り、String[2]で返すメソッドを作成して入れてみます。
固定長ならそれでいいんでない? インデックスとサイズとか引数でsubstringをうまく取得するようなクラス作ればええ Scannerはこの場合使わなくていいと思われ
779 :
デフォルトの名無しさん :05/03/18 02:21:58
質問です:
SUNのサイトでチュートリアルの日本語版ってないのでしょうか?
ざっと探したんですが見つかりませんでした。(JSFのはあったのですが。。)
英語版
http://java.sun.com/docs/books/tutorial/ 簡体or繁体中国語でもかまわないのですが。
仕事でお世話になった台湾の方(COBOLスキル)に学習+必須サイトの
リンクをまとめて渡そうとしているところです。
780 :
デフォルトの名無しさん :05/03/18 07:14:34
質問です Javaのリソースファイルのデフォルト拡張子.propertiesを他のものに変更することは出来ますか? 直接ファイルを指定するというのは出来ない状況です。 よろしくおねがいします
782 :
デフォルトの名無しさん :05/03/18 11:30:56
JAVAの内部エンコーディングってUTF-16だと思うんだけど、 例えばStringをシリアライズしてファイルに書き出して、 その後JAVAのバージョンアップで内部エンコーディングがUTF-32 とかになったら、そのUTF-16シリアライズされたStringは、 なんも気にしないで新しいバージョンのJAVAで読めることは保障されてるのかな? その辺のソースとかあったらおながいします。
>>781 できない。せいぜい独自の ResourceBundle サブクラスを作るくらい。
>>782 オブジェクトシリアライゼーションのフォーマットは仕様化されているはず。
どっかで見たが忘れたので探せ。
>>782 char/String はずーっと今の仕様のままで、UTF-32 が必要になったら
別の型を作るでしょ、きっと。
すでにJavaではUTF32はcharを使わないで コードポイントはint型であらわすという実装してまっせ
int count=0; String str="hogehogeonegai"; 1 if (str.indexOf("quit") != -1) {~} 2 if ((index=str.indexOf(";")) == -1){~} StringのindexOfメソッドについてお聞きします 例えば引数が"quit"だと1のようなif文の条件式で使えるのですが 引数が";"だと、戻り値を一度int型の引数に格納しないとうまくいかないです この二つは一体何が違うのでしょうか?教えてください
んな、アホな
788 :
デフォルトの名無しさん :05/03/18 17:15:30
>>786 ∧∧
ヽ(=゚ω゚)ノ″
~( ×)
U U
具体的にどううまくいかないのか教えて
質問するときに「うまくいかない」という言葉を使っちゃダメ。
そこ以外の部分がおかしいとしか思えない ソースごと晒してみれ
ごめんなさい プログラムはMysqlを使ったJDBCプログラムです public static void main(String args[]){ try{ jdbcドライバ登録、Mysqlとの接続などのコーディング //標準入力バッファ生成 BufferedReader breader=new BufferedReader(new InputStreamReader(System.in)); String sqlstr=""; int index=0; while (true) { sqlstr+=breader.readLine()+" "; if (sqlstr.indexOf("quit") != -1) { break;//while(true) } if ((index=sqlstr.indexOf(";")) == -1) { continue;//while(true) } いろいろなSQL文の処理コーディングや後処理など }(Exception e){} } //main文おしまい(クラスにはメインメソッドだけ) while無限ループは'quit'を入力するまで何度もSQL文を実行するためです 問題の二つ目のif文はSQL文を複数行に分けても大丈夫にするためです 私いちいちindexに格納しないif文 if ((sqlstr.indexOf(";") == -1) で、いいと思うのですが、こうすると 「いろいろなSQL文の処理コーディングや後処理など」が実行されずに終わってしまうのです
>>792 もちろん、indexを後で参照しないなら index に代入する必要なんてないよ。
if (sqlstr.indexOf(";") == -1) {
System.err.println("継続行: " + sqlstr);
continue;//while(true)
}
System.err.println("SQL処理: " + sqlstr);
とでもして、何が起きているのか確認してみなされ。
>>792 >「いろいろなSQL文の処理コーディングや後処理など」が実行されずに終わってしまう
これはどうやって判断してるんだ?
あと例外はほっとかないでprintStackTrace()を呼んでおけ
readLineだからじゃネーの
重要なコード一つ忘れてた。二つ目のif文の後
sqlstr=sqlstr.substring(0,index+1); //while文の一行目の最後の空白をとるため
すいません、自分のミスです
>>793 さんどうも
あと、起こりうる全ての例外処理書いてgetMessage使ったらSQLExceptionがひっかかりました
すいません、これも最初から確認しとくべきでした
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 's' at line 1
結局、MySQLのSQL文は';'で終了しないと駄目だという事(空白も駄目)
どうもお騒がせしました
JDBCでやってるかぎりSQLの最後にセミコロンもいらねーし 空白が入っても関係ねーよ
勝手な思い込みの激しいやつだなあ。
799 :
デフォルトの名無しさん :05/03/18 21:59:35
今よくあるボタンを押しただけでメールアドレスが分かってしまう機能って どうやって作るんですか? 教えてエライ人
800 :
おしえてください :05/03/18 22:00:39
無限ループをつかったアニメーションが動いてる状態で、 キー入力のリスナーでキーボード入力を受け付けるようにするにはどうすりゃいいでしょうか。 別々のスレッドにするしかないんでしょうか。 シングルスレッドで無限ループアニメーションをキー操作できるようにするいい方法、 ないでしょうか
>>800 素直に別スレッド作れ。
単一スレッドでやったとして、結局はスレッドと同じ仕掛けを自作するだけだ。
そこでポーリングですよ
どうも!! char型をstring型に変えたいのですが何かいい方法はないですか??
またボーダーか。
String.valueOf(どうも!!)
809 :
デフォルトの名無しさん :05/03/19 13:11:26
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| |
>>807 >>808 / ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
810 :
800 :05/03/19 13:33:46
800に書き込んだ者ですが、まだよく分からんことがあります。 スレッドを実装したアプレットで、run()の中で無限ループとsleep()をつかってアニメしてます。 initのなかでaddKeyListenner()とかを書いてるんですが、 これでもキー入力を受け付けてくれないみたいです。 どうすりゃいいんじゃ? 無限ループ入りのrun()が入ってる同じクラスの中にキーリスナーを入れてるのがまずいの? キーリスナーだけ別のクラスにいれるべきですか? 擬似コードでいいからちょっと例をみせてくらさい。
ところでおまいら配列宣言するとき Object[] objects Object objects[] どっちで書く?
>>810 > 無限ループ入りのrun()が入ってる同じクラスの中にキーリスナーを入れてるのがまずいの?
そんなことは無いと思う。
ソースを貼れば?
http://sourcepost.sytes.net/ 「ちゃんとキーイベントを受け取っているのに、それを正しく扱って
いないせいで、イベントを受け取れていないように見えしまっている。」
っていう可能性も、ソース見ればはっきりするだろうし。
>>811 読みやすいソースを心がけるときは、
Object[] objArr;
七行プログラミングするときは、他の配列ではない変数も一気に宣言したいので、
int a,b[],c[][];
815 :
800 :05/03/19 14:05:09
816 :
デフォルトの名無しさん :05/03/19 14:05:43
「 ServletContext app = getServlet().getServletContext(); 」 これは、オブジェクトの生成してるんですよね? 「?」.getServlet().getServletContext(); これって、どこのクラスのメソッド? 頭になにもつけなくていいの?
ズコー
818 :
800 :05/03/19 14:24:46
ああ、String型を比較するのは==じゃなくて.equals()メソッドでしたね。 でもそれを直しても動かないです。どうしてなの??
>>800 =815
str == "Right" とか str == "left" というとこがたぶんおかしい。
文字列比較は equals を使いましょう。
>>800 >>815 おまえがやりたいのは、もしかしてこういうことか?
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_R :
x = true;
break;
case KeyEvent.VK_L :
x = false;
break;
}
}
});
>>816 > これは、オブジェクトの生成してるんですよね?
ちがう。オブジェクトの取得。文法的には、取得されるオブジェクトが既に生成されているか、そのときに生成されるのかは関係ない。
このコードがServlet内の処理だったら、既に生成されていることがほとんどだが。
>これって、どこのクラスのメソッド?
javax.servlet.GenericServlet。(javax.servlet.http.HttpServletのスーパークラス)
スーパークラスのpublicなメソッドなので、サブクラスで直接使える。
匿名クラスって毎回インスタンスを生成してるみたいだけど、最初に一つだけ作ってほしいような...
>>820 自己レス。
ごめんなさい。
カーソルキーの左右で、赤丸の動きを操作したかったのね。
>>820 に書いたのは、「R」キーと「L」キーでの操作でした。
ってことは、こういうことかな?(
>>820 の switch 文だけ示す。)
switch (keyCode) {
case KeyEvent.VK_RIGHT :
x = true;
break;
case KeyEvent.VK_LEFT :
x = false;
break;
}
あと、或るスレッドが変数 x を変更し、別のスレッドが同じ変数 x を
参照するわけだから、x を volatile 宣言しないとイケナイよね。
824 :
デフォルトの名無しさん :05/03/19 15:42:14
\マークを文字列として扱いたい場合は\\でいいんだっけ?
>>824 そういう、やってみればすぐにわかることをいちいち聞くなよ。
>>824 そう、それで問題なし
>>825 そういう、やってみればすぐにわかることなら教えてやれよ。
つーか、基本文法くらいちゃんと勉強しろよ
Javaって、行末には;が必要だったっけ?
.| .| ∩___∩ | | ノ\ ,_ ヽ .| / ●゛ ● | .J | ∪ ( _●_) ミ 彡、 |∪| | / ∩ノ ⊃ ヽ ( \ / _ノ | | \ " / | | \ / ̄ ̄ ̄ /  ̄ ̄ ̄ ̄
javaって拡張子.javaだっけ?.javだっけ?
馬 鹿 が 集 ま る ス レ は こ こ で す か
これがどうしてもうまくいきません。おしえてください。 pablic static void mein(String args[]) { System.out.println("Hello World"); }
833 :
名前は開発中のものです。 :05/03/19 16:28:45
SDK1.4で、アプレットからフルスクリーンにすることは できませんか? アプリケーションのときのサンプルしか見つからなかったもので。
834 :
800 :05/03/19 16:59:42
>>820 >>823 どうもアリガトウゴザイマス。
確かにそういうことなんですが、
でもそう直してもやっぱりキー入力を無視してボールは動き続けてしまうのは、
どうしてなんでしょうか??
835 :
800 :05/03/19 17:27:17
>>820 >>823 >>819 すみません動いてました(w。
アプレットを一回クリックしてからでないとキー入力に反応しないだけでした・・・。
ありがとう!あなたたちは素敵だ!
836 :
デフォルトの名無しさん :05/03/19 17:31:33
Q.携帯電話でのmp3プレーヤソフトの実現可能性について教えてください。 SDカードにいれたmp3ファイルを読み出して演奏できるプログラムはあるのでしょうか?または作成はできるのでしょうか? ご存知の方教えてください。
キーワード 「うまくいきません」
人生がどうしてもうまくいきません。 おしえてください。 public class Life { public void run() { ... } public static void main( String[] args) { Thread th = new Life(); th.start(); } }
>>840 Threadの人生を継承していないからね・・・
>>840 「おれは天才だから先人の業績を継承する必要なんてないぜ」といって突っ走って
人生失敗した典型例。
public class Life { public void run() { throw new NullPointerException(); } public static void main( String[] args) { Thread th = new Life(); th.start(); } }
>843 それでもまだRunnableのインプリメントすらする気ないんかい。 走る~走る~、俺ーたーちー
tomcat や resin などのサーブレットエンジンを使う場合、 windows と NPTL実装のlinux で どちらが高速に動くかを教えていただけないでしょうか? 検証しているHPがあればそれでもかまいません。
(long)(Long.MAX_VALUE) * Math.random())とすると情報落ちって出ますか? Double.MIN_VALUEとそれよりひとつ大きい値で比べればいいのですが、 整数と違って4.9E-324とか表記だとそのひとつ大きい数との比べ方も分かりません。 4.9E-324 ← この表記法の名前もご存知でしたら教えてください。
(long)(Long.MAX_VALUE * Math.random()) こうですね。途中でへんな)が入ってしまいました。
Rectangle#intersects(当たり判定メソッド)が大変便利なのですが Rectangleが保持するのは矩形(寸法:Dimension)なので用途が限られます。 透過情報を無視するImageなどを使った intersectsと等価のメソッドを持つクラスってありますか?
>>848 プレイヤーマシンと敵マシンの衝突判定みたいなときの、
矩形だとぶつかったと判断される状態でも、
どっちかのマシンの絵の透明なところは、かぶっても衝突扱い
にしたくないっていうか、そういうこと?
あるクラスのあるメソッドで、String s = new String()した場合、sはメソッド内の処理がすべて終われば解放されますが、sの実体はいつ解放されますか?
>>851 その実体を参照している変数が一つも無くなったとき
(に、その実体は到達不能状態という状態になる。そのあと
ガベージコレクタが動いたとき、開放される。ガベージコレクタを
明示的に呼ばない限り、いつ開放されるのかは、わからん。
でも、そのうち開放されるんだから気にしない。気にするべきこと
は、もう絶対使わない実体があるなら、A.S.A.P.に到達不能状態
にしてあげること)。
>>851 GCが発動したとき。
一般的にGCはJavaがあらかじめ確保したヒープメモリが一杯になるか
System.gc()を呼び出した時に発動する。(System.gc()はRuntime.getRuntime().gc()を呼んでる)
# 世代型GCだとこっそりGCしてるかもしれんけど
856 :
デフォルトの名無しさん :05/03/20 13:43:00
私はプログラミングの初心者ですが…教えて欲しいことがあります。 それはタイトル通り、アクセス制御及びパスワード認証プログラミングについてです。 色々と詳しい事を教えていただけないでしょうか? ①自分でホームページをDreamweaver4で制作しています。 ②目的はWebショップ用です。 ③会員制にしようと思っています。 ④でも、資金はありません ⑤やる気はかなりあります! どうか色々と教えて下さい。本気な為、荒しは遠慮下さい
858 :
デフォルトの名無しさん :05/03/20 15:26:46
ある文字列の先頭一文字が あ~お だったら、 1 か~こ だったら、 2 といった風にあ行、か行ごとに数値を返すメソッドを作りたいのですが、 if(index.compareTo("あ")==0 || index.compareTO("い")==0 || index.compareTO("う")==0 …) return 1 else if( … のようにあ~わまで一つ一つ判別する方法しか浮かびません。 もっとスマートなやりかたあったら教えて下さい。
ないね 濁音や小文字が混ざってもいいならいくらでもあるけど
>>858 細かいことかも知れんけど、
(機能1)「文字列を渡すとその先頭の文字に対応した数値を返す」
というメソッドから、
(機能2)「文字を渡されるとその文字に対応した数値を返す」メソッドを括り出す
ってことは、やったほうがかっこいいと思う。
機能1を実現するメソッドでは、与えられた文字列の先頭の文字を取り出して、
取り出した文字を引数にして機能2のメソッドを呼ぶ。機能2のメソッドから戻って
きた値をそのまま機能1のメソッドの戻り値として返す。
>>859 たしかに。
「ぁ」から「ん」までの並び順を表示してみたけど、こんな並びになってるんだね。
ぁ:12353 あ:12354 ぃ:12355 い:12356 ぅ:12357 う:12358 ぇ:12359 え:12360 ぉ:12361 お:12362
public class Hiragana {
public static void main(String[] args) {
for (int i='あ'-1; i<='ん'; i++) {
System.out.println((char)i + ":" + i);
}
}
}
>>858 Shift_JISに変換してからint型にキャストしてから比較とか?
しかしUTF-16BEじゃたぶんできないな。
Vectorをメンバに持たせて、add("あいうえお")とか順番に登録していって
toIndex('あ')とかchar型渡すと、内部でデータベースと一致するまで
compareToを繰り返すクラスを作るのがソース的には使いやすいかもね
先にデータベースさえ作っておけば辺・つくり検索も出来るし
862 :
◆magic.fu7c :05/03/20 16:21:18
初歩ですが教えて下さい public static void main(String args[])でmain()のカッコの中にString args[]を入れると文字が扱えるようになるんでしょうか? このmainメソッドとは何ですか?本をみると実行する時に使いmainメソッドに情報を引き渡すと書いてあるんですがよく分かりません どうか教えて下さいよろしくお願いします
>>858 ---
public class CmpSample01 {
public static void main(String[] args) {
System.out.println( checkstr( "あか" ) );
System.out.println( checkstr( "かね" ) );
System.out.println( checkstr( "さけ" ) );
}
private static int checkstr(String index) {
Pattern pattern1 = Pattern.compile("^[あいうえお].*");
Pattern pattern2 = Pattern.compile("^[かきくけこ].*");
if ( pattern1.matcher(index).matches() ) {
return 1;
} else if ( pattern2.matcher(index).matches() ) {
return 2;
} else {
return 3;
}
}
}
---
実行結果
---
1
2
3
---
>mainメソッド 最初に実行されるメソッド >String args[] 実行時のパラメータ
よくよく考えればmain()ってインタフェースであるべきなんだよな
>>859 さん,860さん,861さん,863さん
レスありがとうございます。
「ぁ」や濁点考えてませんでした・・・。
863さんのやりかたでやってみようと思います。
ああ、なるほど。
868 :
862 ◆magic.fu7c :05/03/20 16:51:21
>>864 実行時のパラメーターとは?少し詳しくお願いします
java MyClass param1 param2 MyClassクラスのmainを実行すると args[0]に"param1" args[1]に"param[2]が入ってる
>>851 Stringオブジェクトは特殊でメモリ中の「Stringプール」と
いう特殊な領域に格納されるようです。
ですから、いったん作られたStringオブジェクトは、
その後二度と使われなくても、ずっとメモリ内にとどまります。
ガーベージコレクタが機能しません。
StringよりもStringBufferクラスの方がメモリの節約になります。
すなおに50音のハッシュテーブルつくればいいとおもうけどねえ。 あ => 1 い => 1 う => 1 え => 1 お => 1 か => 2 ... な具合で。
>>870 その考え方だとtoString()使えばそのうちアプリは異常終了するわけか
なんてつっこみはいらんか
System.out.println("あいうえおかきくけこ".indexOf("あ")); System.out.println("あいうえおかきくけこ".indexOf("い"));
ごめんなさい、またお邪魔します public class HOGEconnect{ //Field public ResultSet rset; String url,user,password; ~ //Method public String executeSQL(String sql){ try { connection=DriverManager.getConnection(url,user,password); Statement state=connection.createStatement(); boolean result=state.execute(sql); /****** 自分でテスト *****// //rset=state.getResultSet(); /* ここ */ connection.close(); connection=null; if(result){ rset=state.getResultSet(); }else{ int count=stage,getUpdataCount(); } ~ rsetを扱ったコーディング ~ }
Mysqlを使ったJDBCプログラムです メインメソッドからHOGEconnetクラスのexecuteSQLを呼び出して SQL文を実行したり表示させたりするものです (ドライバ登録、文字列の設定などは省略してます) 僕が読んでる本だとコネクションプ~リングを考慮し state.execute(sql); 実行された時点で、"ResultSet"に データベースからの結果がすでに返されてるのでコネクションは不要、と書いてあるのですが、rsetに値がはいらなくnullのままです その後、自分で rset=state.getResultSet(); を実行した後にconnection.close();を実行してみたのですが 一度結果が返されたrsetは、また、nullになってしまってます(デバックで確認) 結局、rsetを扱ったコーディングの後にコネクションを閉じるしかないんでしょうか? 参考書には、プログラムだけじゃなく上記のような説明もしっかり書いてあるので 実際の所どうなのか聞きたいです。教えてください ちなみに参考書はjava/JDBC+Mysqlプログラミング P.76
ResutSetはコネクションを閉じると中身は保障されない そういうのをやりたいときはRowSetを使うのだ
>>874 なんだかでたらめっぽいな、その本。よければその本のタイトルをプリーズ。
で、本題ですが、ResultSetはコネクションが残っている前提で使うものです。
java.sql.ResultSetのJavadocより
>ResultSet オブジェクトは、このオブジェクトを生成した Statement オブジェクトが
>閉じられるとき、再実行されるとき、あるいは一連の複数の結果から次の結果を
>取り出すために使われるときに、自動的に閉じられます。
だから、
>>875 の
>"ResultSet"にデータベースからの結果がすでに返されてるのでコネクションは不要
は明らかに誤り。javax.sql.RowSetという別のインタフェースの説明なら間違いではないですが。
JDBC使う場合の定石は
>>874 のコードと違うんですが、いざ定石のコードを探すとなると
見つからないな・・・これはfinallyが無いという致命的な問題があるし。
ttp://www.hellohiro.com/jdbc.htm
素早い回答どうもです。 変なところで改行しすぎorz・・・見にくくてスイマセンでした >ResutSetはコネクションを閉じると中身は保障されない やっぱりそうですか この参考書、サンプルのタイプミスもたくさんあったけど 重要な説明も間違って書くとは嫌ですね・・・ RowSetは初めて聞いたのでこれから勉強したいと思います 有難うございました
具体的にはCachedRowSetだな
881 :
868 :05/03/20 20:59:23
883 :
デフォルトの名無しさん :05/03/20 21:38:17
>>869 >>882 さんありがとうございました
なるほど受け渡すという事ですね 詳しくは分かりませんがある程度分かりました
884 :
881 ◆magic.fu7c :05/03/20 21:40:10
>>869 さん
何で[0]→1で[1]→[2]何ですか?[1]→2では?
まあ、単なるタイプミスだろうね。 そんなもの、実際にやってみればわかる。 実際にやってみようとして、どうすればいいか分からない場合は、 また聞けばよい。
886 :
◆magic.fu7c :05/03/20 21:45:59
確かにそうですね どうもありがとうございました
>>863 正規表現は理解できると使えますよね。
細かいことですが、
Pattern pattern1 = Pattern.compile("^[あいうえお].*");
は
Pattern pattern1 = Pattern.compile("^[あいうえお]");
で十分だと思いますよ。
こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。 こんなにネタがあればPythonの 未来も明るいと言えるよね。
>888 はい、Jythonの話は別スレでね。
コマンドライン引数を配列に格納する、という物凄い基礎的なものをつくってるんですが、 もし要素数が10個ならちゃんと10個受け取る、 30個あったとしたら30個受け取るようにする。 というようなものをVectorで作りたいのですが、どうしたらよいでしょうか?
891 :
デフォルトの名無しさん :05/03/21 00:03:57
J2ME J2SEで携帯ゲームを作りたいんですがAU携帯で動くHELLOWORLDの一番簡単なプログラムってどんなんですか?? 一応プログラムは公式サイトからとったのですが二つクラスが分かれていましていらない部分があると思うんです よければ教えて下さい
Stringをsplitしたのを空文字列だけすっとばしてVectorに追加するだけだよ
posix扱うjavaのライブラリってありますか?
POSIXの何?
897 :
BlackLightOfStar ◆ifsBJ/KedU :2005/03/21(月) 13:13:05
そらECMAScriptにJava対応がなされれば動くだろうけど 現状はNN系だけでは?
899 :
デフォルトの名無しさん :2005/03/21(月) 14:05:13
//テキスト形式のあるファイルから文章を読み込み、 //同一ファイルに書込みを行って保存したいです。 //以下のようなコードを書いたのですが、FileNotFoundExceptionが発生してしまいます。 //(プロセスはファイルにアクセスできません。別のプロセスが使用中です。) // どなたか解決策を教えて下さいませ。よろしくお願いします。 String myFile = "abc.txt"; BufferedWriter bw = null; BufferedReader br = null; try { bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(myFile))); br = new BufferedReader(new InputStreamReader( new FileInputStream(myFile))); String line; while ((line = br.readLine()) != null) { bw.write(line); if (perl.match("m!(色々)!i", line)) { bw.write(perl.group(1) + "色々"); } } } catch (Exception e) {
>>899 とりあえず、StackTrace 吐かせて、どの行でException が出てるか調べてみたら。
901 :
デフォルトの名無しさん :2005/03/21(月) 14:16:59
質問です。
ttp://www.hellohiro.com/javamail.htm ここのサイトのソースをコピペし、サーバー等を指定し実行すると以下のエラーとなります。
javax.mail.MessagingException: Exception reading response;
nested exception is:
java.net.SocketException: Connection reset
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1349)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1191)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:311)
at javax.mail.Service.connect(Service.java:233)
at javax.mail.Service.connect(Service.java:134)
at javax.mail.Service.connect(Service.java:86)
at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:144)
at javax.mail.Transport.send0(Transport.java:150)
at javax.mail.Transport.send(Transport.java:80)
送信した際にメールサーバとの反応時に何か起こっているということでしょうか?
WinXPのコマンドプロンプトのcharsetはMS932ですか? それをJavaの内部charsetにデコード(?)したいのですが、どうすればよいのでしょうか?
903 :
質問あげ :2005/03/21(月) 19:50:03
C だと関数名でその関数のポインタを示すことができ、 そのポインタをコールすることで関数を呼ぶ事ができる。 これを利用してポインタを配列にしておけば、呼ぶ関数を 数値で切り替えることができる。 これと同じような事って、Javaでもできるの?状態遷移を テーブルで定義したいんだけれど、switch~case じゃない 方法でできればとってもハッピーです。 教えてクンでスマソです。
javaを使ってID?会員制みたいなHPを作りたいんだけどプログラム辞典なんかで 調べたんだけど、載ってないんですけど・・・だれかわかる人いますか?
>>903 > これを利用してポインタを配列にしておけば、呼ぶ関数を
> 数値で切り替えることができる。
C++ では class を使って似たような事をする。Java でも同じ。
906 :
903 :2005/03/21(月) 20:00:49
>>905 レスどうもです。
クラスのインスタンス単位ではできるけれども、
メソッド単位での配列化はJavaでは「できない」
という事でしょうか。
>>906 Method クラスを使えばできるし、大概のフレームワークでは
実際にそれが使用されている。だが、やはり普通は多態で解決。
まわりくどい言い方しないで 「できない」とハッキリ言っとく。
>>903 つうか普通switchで処理切り替えができないか?という疑問が出てきたら、
すぐに設計ミスだと気づくだろ。
そういうのはインターフェースなり継承なりで解決するもんだ。
>>903 コールバックを受け取るクラスのインスタンスを配列に突っ込めばいいじゃん?
ActionListnerを複数配列に突っ込むみたいなもんだろ。
どうしてもCと同じ方法でないとやだ!とかいうんなら、リフレクションでMethod
オブジェクトを取り出して、そいつを配列に突っ込んどけばいいじゃん。
911 :
903 :2005/03/21(月) 20:40:30
>>909-910 なるほど、Listenerを配列にしておけばできますね。
>>907 ,
>>910 Method クラス(オブジェクト)というのは聞いた事無いので
ちと勉強してみます。
ありがとうございました!
912 :
デフォルトの名無しさん :2005/03/21(月) 21:28:35
double ant と double.ant は一緒の意味ですか??
913 :
デフォルトの名無しさん :2005/03/21(月) 21:28:54
doubleは型です
ソース互換を破壊してまで導入したassertが全く使われていない件について
915 :
デフォルトの名無しさん :2005/03/22(火) 18:19:52
サービスとして起動したtomcatからだとODBCを利用できないんですねぇ。 バッチ起動したtpmcatは利用できるけど。
>>915 そんなことはないと思うけど。サービスの起動アカウントを変えてみた?
917 :
デフォルトの名無しさん :2005/03/22(火) 20:42:21
918 :
デフォルトの名無しさん :2005/03/23(水) 03:27:57
コンストラクタで引数をつかいますよね?コンストラクタを作成する時に引数をいれるの←クラス名(String in) とします 型 変数; クラス()はちがうんでしょうか?← String in; public クラス名()とは違いますか??
え、Javaってベクタージャンプできないのか・・・
>>918 意味がよくわからないけど、
class Foo {
public Foo(String in);
}
と
class Foo {
String in;
public Foo();
}
なら全然違う。
前者は1引数コンストラクタだし、
後者はメンバ変数inと0引数コンストラクタだし。
>>919 ベクタージャンプの原理が理解できてるならば、できると考えるべき。
今回のはC言語と同じ文法で書けなくて躓いた頭の固い奴がいただけ。
922 :
デフォルトの名無しさん :2005/03/23(水) 11:13:38
public Dimension getMinimumSize() { return (new Dimension(300, 200)); } public void Count() { int a = 3+4; int b = 5*2; int c = a+b; } public void paint(Graphics g) { g.drawString("もんくあんのか!!" + c, 50, 50); } } } とやったら、("もんくあんのか!!" + c, 50, 50);のcが解決できませんとなります。 どうしたら、解決できますか?初歩的なことですみません。
923 :
おしえて厨 :2005/03/23(水) 11:16:11
DataOutputStream と ByteArrayOutputStream を組み合わせて int型の二次元配列からbyte配列を作る方法と ByteArrayInputStream と DataInputStream を利用して byte配列をint二次元配列に戻す方法がわからないんだけど、 誰かこんなオレに擬似コードでなげやりに教えたりとかしてください あるいは参考になるサンプルコードのアドレスをおしえたりしてください
>>922 cの寿命を考えてみい
Countで生まれCountで死ぬ漢変数だと分かるだろ
漢変数っていいな
926 :
http://www.geocities.com/tokyufubai/ :2005/03/23(水) 11:32:39
必要なページだけを主記憶にロードして実行し、 必要なページが主記憶にない場合は、主記憶にあるいらないページを ハードディスクに戻して、必要なページを主記憶にロードします。 このいらないページをハードディスクに戻すことを ページアウト(page out)といい、必要なページを主記憶にロードすること をページイン(page in) といいます。 また、これらをまとめてページング方式(paging) といいます。
927 :
デフォルトの名無しさん :2005/03/23(水) 11:52:16
public Dimension getMinimumSize()
{
return (new Dimension(300, 200));
}
public void paint(Graphics g)
{
int a = 3+4;
int b = 5*2;
int c = a+b;
g.drawString("もんくあんのか!!" + c, 50, 50);
}
}
}
こうすることですよね?
>>924 さん
でもCountから呼び出したいのです。どうしたら呼び出せますか?
>>923 2次元配列のサイズが固定な場合のサンプルな
読み出すときは配列のサイズわかんねーって場合は、書き出しておかないとダメだ
ByteArrayOutputStream ba_os = new ByteArrayOutputStream();
DataOutputStream d_os = new DataOutputStream(ba_os);
for ( int i = 0; i < size; i++ ) {
for ( int j = 0; j < size; j++ ) {
d_os.writeInt( in[i][j] );
}
}
d_os.flush();
byte[] out = ba_os.toByteArray();
d_os.close();
DataInputStream d_is = new DataInputStream( new ByteArrayInputStream( out ) );
for ( int i = 0; i < size; i++ ) {
for ( int j = 0; j < size; j++ ) {
in[i][j] = d_is.readInt();
}
}
930 :
デフォルトの名無しさん :2005/03/23(水) 12:15:53
>>923 それが人に教えてもらう言いかたですか?
931 :
デフォルトの名無しさん :2005/03/23(水) 12:25:10
class Abc { int a,b,c; public Dimension getMinimumSize() { return (new Dimension(300, 200)); } public void Count() { a = 3+4; b = 5*2; c = a+b; } public void paint(Graphics g) { g.drawString("もんくあんのか!!" + c, 50, 50); } } } こうすると、cが0になってしまいます。どうしたら、計算した値をCountから持ってきて表示できますか? 本当にばかでごめんなさい
>>931 それでいい
ただ、paintが呼ばれているのがCount()を呼ぶ前なんじゃないのか?
このAbcを使っているクラスのほうの問題だ
paintの前にCountを呼んでないんじゃねーの?
934 :
デフォルトの名無しさん :2005/03/23(水) 12:45:16
import java.awt.*; import java.awt.event.*; class uuuuuu extends Frame { public static void main(String args[]) { uuuuuu app= new uuuuuu(); app.show(); } public uuuuuu() { setTitle("Mozi"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); add(new uuuuuuCanvas()); pack(); } }
>>916 それらに書かれていることは理解できているでしょうか。
最初のは、サービス起動云々とは関係ないですね。手動で起動しても同じことです。
次の質問については私が指摘したことと同じですね。要するに、サービスの起動
アカウントとしてデフォルトで設定されるSYSTEMアカウントでは権限不足なのでは
ないか、ということです。
936 :
デフォルトの名無しさん :2005/03/23(水) 12:46:00
class uuuuuuCanvas extends Component { int a,b,c; // Component public Dimension getPreferredSize() { return (new Dimension(200, 100)); } // Component public Dimension getMinimumSize() { return (new Dimension(300, 200)); } public void Count() { a = 3+4; b = 5*2; c = a+b; } // Component public void paint(Graphics g) { g.drawString("もんくあんのか!!" + this.c, 50, 50); } } この二つのクラスを使っています。どこがだめなんでしょうか?
クラス名がおかしい。あとJavaやってるならJava流の命名規則でやりなさい。 人に見せるときに失礼だから。
Count()はどこでよんでるの? ただ、推奨サイズとか指定しているちゃんとしたアプリで意外とびびた。 アプリケーションなようだし、Canvas使ってないとかそこまでやるならSwingのほうが いいような気もするが
939 :
& ◆Di83K0DpQA :2005/03/23(水) 12:55:46
>>928 ありがとうございます。
で、もうひとつ質問
import java.io.*;
class test1 {
public static void main(String args[]) {
int data[] = {1,2,3,4,5};
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(bout);
try {
for (int i = 0; i < data.length; i++)
dout.writeInt(data[i]);
} catch(IOException e) {
}
byte[] buf = bout.toByteArray();
for(int j = 0; j<5; j++) {
System.out.println(buf[j]);
}
}
}
とやると、
00010
と表示されます。
どうして
12345
にならないの??
940 :
デフォルトの名無しさん :2005/03/23(水) 12:56:22
>>937 はい、わかりました。
>>938 Canvasって書いてあるのはなんとなく書いてみました。
Count()をpaint(Graphics g)のなかで呼んでみます。
941 :
デフォルトの名無しさん :2005/03/23(水) 12:59:56
public void Count() { a = 3+4; b = 5*2; c = a+b; } public void paint(Graphics g) { Count(); g.drawString("もんくあんのか!!" + this.c, 50, 50); } これでできました! このほかにも呼び出す方法ありますか?
いや、メソッドよんでないと実行されないから。 もしかしてもともとのソースかなんかはCountクラスだった予感。 コンストラクタで処理してる気がする。
943 :
デフォルトの名無しさん :2005/03/23(水) 13:07:03
もともとは、Countメソッドは無く自分で追加しました。 いろいろありがとうございました。
Count()ってメソッドなのに何回呼んでも同じ仕様ってのはなんなのかw
945 :
デフォルトの名無しさん :2005/03/23(水) 13:23:39
946 :
おしえて厨 :2005/03/23(水) 13:39:44
>>939 に追記
0
0
0
1
0
0
0
2
:
:
という風になっていることは分かったんだけど、なんで3つ跳びに
格納されてしまうのか、それがわからないんですけど
intでシリアライズしてバイトで取り出したらそうなるのは当たり前 むしろバイトオーダーが決まってるJavaでよかったな、とおもた
byte = 1byte int = さてなんでしょう
Javaってバイトオーダーが決まってるの? ByteBufferのデフォルトがBigなのは知ってるけど 全部がそうなのか
950 :
& ◆hJb7GWrzxo :2005/03/23(水) 13:55:26
なるほど納得。 みなさまどうもありがとう
951 :
918 :2005/03/23(水) 14:02:02
>>920 どう違うか詳しくお願いします
>>920 が同じと書いてあった本がありましたが違う本には違うと書いてあったのでよろしくお願いします
>>951 inの寿命を考えてみろ
上のはFooで生まれFooで死ぬ漢変数だ
953 :
デフォルトの名無しさん :2005/03/23(水) 14:07:51
>>952 なるほど 分かりましたありがとうございました
954 :
デフォルトの名無しさん :2005/03/23(水) 17:01:39
955 :
デフォルトの名無しさん :2005/03/23(水) 19:36:02
>>935 おお、なんかログオンタブのアカウントのところをいじったらサービスでもできるようになりました。
ありがとうございます。
>>949 VM内部の話ならば
言語仕様として直接触れる手段がないので
VMの実装の都合でどっちになっていてもよい。
ByteBuffeをはじめとする外部との入出力を扱うAPIでは
すべてBigというかネットワークバイトオーダーが標準。
シリアライズはちゃんとメソッドごとに丁寧にビッグエンディアンって書いてあるしなぁ APIマニュアルよんでないとしかおもえん
958 :
おしえて厨 :2005/03/23(水) 20:58:53
アプレットをFrameやJFrameに書き換える際のコツをおしえてください。
959 :
デフォルトの名無しさん :2005/03/23(水) 21:15:37
>>958 main()メソッド内で
FrameやJFrameにAppletを乗せちゃえばいいんじゃないの
でAppletのinit()を呼んで、Frameをvisibleにする
サーバー側 class multicastServer{ static final int MULTI_PORT = 10000;//マルチキャスト接続用ポート番号 static final int BUFSIZE = 1024; //バッファサイズ public static void main(String[] args) { byte[] buf = new byte[BUFSIZE];//送信バッファ try { InetAddress ipadr = InetAddress.getByName("224.0.0.1"); //IPアドレス設定 while(true){//何度でもキー入力 System.out.print("send>"); k = System.in.read(buf); //キー入力 int len = buf.length; //データグラムパケット設定 DatagramPacket packet = new DatagramPacket(buf,len,ipadr,MULTI_PORT); MulticastSocket sock = new MulticastSocket(); sock.setTimeToLive((byte)1); //TTL sock.joinGroup(ipadr); sock.send(packet); //データ送信 sock.leaveGroup(ipadr); ~続く
961 :
960 :2005/03/23(水) 21:37:47
クライアント側 class multicastClient{ static final int MULTI_PORT = 10000;//マルチキャスト接続用ポート番号 static final int BUFSIZE = 1024; //バッファサイズ public static void main(String[] args) { try { //マルチキャストソケット設定 MulticastSocekt sock = new MulticastSocket(MULTI_PORT); //IPアドレス設定 InetAddress ipadr = InetAddress.getByName("224.0.0.1"); sock.joinGroup(ipadr); byte[] buf = new byte[BUFSIZE];//受信バッファ while(true){ //データグラムパケット DatagramPacket packet = new DatagramPacket(buf,buf.length); sock.receive(packet); //データ受信 String recvdata = new String(packet.getData()); ~続く
962 :
960 :2005/03/23(水) 21:38:08
UDPマルチキャストのサーバ・クライアントモデルについて教えて下さい サーバ側で何かキーボード入力し(send>プロンプト)てクライアント側に表示させるだけのプログラムです サーバ側で入力してもクライアント側の sock.receive(packet); でプログラムが止まってしまいます(両プログラムを同時デバックして確認済み) 別に例外処理されるわけでもなく止まってしまうんです サーバー側はしっかり動作しているようで何回でもキー入力はできます ちょっと原因がわからないので教えてください。おねがいします
キーボード入力のオブジェクトはbrが主流のようですが、 ファイル処理はどうなんでしょうか? ファイル書込はbwでいいと思うんですが、読込はbrでかぶるんですよね・・・
変数名のことか?
はい、そうです
fとかkとか
>>963 brが何の略か考えないの? キーボードとかファイルとか
関係なく単にBufferedReaderのインスタンスってだけでしょ。
968 :
& ◆hJb7GWrzxo :2005/03/24(木) 10:08:30
>>959 アプレットをswingにそのまま移植しようとすると
staticでない何々をstaticコンテキストから参照することはできませんエラーが
ズラーッと並んでしまいます。
init()の中身をmain()にコピーし
メソッドを全部そのまま貼り付けただけなんだけどこれじゃ不味いのかな?
ちなみに
たくさんのクラスに分かれてるわけでもなく
ひとつのクラスの中にぜんぶぶちこんでるコードです。
969 :
963 :2005/03/24(木) 10:09:16
何の略かぐらいは分かってます ただ、キーボード入力もファイル読込もおなじBufferedReaderなんで同じbrを使うわけにはいかないんで、一般には何が使われているのかと思ったんです
好きなもん使えよハゲ
971 :
おしえて厨 :2005/03/24(木) 11:25:26
>>968 に追記
もしかして「 staticでない何々をstaticコンテキストから参照することはできません」
のstaticコンテキストには
main()も当てはまるってこと?
public static void main()からは同じクラスにあるmainの外のフィールドやメソッドを参照できないのですか
>>971 以下のコードを正しいと思うか?
思うんだったらコンパイルしてみれ
class T {
int x;
public static void main(String[] args){
x = 0;
}
}
クラスは雛形のはずなのにstaticはいきなり実体だからな 住所が同じなだけの他人様ってのはいつか仕様として疑問視されるかもな
975 :
デフォルトの名無しさん :2005/03/24(木) 11:59:25
同じクラスやそのサブクラスで共通の変数を持ちたい時はその変数を static にすればいいですが 異なるクラス同士で共通の変数を持ちたい場合はどうするのですか?
>>969 ハンガリー記法っぽく、brKeyInput,とかbrFileReadでどうだ?
>>975 設計が変な気もするが、シングルトンクラスかな。
978 :
& ◆hJb7GWrzxo :2005/03/24(木) 12:10:09
C言語のグローバル変数とかグローバル関数のノリでついやっちゃったよ・・・ そうか駄目なのか・・・
979 :
おしえて厨 :2005/03/24(木) 12:31:28
repaint()みたいなメソッドがstaticでないからって main()から呼べないのはどうにかならんのですか
インスタンスを作ってから呼べ mainから直接呼ぶのは無理だ
981 :
◆magic.fu7c :2005/03/24(木) 13:10:27
staticについて教えて下さい オブジェクトが作成されなくてもメソッドをよびだせる と書いてあるんですが だったら全部staticをつけたらいいんじゃないですか?いちいちnewをつけて作るのがバカらしくなるんじゃないでしょうか? 御回答よろしくお願いします
Javaはオブジェクト指向言語でそう言う仕様にしている。 嫌なら、手続き型言語をやればいいじゃない。
>>981 マリオとルイージが常に同じ動きしてたらヤじゃん
>>983 的確だが飛躍しすぎでわけ分からんと思うぞw
>>981 おお、キミか。例のサイトは勉強になったかい?
staticメソッドは、名前の通り静的なメソッドだ
入力が同じなら処理も結果も(返却値があればそれも)全く同じになる
それと上の方に既出だが、クラス内のstaticじゃないフィールドやメソッドは使用できない
対して非staticメソッドは入力が同じでもインスタンスによって
処理や結果が異なる(可能性がある)
また、クラス内のフィールドやメソッドを自由に呼び出せる
>>983 のマリオとルイージの例が分かりやすいね
つづく
986 :
つづき :2005/03/24(木) 14:07:42
class PlayerCharacter { public PlayerCharacter(int x){ jumpHight = x; } private int jumpHight; void jump(){ jumpHightだけジャンプする処理 } } というクラスがあって、 PlayerCharacter mario = new PlayerCharacter(10); PlayerCharacter luigi = new PlayerCharacter(20); mario.jump(); luigi.jump(); と言うように使うと、同じjumpというメソッドを使用している にもかかわらず、ジャンプする高さは違う これは使用するインスタンスが違うから staticメソッドだとこうは行かない ところでクラスとインスタンスの違いは理解できたんだよね?
>>981 そうしたいなら、そうすれば良い。
>>981 がまわりから馬鹿だと思われたり、
天災だと思われたりするかもしれんが、
こっちの知ったこっちゃ無いし。
988 :
960 :2005/03/24(木) 14:27:56
僕にも構ってください
Charset charset = Charset.forName("UTF-8"); CharsetEncoder encoder = charset.newEncoder(); CharsetDecoder decoder = charset.newDecoder(); String str = "あいうえお"; String enstr; String destr; Charset系のクラスを用いて プラットフォーム毎のデフォルトエンコーディングと UTF-8とのエンコード・デコードをしたかったのですが encoderのほうはCharBufferを引数にとって decoderのほうはByteBufferを引数にとるようで なんだかわけがわからなくなりました。 これらをうまく使ってenstrにUTF-8、 destrにUTF-8からプラットフォームのエンコーディングに それぞれうまく変換する方法を教えてください。
990 :
981 ◆magic.fu7c :2005/03/24(木) 14:32:07
>>982-987 ありがとうございました
今からauのJAVAの勉強をしはじめるくらいです 基礎はだいたい分かったつもりなので
>>989 別の文字コードに変換したなら、それは Java 的には文字列ではなくバイト配列として扱わなければならない。
String str = "あいうえお";
byte[] utf8 = str.getBytes("utf-8");
byte[] sjis = str.getBytes("Cp943C");
プラットフォームデフォルトエンコーディングの書き忘れ byte[] def = str.getBytes();
評判が良かったので、「なぜ、あなたはJavaでオブジェクト指向開発ができないのか」という本を買ってみた。 コンピュータにジャンケンをさせるという簡単なプログラムで、非オブジェクト指向とオブジェクト指向のソースを書き、 二つを比較しオブジェクト指向の利点が具体的にとても分かりやすく解説されているので、 Javaの基本は分かってるけどオブジェクト指向の何が良いのか分からないって人にはちょーお勧め。 なんか宣伝っぽくなってスマソ。
994 :
◆magic.fu7c :2005/03/24(木) 14:38:45
)
>>986 はいクラスやインスタンスの違いは分かりました
今は細かい事が分からない(?)んです もう少し勉強しますんでまたよろしくお願いします
995 :
980 :2005/03/24(木) 15:08:39
>>991 そのやり方だとなぜかなんか奇数文字だったり、「う」が入ったりすると化けるようなのです
byte[] utf8 = str.getBytes("UTF-8");
str = new String(utf8,Charset.defaultCharset().name());
System.out.println("DefEnc:"+str);
byte[] defEnc = str.getBytes(Charset.defaultCharset().name());
str = new String(defEnc,"UTF-8");
System.out.println("UTF-8:"+str);
なんでうまくいかないんでしょう?
997 :
& ◆QWv3R1XL8M :2005/03/24(木) 16:13:41
お
998 :
& ◆QWv3R1XL8M :2005/03/24(木) 16:14:36
わ
999 :
& ◆QWv3R1XL8M :2005/03/24(木) 16:15:13
り
Java大好き。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。