1 :
デフォルトの名無しさん :
2010/03/16(火) 10:23:04
┌┴┐┌┴┐┌┴┐ -┼-  ̄Tフ ̄Tフ __ / / _ノ _ノ _ノ ヽ/| ノ ノ 。。 /\___/ヽ /ノヽ ヽ、 / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ | ン(○),ン <、(○)<::| |`ヽ、 | `⌒,,ノ(、_, )ヽ⌒´ ::l |::::ヽl . ヽ ヽ il´トェェェイ`li r ;/ .|:::::i | /ヽ !l |,r-r-| l! /ヽ |:::::l | / |^|ヽ、 `ニニ´一/|^|`,r-|:
CMあけました〜
前スレ997 >クラスに属さないメソッドって作れないの? PHPやらVBみたいなグローバルfunctionや C#みたいなデリゲートやラムダ式のこと言ってるなら無理 できて匿名クラスつくってメソッドを定義するくらい
TransformerFactory が内部で XML から Java バイトコード生成するようになってくんねーかな。 これやると砂箱で動かなくなるんだっけ?
×XML → ○XSL
XSL ⊂ XML
>>7-8 SunのJREのXSLTって中身はXalanだよね?
XalanのXSLTCは使えないんだっけ?
コンパイルしてた気がするが
JAXB2.2RIに入ってるサンプルのAntが通りません <taskdef>のところで詰まってしまうのですが、教えてください Antは1.7.1つかってます。クラスパスが通ってないことはさすがに ないとおもいます。 taskdef A class needed by class com.sun.tools.xjc.XJCTask cannot be found: org/apache/tools/ant/DynamicConfigurator using the classloader AntClassLoader[D:\...略...\jaxb-api.jar; D:\...略...\jaxb-impl.jar; ...略... ]
jaxb-xjc.jarをlib.dirにおけ
>>14 サンプルはJAXBのフォルダの中にはいっていまして、
サンプルのbuild.xmlではそのまま動くように相対パスでつながっています
#jaxbフォルダ
# +lib
# jaxb-xjc.jar
# *.jar
# +samples
# +class-resolver
# build.xml
# +other-sample
# build.xml
>>384 うぅっ、やっぱりそうでしたか・・。
友人から種をもらったので軽い気持ちで育ててしまいましたが、
よく考えれば当たり前ですよね・・。
しかし、成体になるまで育ててしまったものを今さらどうしていいのやら・・
日曜の朝、エサを用意しわすれてでかけたら、
夜帰った時には80cm以上も移動していました・・・。
>>15 jaxb-impl.jarがlibにない。
というかググレカス。いくらでも出てくるわ。
>>18 あるよ
jaxb2.2にあるlibフォルダには以下6つが最初からはいってる
https://jaxb.dev.java.net/ activation.jar
jaxb1-impl.jar
jaxb-api.jar
jaxb-impl.jar
jaxb-xjc.jar
jsr173_1.0_api.jar
class A{ void a(){} class B{ void a(){} void b(){ a(); /**/ } } } /**/の部分はBのa()が呼ばれるじゃないですか ここでAのa()が呼ばれるようにしたいんですがどうすればいいでしょうか
A.this.a();
JDK6にもともとjaxbがはいっているらしいから ライブラリいれちゃだめなのかも・・・
その辺はスマートじゃないよな。馬鹿除けにエラー出すなり、無効にしてくれればいいのに。
Query query = pm.newQuery("select parametor1 ,parametor2 from "+ kurasu.class.getName()); Collection results = (Collection)query.execute(); for (Iterator i = results.iterator(); i.hasNext();){ 処理部分 } JDOでこのように値を取得しました。 parametor1はString、parametor2はlongです。 処理部分のところにブレークポイントを設定したところ、i.nextの部分にobject[ String, long]と値が確かに入っている事が確認できました。 この二つの値を取得または書き換えたいのですが、どうすればいいのでしょうか?
26 :
デフォルトの名無しさん :2010/03/19(金) 10:33:58
RMI通信ってシリアライズでデータを送ってますが、 シリアライズするとき送受信するクラスのバージョンわ合わせないといけないって聞いたことがあります。 そこで疑問ですが、 引数がString、Date、List、Mapの基本形の場合はJDKのバージョンが違うものでも 問題なくシリアライズできますか? シリアライズでエラーになる場合というのは、JDKのバージョンじゃなくクラスの型の定義が変わったときでしょうか?
>>26 やってみりゃいいじゃん
Javaのバージョンにもよると思うよ
おれならreadObjectとwriteObjectを書くよ
28 :
25 :2010/03/19(金) 14:23:18
Object[]でキャストしたらできた。 失礼しました。
>>26 JDK のバージョンは関係ない。クラスの型定義が変わると互換性がなくなる。
JDK のバージョンアップで String, Date などの型の内部構造が変われば受信側で復元不能。
落としてきたjaxb2.2を棄ててJDKにクラスパス通したら動いた Webの資料が古かったんだろう
32 :
デフォルトの名無しさん :2010/03/20(土) 14:57:05
J2EE5を使っていますが、JavaのAPIのソースコードはどのようにすれば見られますか。
昔の話題だとJ2EEにはsrc.jarは無いらしい。J2SEからなんとか移植して使う模様。 MacのJ2SEはsrc.jarが入っていないという話はあるが・・・
あー、以前に探したがなかったので Win 版の src.jar 使ってステップインとかしてるかな。> Leopard 行ズレ起きまくりだが無いよりマシと何とか推測しながら見てる。
35 :
デフォルトの名無しさん :2010/03/20(土) 21:14:02
すみません、質問させてください 今、Linux上でゲームを作ってるのですが、 ウインドウを最小化した後、元に戻すとキーイベントを感知してくれず無反応になります。 Windowsでは再現しない、Linux特有の物のようなのですが・・・ いろいろ調べた結果、フォーカスを失った時に一度キーリスナーの登録を消して、 またフォーカスを得た時に、キーリスナーを登録すればいいという記事を見つけ改良してみました しかし、それでも症状は改善されません・・・ どなたか、アドバイスいただけませんでしょうか?
明日ならいいお
最小セットの再現コード書いてみ。 「ウチでは再現しない」で終わりそうだが。
>>35 >Linux特有の物のようなのですが・・・
そんなバグあるんだね〜
もしかしたら、linuxでも他の環境だったら動くかもしれないから、
*.jarに固めてうpしてみたら?
39 :
35 :2010/03/20(土) 22:35:50
では、テストモデルで症状の出てる物を張り付けますね 少し長いです・・・ import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Hoge extends JFrame { public static void main(String[] args) { new Hoge(); } public Hoge() { this.setSize(200, 100); this.add(new MainPanel()); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev) { System.exit(0); } }); this.setVisible(true); } }
40 :
35 :2010/03/20(土) 22:36:36
class MainPanel extends JPanel implements FocusListener, KeyListener { KeyListener kl=null; public MainPanel() { kl=null; setFocusable(true); this.addFocusListener(this); } public void focusGained(FocusEvent ev) { if (kl==null) { kl=this; this.addKeyListener(kl); this.setFocusable(true); } } public void focusLost(FocusEvent ev) { this.removeKeyListener(kl); kl=null; } public void keyPressed(KeyEvent ke) { //super.keyReleased(ke); int kc=ke.getKeyCode(); System.out.printf("key:%x\n", kc); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } }
41 :
35 :2010/03/20(土) 22:38:19
起動当初は、思惑通り動きます。 でも、一度最小化などすると無反応になります・・・
>>41 これって、ウインドウをクリックすればいいだけ何だよね?
一応、コンソールに何か出力されるか見ていたけど、特に何も表示されなかった
起動した直後でも
43 :
35 :2010/03/20(土) 23:02:52
>>42 あれ?
起動直後、何かキー押してもコンソールに何も表示しませんでした?
>>43 あぁ、ごめんキーボードを押すんだね
クリックだけしてた
コードを読んでないもので
45 :
35 :2010/03/20(土) 23:19:50
>>43 ウインドウを最小化した後に、またウインドウを元に戻せばいいんだよね?
その後に、エンターキーを押したら普通に動いたよ
$uname -a(の略)
Linux yamada 2.6.32-gentoo-r7 x86_64 Intel(R) Core(TM) i7 CPU 860 GNU/Linux
kde 4.4.1
sun-jdk 1.6.0.17
------------------------------------------------------------------------------------
どうでもいいことなんだけどさ、
>public void windowClosing(WindowEvent ev) { System.exit(0); }
これって、System.exit(0);は必要ないんじゃね?
>KeyListener kl=null;
>public MainPanel() {
>kl=null
3行目のkl = nullってまったく意味ないじゃん
String[]の配列を重複削除するにはどうすればいいですか? HashSetを使いますがうまくいきませんです。 String[] h1 = {"a","b","c"}; String[] h2 = {"a","b","c"}; String[] h3 = {"a","a","a"}; Set<String[]> set = new HashSet<String[]>(); set.add(h1); set.add(h2); set.add(h3); set.add(h1); System.out.println("サイズ="+set.size()); Iterator ite = set.iterator(); while(ite.hasNext()){ String[] obj = (String[])ite.next(); System.out.println(""+obj[0]+"/"+obj[1]+"/"+obj[2]); } これを実行すると サイズ=3 a/b/c a/b/c a/a/a になります。h1とh2が別物とされてるみたいですが、 これを回避するにはどうすればいいですか?
47 :
35 :2010/03/20(土) 23:27:02
>>45 見ていただいてありがとうございます
あれ?
最小化して、また戻してもうまく動きました?
おかしいなぁ・・・
Linuxでもディストリで違うのかな・・・
ubuntuだけで出るのかな・・・???
$uname -a
Linux laptop 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686 GNU/Linux
その他、意味のない部分とかは・・・
症状の出る最小コードを適当に作った時のゴミが残ってたりするので
あまり気にしないでください^^;
>>46 ああ、どうすればという話かスマソ。
デリミッタで繋いで比較か、equalsをオーバーライドして比較出来るようにした
クラスに格納して突っ込む。
50 :
46 :2010/03/21(日) 00:09:18
大変失礼ではありますが 大馬鹿者に教えるつもりで 御指導ねがいます。
例えば、配列の順序まで比較対象とする場合は static class Comp { public String[] val; public Comp(String[] val) { this.val = val; } public boolean equals(Object o) { if (!o.getClass().equals(Comp.class)) { return o.equals(this); } else { Comp c = (Comp)o; if (c.val.length!=val.length) return false; for (int i=0; i<val.length; i++) { if (!val[i].equals(c.val[i])) return false; } return true; } } public int hashCode() { return 0; } } として、 set.add(new Comp(h1)); して Comp c = ite.next(); String[] obj = c.val;
また、順序や個数にかかわらず(例、{"A","B"}=={"B","A","A"}みたいに) 比較しても良いなら static class Comp extends HashSet<String> { public String[] val; public Comp(String[] val) { this.val = val; for (String str : val) { add(str); } } } とすることもできる。 色々な条件が考えられるので、ここでは考え方だけね。
53 :
46 :2010/03/21(日) 00:57:35
もっと単純にできると思ってたんですが、 力技なんですね。。。 回答頂きありがとうございましたん。
>>35 他に複数のリナックス環境(ハードソフト共に)で出るかどうか確認してみては?
環境依存かもしれない。
単にウィンドウマネージャのフォーカスはずれてしまうだけの様な。 全画面描画にして、ウィンドウマネージャの管理下から外れたら?
その環境でシャットダウンフック正常に機能する? するなら単にフォーカスが失われたままになってるだけだからウィンドウマネージャの問題だと思う。
58 :
35 :2010/03/21(日) 09:01:18
う〜ん、フォーカスを得るとコンソールに文字列出すようにすると、 ちゃんと文字列出すんですよ 失う時にも、ちゃんと文字列を出します。 でも、なぜかキーリスナーだけ登録してもキーを拾わないのです・・・ この症状、誰か他にも上記のソースで出てる方います??
IMなにつかってる?SCIMだと入力に問題が出ることがあるよ。
60 :
35 :2010/03/21(日) 10:46:50
>>59 まさしくソレ!
30分ほど前に、それに気づいて今改良してました^^;
IBusに切り替えたら、コロっと改善されました
調べていると、一応JAVAのバグっぽいですね
SCIMで対応するか、JAVAで対応するかになるようですが、
SCIMはもうメンテしてない様子・・・
JAVAの方でも、バグとして認識はあるようですが、
修正優先度の低いバグと捉えてるようですね
IBusは、「・」を打とうとすると「/」が打たれるので気に入らず切り替えてました
ありがとうございました〜
やっとゲームのシステムの開発に戻れる・・・
この、キー入力で3日悩みましたよ><
開発環境を作ろうとしているのですが、J2EEとJ2SEのどちらかで迷ったら 大は小をかねるで、J2EEにしておけばいいのでしょうか?
Keep it simple, stupid! ということで、J2ME
J2EEはサーバ用途。迷う程度ならJ2SEで。
64 :
61 :2010/03/21(日) 23:49:03
ありがとうございます。 サーバ用途というのは、単にサーバ機上で(単体で)動作させるだけというのではなく クライアントと交信する場合という理解でいいですか。
WEBアプリ、WEBサービスのための基本的なフレームワークだからそんなもん。 ただ、Socketベースの低レベル通信(TCP,UDP)はJ2SEで。
質問です 以下のコードでJTextField1の文字列をUNICODE(UTF-8)で クリップボードにコピーすることはできたのですが、 ペースト先がShift_JISしか使えないため文字化けしてしまいます これをUNICODEではなくShift_JISでクリップボードにコピーすることは できないでしょうか? Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); StringSelection selection = new StringSelection(JTextField1.getText()); clipboard.setContents(selection, selection); 以下のように文字コード変換しようとしたのですが うまくいかずやはり文字化けしてしまいました try { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); StringSelection selection = new StringSelection(new String(JTextField1.getText().getBytes("Shift_JIS"), System.getProperty("file.encoding"))); clipboard.setContents(selection, selection); } catch (UnsupportedEncodingException ex) { すみません、よろしくお願いします
67 :
デフォルトの名無しさん :2010/03/22(月) 08:58:18
誘導されてきました。 以下のようなエラーが出ます: >javac Sample016.java Sample016.java:3: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServlet; EclipseでTomcatを起動したときは問題なく動くんですけど、コマンドプロンプトからjavacだと動きません。 多分、classpathの設定に問題があるんでしょうけど、servlet-api.jarとjsp-api.jarへのclasspathはちゃんと設定されています: >set classpath CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip; C:\Program Files (x86)\Java\jdk1.6.0_17\lib\tools.jar; C:\apache-tomcat-6.0.26\common\lib\servlet-api.jar; C:\apache-tomcat-6.0.26\common\lib\jsp-api.jar; スペック: Windows XP (64-bit) apache-tomcat-6.0.26-windows-x64.zip jdk-6u17-windows-i586.exe jre6 javac -cp (上記のパス) Sample016.java でも同じエラーが出ます。 …後は何を確認すればよいのでしょうか? 必要であれば補足しますので、どうか助けてください。お願いします。
>>67 servlet-api.jarをC:\Program Files\Java\jdk1.6.0_17\jre\lib\extに置いたらどうかな?
69 :
67 :2010/03/22(月) 10:46:22
>>68 仰る通りにしたら、コンパイル出来ました!!!1!
これはどういう意味ですか?
C:\Program Files (x86)\Java\jre6\lib\ext
にはクラスパスが通っていて
C:\apache-tomcat-6.0.26\lib
にはクラスパスが通ってな・・・って、あれ?commonは?
あーっ、すみません!
C:\apache-tomcat-6.0.26\common\lib\servlet-api.jar;
じゃなくて
C:\apache-tomcat-6.0.26\lib\servlet-api.jar;
でした!
環境設定のシステム変数も訂正したら-classpathなしでもコンパイルできるようになりました。
昨晩からあの手この手を使って調べてましたが原因が分かりませんでした。
そうやって調べればよかったんですね。さすがプロです。脱帽です。
本当に本当にありがとうございました!
eclipseとNetBeanはどっちが人口多いんだ?
eclipseだろう。
eclipse java の検索結果 約 14,600,000 件中 1 - 100 件目 (0.68 秒) netbeans java の検索結果 約 3,530,000 件中 1 - 100 件目 (0.74 秒) もうちょっと頑張りましょうレベル。まだまだ比較にならない。 せめて2倍差くらいまで詰め寄らないと。
netbeans java に一致する日本語のページ 約 535,000 件 (0.36 秒) jdeveloper java に一致する日本語のページ 約 332,000 件 (0.54 秒) だから、オラクルががんばっても日食の猛威は崩せないだろうね。
java の検索結果 約 234,000,000 件中 1 - 100 件目 (0.59 秒) C# の検索結果 約 45,800,000 件中 1 - 100 件目 (0.65 秒) JavaとC#も比較にならないなぁ。実はC#派だったりするんだが・・・
>>74 それ、日本語のページを検索になっとる・・・
jdeveloper java の検索結果 約 623,000 件中 1 - 100 件目 (0.43 秒)
jbuilder java の検索結果 約 1,010,000 件中 1 - 100 件目 (0.56 秒)
俺はnetbeans派だけどね まぁそんなのどうでもいいけど
NetBeansは資料が少なすぎるんですけど 先輩からEclipse薦められたけど、業務で使う場合IDEは選べるの?
>>77 でもさ、NetBeansって超モッサリしてない?
Eclipseに移行したくなってきたわ
>>79 だ・か・ら!PCの性能が低すぎるんだってば!
>>79 NetBeansでモッサリしてるなら、
エクリプスもモッサリしてる。
エクリプスって8年前からぜんぜん進化して無いだろ。エクリプスってそんなにいいか?
83 :
79 :2010/03/22(月) 22:57:43
>>80 普通にcore i7 860を使っているんだけど
不必要な所は入れてないけどね
>>81 それでも、少しはEclipseの方が軽いじゃん
だからNetBeansはGUIデザインしてこそ真価を発揮すんの。 逆にコードバリバリ書くならEclipse一択なわけ。 どっちも大事なんだよ。
GUI くらい手で書けよ。
visual basic経験者なんだろ。 win32apiじゃ駄目とか。
87 :
35 :2010/03/23(火) 00:55:43
GUI手で書けとかどこの素人だよw そんな機械作業に工数割くわけねーだろ
トラブル対応まで考えりゃ当然手書きだろ。 どこの素人だよ。
>>87 おお、良いんじゃね。Mac OS X で動いてるよ。
2000 年頃にこういうドラクエU風 RPG 型仮想空間 SNS 作ろうとして挫折したなー
マカってホント情報弱者だな。
バカが炙り出されたw
なんかすごい寂れてるな
>>87 起動して速攻死んで戸惑ったw
プレイしただけだけど結構完成度高いと思った。
柵に触ると死ぬのはファミコンゲームみたいでいいなw
で何点取ったら脱ぐんだ?
素人の趣味でやるプログラマーとして、 いくつかのファイルに分けてプログラミングすることに あこがれる ファイル拡張子が MF、SF、DSAとか いっぱいあるけどなんだろうな〜と思ってみたり classもいっぱいあるし あれができるようになるのに、 お勧めの書籍ありますでしょうか javaに限らず)
>>87 絵の書ける友達がいてるというのが羨ましい
ゲーム自体は何てことはない、そこらにある内容だけど
150点くらい取ったが、脱ぐ気配はないな
結論:ともだちは大事にしよう
自演乙
N88BASIC世代には普通に面白い
102 :
デフォルトの名無しさん :2010/03/23(火) 15:30:52
サーブレットの質問です。
C:\apache-tomcat-6.0.26\webapps\myapp\WEB-INF\classes\com\gokuiSample025.javaには
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//パラメータ取得
String person = request.getParameter("person");
//コード変換
person = new String(person.getBytes("8859_1"),"SJIS");
//出力
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("<html><head><title>サンプル025</title></head><body>");
out.println(person + "さん、こんにちは");
out.println("</body></html>");
out.close();
}
・・・というコードが含まれていて、実行させるにはpostメソッドが必要みたいです。
そして、Sample025.htmlというファイルは
<form method="post" action="Sample025">
お名前:
<input type="text" name="person" size="20">
<input type="submit" value="OK">
</form>
・・・というコードが含まれています。
ただ、このSample025.htmlを「どこに置いて」「どう実行させればいいのか」分かりません。
C:\apache-tomcat-6.0.26\webapps\myapp\の直下に置いて
http://localhost:8080/myapp/Sample025.htmlとやっても 「ファイルが無い」と言われます。
「どこに置いて」「どう実行させればいいのか」を教えてください。
因みに、
http://localhost:8080/myapp/Sample025だとサーブレット単体では動くのですが 、
「HTTPステータス 405 - HTTPのGETメソッドは、このURLではサポートされていません。」と言われます。
では、お願いします。
103 :
デフォルトの名無しさん :2010/03/23(火) 16:01:44
104 :
102 :2010/03/23(火) 16:09:54
>>103 ありがとうございます。myappの直下にはwork(SESSIONS.serのみ含む)とWEB-INFの二つのディレクトリしかありません。
C:\apache-tomcat-6.0.26\webapps\myapp\WEB-INF\web.xmlの内容は以下の通りです:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="
http://java.sun.com/xml/ns/javaee "
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "
version="2.5">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>DefaultServlet</servlet-name>
<servlet-class>com.gokui.Sample022</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DefaultServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Sample025</servlet-name>
<servlet-class>com.gokui.Sample025</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sample025</servlet-name>
<url-pattern>/Sample025</url-pattern>
</servlet-mapping>
</web-app>
105 :
102 :2010/03/23(火) 16:14:39
>>104 のweb.xmlについて少し説明させてください。(読みづらくてすみません、改行を減らしました)
<welcome-file>index.html</welcome-file>
は今のところ、一度も表示されたことはありません。 ←これも置き場所で迷ってます
<servlet-class>com.gokui.Sample022</servlet-class>
はURLのファイルが見つからなかった場合に表示されます。 ←
http://localhost:8080/myapp/Sample025.htmlで表示されるのがこれです <servlet-class>com.gokui.Sample025</servlet-class>
<url-pattern>/Sample025</url-pattern>
が、今回のサーブレットです。
・・・必要であれば補足しますので、どうかお願いします。
106 :
デフォルトの名無しさん :2010/03/23(火) 16:20:58
<servlet> <servlet-name>DefaultServlet</servlet-name> <servlet-class>com.gokui.Sample022</servlet-class> </servlet> <servlet-mapping> <servlet-name>DefaultServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> を消せばいい
108 :
102 :2010/03/23(火) 16:39:48
>>106-107 表示されました!
しかも、名前を入力すると
>名無しさん、こんにちは
・・・Sample25も動きます!
問題解決です。
デフォルトが邪魔していたんですね。
大変助かりました!
本当にありがとうございました!
109 :
デフォルトの名無しさん :2010/03/23(火) 20:03:53
html文のコメントを削除するために、 String#replaceAll("<!--[^-->]*-->", "") をつかいました。 Google アドセンスのコードの一部を削除してしまうのではないかと思いましたが、予想に反してGoogle アドセンスのコードはそのまま残ってました。 詳しい方、その残っていた理由を教えてもらえませんでしょうか。
110 :
デフォルトの名無しさん :2010/03/23(火) 20:55:05
文字列を指定文字数で分割してlistに入れたいのですが 以下のコードでは分割前と分割後に文字数が2文字前後違ってしまいます どこがいけないか教えていただけないでしょうか int nextIndex = 0; while (nextIndex < content.length()) { try { list.add(content.substring(nextIndex, nextIndex + splitSize)); nextIndex = nextIndex + splitSize + 1; } catch (Exception e) { list.add(content.substring(nextIndex, content.length())); break; } }
111 :
デフォルトの名無しさん :2010/03/23(火) 21:06:48
>>109 その残ったGoogleアドセンスのコードとやらをさらせ
2文字前後っー意味がよくわからん。 見た感じだと1文字すっとばしてる。 "0123456789".substring(0,3) ... "012" "0123456789".substring(0+3+1,3) ... "456" "0123456789".substring(0+3+1+3+1,3) ... "89"
>>110 > nextIndex = nextIndex + splitSize + 1;
nextIndex = nextIndex + splitSize;
114 :
109 :2010/03/23(火) 21:13:48
>>111 こんな感じです↓どんなもんですかね
<script type="text/javascript"><!--
google_ad_client = "pub-?????????????";
/* 468x15, 作成済み 08/05/21 */
google_ad_slot = "xxxxx";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
115 :
デフォルトの名無しさん :2010/03/23(火) 21:41:14
>>112 >>113 nextIndex = nextIndex + splitSize
ご指摘どうりでした
どうもありがとうございました
116 :
デフォルトの名無しさん :2010/03/23(火) 22:01:37
>>109 つか、その正規表現おかしくないか?
[^]はかっこの中にない任意の1文字だぞ
<!-- comment -->
は削除されるけど
<!-- com-ment -->
だと削除されなくなるだろ
おれなら正規表現をあきらめるけど
あんまり複雑な正規表現は保守性がよくないし
117 :
デフォルトの名無しさん :2010/03/24(水) 05:47:32
ごめんなさい、質問です バイナリファイル内での文字列の置き換えをしたいのですが、 byte配列として読み込んで、その後の肝心な置き換え処理が早くも分からない状態です 拾いものですがPHPだとこんな感じです $fp = fopen("binaryfile","rb"); $size = filesize("binaryfile"); $search = bin2hex("foo"); $replace = bin2hex("bar"); $data = fread($fp, $size); $data16 = bin2hex($data); $data16 = str_replace($search, $replace, $data16); $data = pack('H*',$data16); echo $data; これをJavaで実現する方法を教えて頂けますか?
118 :
35 :2010/03/24(水) 08:30:38
沢山のご意見ありがとうございました でも、質問スレで晒す物じゃなかったですね反省します^^; また何かがんばって作ってきます ありがとうございました〜
120 :
117 :2010/03/24(水) 14:25:14
すみません、解決しました!
2次元配列の要素に ’ < > がある場合 <などに変換をしたいのですが if(list[row][colum].matches("'|<|>")){ list[row][colum] = list[row][colum].replaceAll("<",">"); 以下略 } としてfor文の中にif文を入れているのですがif文に引っかかってくれません。 配列要素に対してうまく置換する方法をご教授下さい。 環境 Java1.4
122 :
109 :2010/03/24(水) 20:54:48
>>116 そうですね、正規表現がへんでした。
参考になりました。ありがとうございます。
>>121 matches() は全体一致。やるなら ".*['<>].*" だがその条件判定自体が無駄。
list[row][column] = list[row][column].replace("<", ">"); だけで良いだろ。
きちんとするなら、3 文字程度なら 1 文字ずつトラバースしてエスケープするコード書けよ。
ご教授
オブジェクトとxmlのマッピング方法でcommonsのBetwixtというのを見つけました。 JDKでももっと簡単なものや他のライブラリで使い勝手いがいいものはあるでしょうか?
java.lang.UnsupportedClassVersionError: Bad version number in .class file が出たとき、情報源がclassやjarしかない場合、どのバージョンなら動くかって確認する方法ありますか
以前はclassファイルの先頭8バイトをダンプして確認したけど 今ならもしかしたらもっとエレガントな確認方法があるのかもしれない 1.3 : CA FE BA BE 00 00 00 2F 1.4 : CA FE BA BE 00 00 00 30 5 : CA FE BA BE 00 00 00 31 6 : CA FE BA BE 00 00 00 32
>>121 正規表現使うこと自体が無駄過ぎる
>>126 classファイルにjava class versionが埋め込まれてるからそのクラスバージョンに対応してるjavaコマンド使え。
javaVMが何に対応してるかはシステムプロパティ全部列挙すればみれる。
質問よく読まずに先入観だけで回答するバカw
ご教示
131 :
デフォルトの名無しさん :2010/03/25(木) 21:24:36
needpasswordの後、解読できるかたいらっしゃいませんか。 var needPassword = "%u30D1%u30B9%u30EF%u30FC%u30C9%u3092%u5165%u529B%u3057%u3066%u304F%u3060%u3055%u3044%u3002"; var badPassword = "%u30D1%u30B9%u30EF%u30FC%u30C9%u304C%u6B63%u3057%u304F%u3042%u308A%u307E%u305B%u3093%u3002";
板違いだksg
var needPassword = "パスワードを入力してください。"; var badPassword = "パスワードが正しくありません。";
134 :
デフォルトの名無しさん :2010/03/25(木) 21:55:27
これはjavaのしつもんなの?
ダウンキャストでClassCastException になるのだが理由がわからん class A { ----void test(){ --------B object = (B)this; --------object.test(); ----} } class B extends A { ----void test(){ ----} }
137 :
136 :2010/03/26(金) 17:06:45
わかった new されるときに親でnewされてるとダメっぽい
138 :
デフォルトの名無しさん :2010/03/26(金) 17:38:39
>>125 XML関係はJDOM一本ですべて済んでしまうと思うんだが。
>>136 A a = new A();
A b = new B();
System.out.println(a instanceof A);
System.out.println(b instanceof A);
System.out.println(a instanceof B);
System.out.println(b instanceof B);
AspectJってまだ芽はあるんですかね? 結局ログ出力ができるよ〜くらいしか分からないままなんですけど。
141 :
デフォルトの名無しさん :2010/03/26(金) 19:53:08
>>136 親クラスが子クラスのまねをしてもダメ。
142 :
136 :2010/03/26(金) 20:39:57
ちぇー 融通がきかねーなー
>>140 Aspect単独はあんまり使わない
DIと合わせる場合が多い。まあSeasar使えばいい。
>>136 っていうか、なんで親クラスで子クラスのインスタンスを呼ぶ必要があるの?
146 :
136 :2010/03/27(土) 00:02:03
>>144 クラスを分割する際に少しでも楽をしようとしたんだ
引数とかわたすのめんどいし
ログ集計とかちょっと使うだけのツール程度なら面倒だからたまにやるな。 親クラスでダウンキャスト。
148 :
デフォルトの名無しさん :2010/03/27(土) 04:45:46
>>136 つーか、クラスって定義だがら
中でキャストしたって駄目だろ
クラスを使う側でキャストするなら分かるけど
>>144 まあ単純な流れのプログラムなら、そういうのも使わずに済むんだろうけどねえ。
大概のシステムで使うよねw
>>149 mainメソッド側でキャストすれば良いじゃん
こんなのがプログラム作ってると思うとゾッとするわ
おまいらのあるべき論なんてどうでもええ。
class A { ----void test(){ --------B object = (B)this; --------object.test(); ----} } class B extends A { ----void test(){ ----} そもそも Aをnewした時、Aのオブジェクトの中でthisはAを指してる でもAにBは含まれてないから(B)にキャストできない
つまりexetends付ける位置が違う
おまえら素人のコードに鬼の首取ったようにうれしそうだなw どんだけ虐げられてるんだよw
いや、俺も素人だけど レベル低いんでw
え?誰?
後言っておくけど、JavaはOJBで覚えられるような甘い言語じゃないからな
最後に (キリッ を忘れてるぞ
そりゃ、小中学生による金管バンドで覚えられないのは確かだな。
>>158 大概はAPIドキュメント読むだけで十分。
テキストファイルに辞書の見出し語と意味が一行づつ書いてあります ここからファイル読み込みつつ検索を行いたいのですが、 高速な方法ってどんなものが考えられるでしょうか? 一行づつ読み込んで前方一致で抽出すると全然おそかったので・・・
BM法使うとか。
事前に形態素解析とかしてデータベース作成しておいてもいいのなら Googleみたいな感じで検索できる
テキストファイルは見出しでソートしておく テキスト全体の半分位の位置の見出しを見付けて 検索対象がそれより前か後ろか調べる、の繰り返し
え、見出し語を検索じゃなくて全文検索だろ?
JDK5で、単純なWeb自動巡回ツール作成しています。 readLine()→単語抽出→readLine()のループなんですが、 htmlがcharset=ISO-8859-1 のページで「数字」を使ったUTF-16で埋め尽くされているサイトで頓挫中です。 &$12426;&$12427;&$12428 (=りるれ) という具合です。対応マップ作るにも漢字含めると膨大すぎて。 InputStreamReaderのcharsetをUTF-16/BE/LEと試しましたが文字には変換して貰えませんでした。 数字を文字(列)に変換する方法ないでしょうか? JDK6でも構いません。
>>169 その数値がそのまま Java の char 1文字だよ。
char ch = 12426; ← 「り」を代入
自分で変換するコードを書いても難しくないとおもうけど、そもそも本
来はHTMLパーザを使ってからテキストを抽出するべき。
ネットからデータをダウンロードするソフトを作っています。 GUIとダウンロードクラスを作っています 「ダウンロードを開始します」とか、「404エラー」ですとGUIに表示したいのですが 何か良い方法ありませんか?
JOptionPane
ダウンロード開始するたびにいちいちダイアログを出すのは面倒なのでは。 普通にJLabelにテキストを表示してもいいだろうし、 アプレットを起動したときに使える「Javaコンソール」みたいに JTextAreaに1行ずつメッセージを追加するようなのも良いと思う。 あとJEditorPaneを使うのもいいかも。 JEditorPaneはHTMLを表示できるので、 "<font color=black>ダウンロードを開始します</font><br>" "<font color=blue>ダウンロードが完了しました</font><br>" "<font color=red>404エラーです</font><br>" みたいなメッセージを末尾に追加していけば、 メッセージの種類ごとに色を変えられる。
どんどんハードルが上がっていくわなw
178 :
デフォルトの名無しさん :2010/03/28(日) 04:50:12
あまりにも不確定要素が多過ぎるので質問させてください。
今、JDBCレルムによるFORMパスワード認証を試していますが、以下のようなエラーが出てデータベースに接続できません:
2010/03/28 4:13:21 org.apache.catalina.realm.JDBCRealm start
致命的: データベース接続オープン中に例外が発生しました
java.sql.SQLException: org.gjt.mm.mysql://localhost/authorization
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:704)
at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:786)
server.xmlの関係するだろう部分は以下の通りです:
<Realm className="org.apache.catalina.realm.JDBCRealm"
connectionURL="jdbc:mysql://127.0.0.1/authorization"
driverName="com.mysql.jdbc.Driver"
connectionName="root"
connectionPassword=""
roleNameCol="role"
userCredCol="password"
userNameCol="username"
userRoleTable="roles"
userTable="users"
/>
…まず、検索するとorg.gjt.mm.mysql.Driverは古いのでcom.mysql.jdbc.Driverを使うべき、とありました(
http://www.javadrive.jp/servlet/auth/index5.html )。
しかし、com.mysql.jdbc.Driverに変えてみましたが、結果は同じです。本来、どちらが正しいのでしょうか?
あと、自分のMySQLはユーザー名はrootで設定してあるのですが、パスワードは設定していません
(つまり、MySQLをコマンドラインから起動するときはパスワードを空欄のままEnterを押して入れます)。
このような場合、connectionNameとconnectionPasswordは上記の通りでよろしいのでしょうか?
179 :
178 :2010/03/28(日) 04:58:39
すみません、混乱させてしまったかもしれません。
>>178 のserver.xmlを使った場合ではエラーは
致命的: データベース接続オープン中に例外が発生しました
java.sql.SQLException: com.mysql.jdbc.Driver ←違いはここです
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:704)
at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:786)
…になります。org.gjt.mm.mysql.Driverを使えば、
java.sql.SQLException: org.gjt.mm.mysql.Driver
at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:704)
at org.apache.catalina.realm.JDBCRealm.start(JDBCRealm.java:786)
…になります。
では、宜しくお願い致します。
auth_usersテーブル auth_rolesテーブル は作ってあるの?
userRoleTable="roles" userTable="users" すまん、rolesテーブルとuesrsテーブル
182 :
178 :2010/03/28(日) 05:30:05
>>180 ありがとうございます。
はい、作ってあります。
より正確に書きますと、
mysql> show tables;
+-------------------------+
| Tables_in_authorization |
+-------------------------+
| roles |
| users |
+-------------------------+
mysql> describe roles;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(20) | YES | | NULL | |
| role | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
mysql> describe users;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(20) | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
…でデータも既に二件ずつ入れてあります。
183 :
178 :2010/03/28(日) 05:32:44
その二件は以下の通りです: mysql> select * from roles; +----+----------+--------+ | id | username | role | +----+----------+--------+ | 1 | nakamura | member | | 2 | tanaka | member | +----+----------+--------+ mysql> select * from users; +----+----------+----------+ | id | username | password | +----+----------+----------+ | 1 | nakamura | 1234 | | 2 | tanaka | 5678 | +----+----------+----------+
DriverはTomcatのcommon/lib に入れた?
ごめん、入ってなかったらエラーメッセージが違うか
>>184 いや、多分それが原因で正解。
エラーが起きた箇所のソース見るとこうなってる(Tomcat 6.0.26だと仮定すると)。
698 : // Instantiate our database driver if necessary
699 : if (driver == null) {
700 : try {
701 : Class clazz = Class.forName(driverName);
702 : driver = (Driver) clazz.newInstance();
703 : } catch (Throwable e) {
704 : throw new SQLException(e.getMessage());
705 : }
706 : }
throw new SQLException(e) ってしてくれればよかったんだがな。
それなら、rootCauseからそれらしいエラーメッセージ出してくれるから。
スレッドの勉強で木が土から水を吸い上げてくプログラムを作ってたんだよ。葉、根、水のクラスを作って。 それで水クラスには「葉、根、土に含まれる水」っていう変数をそれぞれ作ったんだけど、これってわざわざ水クラス作らなくても 葉(根)クラスに「葉(根)に含まれる水」の変数を作る方法もあるよね クラスを作るときは仕様書から名詞を抜き出すって教わったから水クラスを作ってみたんだけどどっちが一般的なわけ?
それ作ってなんか良い事あるのか?
PipedInputStreamやPipedOutputStreamを駆使して「葉」とか「根」を表現すれば、 水はbyteです(キリッ で押し通せるんじゃない?
190 :
187 :2010/03/28(日) 10:51:43
>>189 >PipedInputStreamやPipedOutputStream〜
それはちょっとわからない
class Water{
int leaf;
int soil;
}
とか作っておいて
class Leaf{ //葉クラス
Water water; //水のインスタンス
public Leaf(Water water){
this.water = water;
}
run(){
water.leaf += 50;
}
}
みたいにインスタンスを作って扱うか、
class Leaf{
int leafWater;
run(){
leafWater += 50;
}
}
みたいにそのままクラスの中で変数を扱うかってこと
このスレ住人は基本的に怠け者だから、 花クラスとか追加するたびに水クラスに修正入るのたぶん嫌うだろうね。 「黒板モデル」ですっ(キリッとか適当なbuzzワードで言いくるめれば 納得しちゃう連中でもあるんだけどさ
195 :
187 :2010/03/28(日) 11:21:18
>>193-4 やっぱり修正はめんどうだよね
じゃあそれぞれのクラスの中に変数作るわ
thx
難しくすると後がめんどいだろ
bufferedreaderとかって本当に意味あるの? ↑を使わなくても、OSとかが適当にバッファリングしてくれる気がするだけど
>花クラスとか追加するたびに水クラスに修正入るのたぶん嫌うだろうね。 禿同。 しかし土->根(->茎?)->葉という関係モデルはスレッドの勉強という主旨から外れてしまうのかな・・・ 水クラスでは、どこがどこから水を取るのかって構造が見えないのが嬉しくない気がする。 あと怠惰、傲慢、短気は三大美徳だしな。それに、納得しないで変に拘ってたら話が進まん。
>水クラスでは、どこがどこから水を取るのかって構造が見えないのが嬉しくない気がする。 水クラスをみたら構造が見えるようにも組めるの? 水の吸い上げは根茎葉が各自で根は土から、茎は根からっていう風に作ったんだけど
>199
水クラスに各部分の水量を保持する構成だと、各部分のクラスは水クラス
とだけ関係を持つことになるんじゃない?
具体的な例としては、茎クラスと葉クラスの関係の直接的な表現。
>>190 のWaterアリの例からして、LeafクラスはWaterとしか関係してないし。
この場合、関係の表現は水クラスに集中することになるから、花クラスとか
追加するたびに水クラスに修正入ることになるはず。
つまり今は水クラスは小さいかもしれないけど、関連クラスが何百になって
くると全部水クラスにかかって複雑化するだろうと予想出来る。
この複雑化が嬉しくないということ。
個々のクラスが自分の関係情報を持つならば、新しいクラスを追加した時
には直接に関係する複数のクラスを修正することになるけど、複雑さは
分散されて超複雑なクラスは出来にくいという効果が期待される。
でも嬉しくないだけであり、水クラスに集中させて関係を一元管理させる
手法もアリだから、集中と分散のどちらを選ぶかは場合によるとしか言い
ようがない。メリットとデメリットを理解するのが重要。
「主旨から外れてしまうのかな・・・」は、元々がスレッドの勉強なんだから、
関連性とかは本筋じゃないんだよなぁという意味。
元々とは離れて設計の話としての質問だよね?
今日はくだらねぇ脳内設計でオナニー大会か?
今日も煽るだけのオナニーか?
おまえのオナニーか?
エロ画像だけ収集するプログラムはできないかな?
>>200 なるほど
やっぱりクラスの部品化を考えると水に機能も無いことだし分散させたほうがいいのか
>>190 では省略しちゃったんだけど葉クラスでは茎クラスの水を減らして、その分葉クラスの水を増やすメソッドがあるんだけど
Waterクラス無しだとそれぞれのクラスの水をstatic宣言して他のクラスで操作できるようにするか、
葉クラスに茎クラスのインスタンスを作るっていう形になるのかな
スレッドのサンプルプログラムとして作った木のプログラムでふと思った疑問についての話なんで、スレッドはこれに関係ないです
例外発生しない処理A try { 例外が発生する可能性のある処理B } catch(Exception e) { } 処理Aが2〜3行で、処理Aは処理Bの前処理である この条件の時に、おまえらだったらこう書く?↓ try{ 例外が発生ない処理A 例外が発生する可能性のある処理B }catch(Exception e){ }
import java.io.*;
import java.net.*;
import java.util.Date;
class URL
{
public static void main(String args[]) throws Exception
{
int c;
// これもダメ
// URL url = new URL( args[0] );
// これもダメ
URL url = new URL( "
http://www.google.co.jp " );
上のように書いてるんですが、いまいちjavaのクラスがわかりません
URL のオブジェクトを作るにはどうやってかくのでしょうか?
import java.io.*;
import java.net.*;
import java.util.Date;
class app30
{
public static void main(String args[]) throws Exception
{
int c;
// これもダメ
URL url = new URL( args[0] );
// これもダメ
// URL url = new URL( "
http://www.google.co.jp " );
app30.java:12: シンボルを見つけられません。
シンボル: コンストラクタ URL(java.lang.String)
場所 : URL の クラス
URL url = new URL( args[0] );
^
クラス名かえましたが ダメですね
URL.class が残ってるとかじゃねえのかよ。
とりあえずEclipse上でやろうぜ
212 :
178 :2010/03/28(日) 14:55:46
>>184-186 ありがとうございます(すみません、返事が遅くなりました)。
自分のTomcat(6.0.26、最新)には:
Directory of C:\apache-tomcat-6.0.26
[.] [..] [bin] [conf]
[lib] LICENSE [logs] NOTICE
RELEASE-NOTES RUNNING.txt [SERVLET_JSP_650] [temp]
[webapps] [work]
4 File(s) 54,734 bytes
…しかありません("common"というディレクトリがありません)から、common/libというのは
C:\apache-tomcat-6.0.26\lib
のことで良いですよね?
その下にあるファイルは以下の通りです:
Directory of C:\apache-tomcat-6.0.26\lib
[.] [..] annotations-api.jar
catalina-ant.jar catalina-ha.jar catalina-tribes.jar
catalina.jar el-api.jar jasper-el.jar
jasper-jdt.jar jasper.jar jsp-api.jar
servlet-api.jar tomcat-coyote.jar tomcat-dbcp.jar
tomcat-i18n-es.jar tomcat-i18n-fr.jar tomcat-i18n-ja.jar
16 File(s) 5,024,483 bytes
2 Dir(s) 144,014,782,464 bytes free
その"Driver"というのは"tomcat-dbcp.jar"のことでよろしいのでしょうか?
普段どんなコードかいてるのか知らないけど普通イベント駆動型にしないか。
214 :
デフォルトの名無しさん :2010/03/28(日) 17:10:44
Java 1.6.0_16なのですが、JTableとRowSorterを実装していて困った現象にみま われています。 ソートをかけていない状態だと問題ないのですが、ソートをかけた状態でJTable に接続しているモデルの内容を減らしたり増やしたりするとExceptionを吐く時が あります。(いつもではありません。) 内容は長いので一部とさせて下さい。 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:x at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:xxxx... 大変無礼は承知しておりますが、 ソースコードは事情があって載せられません…。 どなたかお力添えいただけないでしょうか。Exceptionを吐かないようにしたいの です。 なお、モデルを読み込む際、トリガにリフレクションを使用しており、それも疑 っております。
swingでメニューバーから終了したときに、 ×ボタンをクリックした時と同じ効果を出したいのですが 「exit」以外で何か良い方法ありませんか?
WINDOW_CLOSING イベントをイベントキューに入れてしまうとか。
>>215 java.awt.Window#dispose()
今仕事クビになって仕事探してるところなんだけどなかなか見つからないから javaの資格でも取ろうと思ってるんだけど SJC-Pの資格で就職出来るレベル? あと勉強用のおすすめの本とかあれば教えてほしい
220 :
216 :2010/03/28(日) 22:00:14
なんだ、
>>217 の答えでよかったのか。
深読みしてしまったよ。
>>170 >>171 ありがとうございます。
HTMLパーサというものがあるんですね。
解決法が分からず疲れて1日死んでましたが、またやる気が沸いてきました。
>>220 せっかく少ない脳をフル回転して教えてやったというのにまったく・・・
>>214 同じエラーが出る最小コードを新しく書いて出せば良いと思う。
最小コードを作ってる時に、原因がわかることもあると思う。
それでもわからなかったら書いた最小コードをここに貼れば、
偉い人が原因と解決方法を教えてくれるかもしれない。
224 :
178 :2010/03/29(月) 00:27:06
jsplitpaneにコンポーネントを追加すると、 追加したコンポーネントがヘコんで見えるのですが それを直すにには、どうすればいんですか?
>>227 210が言ってるみたいにURL.classが残ってるんじゃねーの?
ためしに java.net.URL url = new java.net.URL(args[0]); みたいに完全装飾クラス名を使ってみるとか。
Webアプリケーションの質問ですが、以下のように遷移する処理があります。 チェック処理をかましているため、このシーケンス通りに進まないとDに行けません。 A → B → C → D ここで、ユーザがAをアクセスした場合、Dを一発で返すようにしろとの要求があります。 B〜Dは他社製造でレスポンスやらを変えることはできません。 そこでAのアクセス中に何とかしてDをレスポンスとして返したいです。 HttpClientを使用して以下を考えてます。 1.Aアクセスがあったら、Aのクッキーをセットしそのクッキーを含んだHttpClientを生成します。 2.HttpClientでB → C → Dをアクセスし、Dのレスポンスをそのままブラウザに返す。 理屈では行けると思うのですが、どうでしょうか? プログラム内でのクッキー再利用は許可を取っているので、そこはスルーして下さい。
230 :
デフォルトの名無しさん :2010/03/29(月) 22:41:06
普通にやるとjspに番号を書き出して照合するからjsp経由じゃないと、無理じゃないかな? どうなってるか知らないから分からないけど
231 :
デフォルトの名無しさん :2010/03/29(月) 22:48:27
素人に意見なので無視しておけだけど
いいんじゃないの リクエストチェインは普通のことだろ
無視はよくない
なんだよ。 「どうでしょうか?」って 他にもいろいろ制限がありそうだし 「やってみりゃいいじゃん」 としかいいようがない
すみません。ジェネリックで教えてください。
List<string> list = ArrayList<String>();
で list に要素文字列を add したあと、これをソートしようとして次のコードをかきました。
http://ideone.com/us4zACSw すると、どうしても Recompile with -Xlint:unchecked なるメッセージが出てきます。
これはどのように直せば、このタイプのエラーがなくなるのでしょうか?
よろしくお願いいたします。
Comparator<String> を使おう。
ぷぅ〜
238 :
235 :2010/03/30(火) 05:24:17
いえいえ
おまえら誰だよw
>>232 リクエストチェインってなかなか検索で引っかからないんですけど、
手法や説明しているサイトありますか?
JTextAreaやJTextPaneで二行目以降の行頭で入力してundoするとデータが壊れるバグ IMで変換しなくても文字列を選択していなくても直接入力でも再現しますね windows XP Home sp3 JRE1.6.0_18 aaaa b aaaa (バックスペース) aaaa あいうえお これをundoしていくと aaaab b になり表示がおかしいだけじゃなくそのうちアプリがハングします 報告する英語力無いから困った
>>243 一般的にはアクションチェインじゃないかな?
246 :
デフォルトの名無しさん :2010/03/31(水) 06:35:58
質問させてください。 あるアプリケーションで、ユーザーに色を選ばせてその色で グラフィックを描写することを考え、choiceクラスによる色選択と itemStateChangedメソッドによる色変更を行いましたが知識が 無いせいかプログラムが長く面倒です。 String s=((Choice)e.getItemSelectable()).getSelectedItem()+""; として、 if(s.equals("red"))c=Color.red; と今はしています。 これより良い方法はありませんでしょうか? 色は10色ぐらいから選びたいです。 別にchoiceじゃなくてもかまいません。 使用するべきクラス名だけでもかまいませんので教えてください。
初心者な質問ですが宜しくお願いします。 まずXの1/2乗(√x)ってx^(1/2)ではないのですか? どうも値がおかしかったので10000^(1/2)でためしたら そのまま10000が出力されていたのですがどうしたらいいのでしょうか? もう一つはほかのクラスのテキストフィールドの値を別のクラスで 取りたいのですが方法はテキストフィールドのオブジェクトを生成 int i=Integer.parseInt(オブジェクト名.TextField名.getText()); ではダメなのでしょうか?スレッド内で行ったのですが、コンパイル はとおって実行時にエラーが出てしまいます。 両方とも私なりに調べてみたのですが・・・ 長文になってしまいましたが宜しくお願いします。
248 :
デフォルトの名無しさん :2010/03/31(水) 08:27:41
お願いします。誰か教えてください。 Socket sock; BufferedReader read; try{ sock = new Socket("IPアドレス",21); read = new BufferedRead(new InputStreamReader (sock.getInputStream())); System.out.println(read.readLine()); System.out.println(read.readLine()); ------------------------(*) sock.close(); }catch(Exception){/*error*/} } 目印の部分で止まって動かなくなってしまいます。 どうしてですか? レスポンスが終端に達しているのなら -1 が返ると 思っているのですが、認識違っていますか?
>>247 Math.pow(10000, 1.0/2)
^ は exclusive or の演算子で、べき乗とはまったく関係ない。
251 :
デフォルトの名無しさん :2010/03/31(水) 17:59:14
java 1.6のデフォルト状態でネットワーク層って操作できたっけ?
でけまへん。
インスタンス1とインスタンス2で共用のインスタンスAを持つことはできないんでしょうか? testClass instance1 = new testClass(); testClass instance2 = new testClass(); testClass instanceA = new testClass(); instance1.publicInstance = instanceA; instance2.publicInstance = instanceA; class testClass{ testClass publicInstance; } イメージとしては上記の様な感じで、instance1のpublicInstance内の変数を変更するとinstance2のpulicInstance、instanceAにも変更が適応されるような感じです。
static
入門書には『クラスは設計図で、それを基に実体(インスタンス)を作る』と書かれていました。 しかし、最近別の説明も読みました。以下のような内容です。 ------------------------------------------------------- クラスAbc Abc abc1 = new Abc(); Abc abc2 = new Abc(); @プログラムの中でAbcクラスにアクセスすると、クラスファイル『Abc.class』を読み込んでメモリ上にクラスオブジェクトを取る。 AAbc abc1 でAbcクラスの変数を作る。 Bnew Abc() すると、@のクラスオブジェクトを基にAbc型のインスタンスオブジェクトが作られる。 C= で代入。 DA〜C同様にAbc型のインスタンスオブジェクトが作られる。 ------------------------------------------------------- この場合、オブジェクトが3個作られることになりますよね? (クラスのオブジェクト1個、インスタンスのオブジェクト2個。n回newすればインスタンスのオブジェクトn個作られる) これまでは「インスタンス=オブジェクト」「クラスはインスタンスの設計図(だから実体ない)」という認識だったので、 この説明がトンデモに思えてきます。 合っているのでしょうか? それとも、理解が間違っていますか?
259 :
デフォルトの名無しさん :2010/03/31(水) 21:10:14
JavaMailとサーブレットでGmailの送信は出来ました。
でも、JavaMailとサーブレットで「日本語は無理なのか?」というGmailの内容を受信すると
1通目
From:Nanashi <
[email protected] >
題名: Re: whatever
--------------------------------------------
javax.mail.internet.MimeMultipart@4a1bda
・・・と表示されます、最後の一行は「日本語は無理なのか?」と表示されるはずなのに。
ちなみに、半角英数字で「abcdef」と送れば、ちゃんと「abcdef」と表示されます。
どうすれば日本語が正しく表示されるのか教えてください。
package javaMailTest;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.Security;
import java.util.Properties;
import javax.mail.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
↓続く
260 :
259 :2010/03/31(水) 21:12:05
public class JavaMail extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //送信内容の入力 response.setContentType("text/plain;charset=Shift_JIS"); PrintWriter out = response.getWriter(); try { //ID、パスワード、ホストアドレス設定 String username = "nanashi";//ユーザー名 String password = "gombeh";//パスワード String pop3host = "pop.gmail.com";//POP3サーバー名 String pop_port = "995"; String temp=null; Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; //空のProperty取得 Properties props = new Properties(); props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); props.setProperty("mail.pop3.socketFactory.fallback", "false"); props.setProperty("mail.pop3.port", pop_port); props.setProperty("mail.pop3.socketFactory.port", pop_port); ↓続く
261 :
259 :2010/03/31(水) 21:13:46
//Sessionオブジェクトの取得 Session s = Session.getDefaultInstance(props, null); //Storeオブジェクトの取得 Store store = s.getStore("pop3"); //接続 store.connect(pop3host,username,password); //Folderの取得 Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages(); for(int i=0,n=message.length; i<n; i++) { //FROMとSUBJECTの表示 temp=message[i].getSubject().toString(); out.println((i + 1) + "通目"); out.println("From:" + message[i].getFrom()[0]); out.println("題名: " + temp); out.println("--------------------------------------------"); //メッセージの表示 temp=message[i].getContent().toString(); out.println(temp); } //close処理 folder.close(false); store.close(); }catch(Exception e) { out.println("err" + e.getMessage()); } out.close(); } }
>>259-261 > //メッセージの表示
> temp=message[i].getContent().toString();
> out.println(temp);
Message(の親クラスのPart)のgetContent()の説明を読みましょう。
返るのはStringかMultipartかInputStreamだと書いてある。
264 :
259 :2010/03/31(水) 22:50:51
>>263 すみません、それはどこで読めるんですか?
"java.mail.message" getContent() で検索してもヘルプのようなのが見つかりません。
でも今回は返り値がMimeMultipartになっているんですか?
out.println(message[i].getContent());
temp=message[i].getContent().toString();
out.println(temp);
とやったら、
javax.mail.internet.MimeMultipart@1975d46
javax.mail.internet.MimeMultipart@6cbb2d
と表示されました。
,toStringでキャストしてやってもStringになっていないです・・・
265 :
258 :2010/03/31(水) 23:07:34
>>262 つまり、オブジェクトは3個作られるということでよいのでしょうか?
また、変数づけられていないので、クラスオブジェクトにはアクセスできないということでいいですよね?
インスタンスオブジェクトが存在する限りは、ガベージコレクションの対象にならないと思うのですが、それで合っていますか?
268 :
259 :2010/04/01(木) 00:10:41
>>267 APIリファレンス、ありがとうございます。
またまたすみません、
multiPartってどの変数のことですか?
message[i].getCount()とか
message[i].getBodyPart(0)とかやろうとしても
そんなメソッドがないですよね・・・
>>268 Object content = message[i].getContent();
if (content instanceof String) {
out.println(content);
} else if (content instanceof Multipart) {
Multipart multiPart = (Multipart)content;
...
} else {
throw new RuntimeException("対応してないよん。");
}
270 :
259 :2010/04/01(木) 08:47:06
>>269 お陰様で日本語もちゃんと表示出来ました:
>abcで
instanceofって便利ですね、これからも覚えておきます。
ありがとうございました!
InitialLdapContextInitialLdapContext#search()ってマルチスレッド対応なのでしょうか? というか、マルチスレッド対応って何かで分かるものなのでしょうか?
Hashtableを使いたいのですが、 キーをInteger valueを自分で作成したクラスを格納しているのですが、呼び出すとエラーになります。 調べたらすべてObjectで返されるようなのですが、呼び出すものを固定できないのでしょうか? 理由があってJavaのバージョンが1.4.2しか使えないため Hashtable hoge<a,b> = new Hashtable<a,b>() ができません。
>>272 1.4 で generics 使いたいなら retroweaver とか retrotranslator 使えば?
javaでSSL署名付きメールを送る方法を教えていただけないでしょうか?
>>265 ObjectのインスタンスにはClassのインスタンスを返すgetClass()がある。
分かりやすく言うならインスタンスからクラスを得ることは可能。
つまりクラスオブジェクトにアクセス可能。
例えば
public class test {
public static void main(String[] args) {
System.out.println("".getClass().getName());
}
}
の結果は、java.lang.String となる。
嘘だが。
PDFRendererを使用してSwingでPDF表示をしようとしているんですが、 iText2.1.0で作成したPDFファイルを表示しようとすると下記エラーが出てしまいます。 java.io.IOException: Unknown CMap: UniJIS-UCS2-H at com.sun.pdfview.font.PDFCMap.getCMap(PDFCMap.java:67) at com.sun.pdfview.font.PDFFontEncoding.<init>(PDFFontEncoding.java:73) at com.sun.pdfview.font.PDFFont.getFont(PDFFont.java:133) at com.sun.pdfview.PDFParser.getFontFrom(PDFParser.java:1172) at com.sun.pdfview.PDFParser.iterate(PDFParser.java:726) at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101) at java.lang.Thread.run(Thread.java:619) iTextのエンコーディング?が無いというエラーだとは解ったのですが 解決策がいまいちわかりません。 どなたかヒントを教えていただけないでしょうか…
>>278 ありがとうございます。
そのサイトも見たんですけど、やはりPDFRendererではまだ日本語表示は無理そうなんですかね。
FOP AWT Previewモードについて再度調べてみます。
ありがとうございました。
280 :
デフォルトの名無しさん :2010/04/03(土) 19:43:18
j2eeのTransportについて質問です。マルチスレッドで使おうと思って session.getDefalutInstance()をせずに下記のようにしています。 Session session = Session.getInstance(props, auth); Transport transport = session.getTransport("smtp"); transport.connect(); このアプリが時々ハングします。kill -3でスレッドダンプすると二つのスレッドで下記のようなログを出してます。 デッドロックに見えるのですが、session.getInstance()の場合でもsynchronizedで同期しないと いけないのでしょうか?メール送信の速度が下がるのは避けたいのですが。 "http-8080-39" daemon prio=10 tid=0x00002aab1c649800 nid=0x704 runnable [0x0000000043c42000..0x0000000043c43c80] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:79) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) - locked <0x00002aaaf8500fc0> (a java.io.BufferedInputStream) at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:57) at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1385) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1205) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:322) at javax.mail.Service.connect(Service.java:236)
あ、すいませんgetDefaultInstance()を使わなかったのはスレッドうんぬんではなくて エンベロープフロムを毎回変えたいからでした。で、まあマルチスレッドで呼び出してるわけですが、 connect()〜send()までの外側で同期とらないと駄目でしょうか。
2つのスレッドが両方ともそのスタックの通りならデッドロックじゃねぇんじゃ。 スレッドの状態も RUNNABLE だし、単に Read Wait で止まってるように見えるが。
- locked <0x00002aaaf8500fc0> の<>の中の値を調べたところ全部異なっていました。デッドロックじゃないですね。 対象のメールサーバーが止まってました。とりあえずtimeout設定してアプリは止まらないように 修正します。外部同期無しで。 似たような状況でメールサーバーが止まってないのにアプリが止まってしまうこともあったのですが今回は 違ったようです。それが起きたらまたスレッドダンプ取って調査してみます。ありがとうございました。
文字コードを文字に変換したいんですが、\uを文字コードの前につける以外に方法ありませんか? 調べたらこれしか見当たらないので...
int a = 0x30A2; char ch = (char)a; String a = "30A2; char ch = (char)Integer.parseInt(a, 16);
System.in と Runtime#exec() で起動した子プロセスの標準入力を繋げたいんだけど、 System.in から読み出して子プロセスに渡すスレッドを立ち上げると子プロセスが 終わってもそのスレッドは起動したままで終わらせるすべがない。 ftp のようなコンソールアプリでのシェルに落ちるような事がしたいんだけど、どうすれば よいでしょうか?
289 :
デフォルトの名無しさん :2010/04/07(水) 12:00:12
boolean test=false; というのがあったとき if (test==false) hoge(); と if (!test) hoge(); と どっち使ったほうがいいの?
指定がなければ、好きな方でいいよ
291 :
デフォルトの名無しさん :2010/04/07(水) 12:19:45
d
>>289 ふつうは後者。前者で書くと素人だと思われるかも。
素人は素人らしく書いてくれたほうが
!は見落としやすいと言う理由でコーディング規約で禁止するところもある バグの原因究明すると初心者は絶対に見逃すからな
だがな、if(test != true) とか書かれると一瞬頭が止まるぜ。
if(test == true)も思考が止まる
>>294 確かに見おとしやすいから
!の代わりに!!!を使うべしというルールのプロジェクトもあるよ
>>297 確かに見やすいが ! の数を間違える可能性を無視できないな
>>294 ほぇー
!はまだ見えるけど、iとjはきつい
monospaceフォント使ってないの?
つーか目が悪いならプログラマ向いてないだろう。
目が見えないプログラマってけっこういるよね
ダサ字等幅を使っている俺に資格は無かったキリッ。
自分は ! の忘れ(間違い)なんてしょっちゅうだけどな。 でもそれが原因でフィールドでバグになることはめったに無い。 その種の問題は単体テストちゃんとやってれば簡単に見つかるから。
すいません、初歩的なことで質問があるのですが、問題は 引数で受け取ったString型の文字列を出力する。呼び出し元に'C'という 文字を戻すというふうにあるのですが、どこが足りないでしょうか? 引数のSTUDYを出力しろってことですよね?あとCを戻すというのが意味がわかりません。 現在のコードだとCを出力して終了してしまいます。 class Jikko{ public static void main(String[] args) { Sample s=new Sample(); char c=s.method1("STUDY"); System.out.println(c); } } class Sample{ char method1(String str) { char c1='C'; return char; } }
変更前のコードだとコンパイルエラーでそ class Jikko{ public static void main(String[] args) { Sample s=new Sample(); char c=s.method1("STUDY"); System.out.println(c); } } class Sample{ char method1(String str) { System.out.println(str);//追加 char c1='C'; return c1;//変更 } }
>>307 さん
教えて頂き有難うございました。
'C'を呼び出し元に戻すというのは戻り値として利用すればよいということなのでしょうか?
しょっちゅう間違える時点でプログラミングの素質無いな。 うっかりバグ入りのままリリースしてそう。
311 :
デフォルトの名無しさん :2010/04/08(木) 00:26:14
Javaがインストールできないのでどうしたらインストールできるかおしえてください インストール中に『選択した昨日は現在使用できないネットワークソースにあります。』とでて先にすすみまん Googleで何時間も調べてイロイロとやっても無理でした オフラインも無理でした どうかおねがいします
まずごはんを食べに行きます。
>>311 何からインストールしようとしてるんですか?
class Nanika { Nanika oya=null; Nanika ko=null; void hoge(){ if (ko!=null) ko.hoge(); } void main() { Nanika a=new Nanika(); Nanika b=new Nanika(); Nanika c=new Nanika(); a.ko=b; b.oya=a; b.ko=c; c.oya=b; c.ko=a; a.oya=c; a.hoge(); } } こんな感じなんだけどエラーがでる
そうですか
317 :
デフォルトの名無しさん :2010/04/08(木) 00:59:05
>>313 何からとはどうゆうことですか?
一応以前にはダウンロードしてあるはずなんです。その前のソフトをアンインストールしたらいけるかとおもったんですけどどこにもなくタスクマネージャーでJava関係のプロセスも閉じたんですけどどうもダウンロードできないみたいで
日本語でOK
319 :
デフォルトの名無しさん :2010/04/08(木) 01:06:27
すいません 頭も悪くて どうしたらまたインストールできますかね?
staticメソッドしかないクラスのクラス名って省略できないの? a=Math.abs(b); を a=abs(b); とか;
import static java.lang.Math.*;
>>319 スタート→設定→コントロールパネル→
アプリケーションの追加と削除(or プログラムと機能)→Javaと名のつくモノを全部削除
323 :
デフォルトの名無しさん :2010/04/08(木) 01:25:51
OSはVISTAなんですけどその場合はなんて項目ですか? 上記の項目がなくて
>>323 コントロールパネル→プログラム→プログラムと機能
325 :
デフォルトの名無しさん :2010/04/08(木) 01:32:36
どうもです でもやっぱりなかったです。なにか他の原因っぽいみたいですけどなんですかね?
危険なので使用禁止
>>326 静的インポートって奴だね。
JDK5から追加されたんじゃなかったっけか
JDK5ってもう10年も前じゃないか
>>325 原因は、あなたの、状況の説明のまずさだろうな。
文章の主語を省略しない方がいい。
Javaよりもまず、日本語を勉強してみてはどうだろうか。
331 :
デフォルトの名無しさん :2010/04/08(木) 02:19:42
自分でも頭がわるく説明が下手なのは分かってます。一応考えられる解決策を言っていってもらえないでしょうか?
static import 宣言は -source 1.3 でサポートされていません (static import 宣言を使用可能にするには、-source 5 以降を使用してください) ???
コンパイル時の話でしょ
334 :
デフォルトの名無しさん :2010/04/08(木) 03:28:39
メソッド無しの定数だけ定義されてるインターフェースってあり?ダメかな?
チームに原理主義厨が居なければおk static import 使えば参照側のクラスに implement → 汚染もないし。
337 :
デフォルトの名無しさん :2010/04/08(木) 10:55:49
夜中にインストールができないと質問した者ですが インストール中に「選択した機能は現在使用できないネットワークリソースに あります」と出てしまいます。 「OKをクリックして再試行するか、インストールパッケージ 'jre1.6.0_13.msi'を含むフォルダに対する代替パスを 以下のボックスに入力します。」とゆう文章がでて先に進まないんですけど解決策をおねがいします
まず頭を良くしよう
341 :
デフォルトの名無しさん :2010/04/08(木) 12:00:00
頼みますよ オフラインでも同じのでて困ってます
みんなワカンネーんだよ。
わかりたくもないw
知らぬが仏
345 :
デフォルトの名無しさん :2010/04/08(木) 12:18:14
>>337 対処法は何を組み込もうとして居るかに因ります…
吉里吉里にしとけ
ちかくのパソコン教室に本体ごともっていって 「これにjava入れてください」って頼め 5000〜30000円くらいだろうが
>インストールパッケージ'jre1.6.0_13.msi'を含むフォルダに対する代替パスを以下のボックスに入力 すればいいよ。
誰かに遠隔操作してもらってインストールしてもらえば
>>303 ラバンスのTrueTypeのやつか?
あれ全角アルファベット無きそうなほど見づらいよな
ごめんな
>>341 みんなプログラムの質問に答える気でここにいるのに
アプリのインストール程度でつまづく奴の理解ができないんだよ。
よその板行ったら親切に教えてくれる人いるかもよ?
俺もコンパネに「プログラムと機能」が見つかりませんとかいうやつに
文章だけで教える自信無いわ
プログラマーは上から目線で嫌ですね
専門分野のスレで門外漢ないし超初心者が質問すると、 だれでもそう感じるものだよ。 プログラマーに限った話ではない。 いちいちムカついてたらネットで勉強なんてできない。
インストールの様子をニコ生で放送してくれりゃあ、コメントでサポートしてやんよ
Mac 用の .app 作る Ant タスクってないかね? 毎回 Eclipse でエクスポートするのメンドクセ
料理すんのに 「道具買ってこい」と指示出しておいて 「どこのお店ですか?どこにあるんですか?漢字読めません 買い物したことないです」 とか仕事で言われてみ
プログラマー? いや、インストラクター? いや サポート? いや お手伝いレベル
>>292 条件文だと分かりにくいから
上で書けって書いてあった本もあったぞ
質問内容からしてhoge()の必要性を感じない
361 :
359 :2010/04/08(木) 16:45:57
Javaの場合とC言語とVBのの書き方を分けない奴がいるのが 腹が立ってくる、お前の言語の書き方とは違うんだと百回くらい言いたい
?
!
365 :
359 :2010/04/08(木) 17:54:17
>>363 俺もなったよ
どうやって直したかは忘れた
複雑なことやらないならインストールせずに解凍してpathとおすだけで動く気がする
よくバージョンの後に付いてる 1.5*、1.5+ の * と + の違いって何?
>>367 1.5*=1.5.0〜1.5.22
1.5+=1.5.0〜1.6.19
うそかもしれん
正規表現なんじゃないの?
1.5*=1. 1.5 1.55 1.555 1.5+=1.5. 1.55 1.555 ってことですね
1.5*じゃなくて1.5.*じゃない? だから1.5系なら全部OKってこと 1.5+は見たこと無いけど1.5以上って意味かと
>>363 XPの俺が呼ばれた気がする。
おれもなぜかなったがインストーラーをパスに指定した気がする。
373 :
デフォルトの名無しさん :2010/04/08(木) 22:07:27
そのパスの指定ってのがわからないんです
> 1.5+
"1.5 or later"という表現をよく見るだろ。それのこと
>>370 ドットを忘れているぜ
>>373 そもそも何でJavaをインストールしようと思ったの?
学校の課題?
PCの初歩的な知識も無いんじゃ、いくら質問しても進展しないと思うよ。
JTabbedPaneの中にJTabbedPaneをaddするとエラーが出るのだけど これダメなの?
378 :
370 :2010/04/08(木) 23:29:49
379 :
デフォルトの名無しさん :2010/04/08(木) 23:56:43
>>375 以前はインストールできてたんですけアップデートしたらJavaが消えてて。
カボスやってたからJavaが必要だったんです。
>>376 ダメじゃない。やりかたが間違ってるか、それとも環境が壊れてる。
JTabbedPane tab0 = new JTabbedPane();
JTabbedPane tab1 = new JTabbedPane();
JTabbedPane tab2 = new JTabbedPane();
tab1.add("pan1", new JPanel());
tab1.add("pan2", new JPanel());
tab0.add("tab1",tab1);
tab2.add("pan1", new JPanel());
tab2.add("pan2", new JPanel());
tab2.add("pan3", new JPanel());
tab0.add("tab2",tab2);
add(tab0);
って感じで俺のトコだと問題無し。
381 :
デフォルトの名無しさん :2010/04/09(金) 00:59:05
Norton360が邪魔してJavaがインストールできないってどっかでみたきがするんですけどどうですか?
どうなんですかって聞く前にノートン止めて試せば良いじゃない。
383 :
デフォルトの名無しさん :2010/04/09(金) 01:29:17
無理でした。
385 :
デフォルトの名無しさん :2010/04/09(金) 02:01:06
パソコン初心者でそんなことできないっす
oracleに苦情の電話を入れるんだ
387 :
デフォルトの名無しさん :2010/04/09(金) 02:51:17
なんかオフライン〇〇のプロセスを閉じてたからインストールしろみたいなことでてるんだけど、めんどくさいからタスクマネージャーで全部のプロセス閉じるのはまずいですかね?
やってみたらわかる。マシンは壊れないから
パスの設定壊れてるだけ 前後入れ替えたり、いらないものを削除したら直る
390 :
デフォルトの名無しさん :2010/04/09(金) 11:15:25
前後をいれかえるってなにの前後ですか?そしてなにをいれかえるんですか?本当しつこくてすいません ちなみにJava関係はインストールするアプリケーション以外は消しました
そいつも一回消してDLしなおしてみたら? 入れ替えるのはパスの順序。システムの詳細設定->環境変数->PATH
javaの公式のサイトで最新版のやつをインストールしたけれど、使えるはずのクラスをコンパイラすることはが出来ません。 コマンドプロンプトで確認してみたらちゃんとインストールされていました。 理由を教えていただけたらうれしいです。
>>392 ∧∞∧ ┌───────
(*‘ー‘) < シラナイワ
\ < └───/|───
\.\______//
\ /
∪∪ ̄∪∪
>>390 JREのインストールなんて板違いだから失せろ。
PC初心者板にくだ質かエスパースレくらいあるだろ。
他人のレス全スルーしていつまでグダグダやってんだ。
ム板でやることじゃねぇ。
395 :
デフォルトの名無しさん :2010/04/09(金) 13:43:39
>>391 そのPATHまでたどり着いてからはなにをしたらいいんですか?
397 :
デフォルトの名無しさん :2010/04/09(金) 14:31:05
もしかして使えてた時にシステム復元で治りますかね?
情報小出しとcabosでどこいってもスレのルール違反になるな。
とりあえず、情報が三つ出てきたら一個答えるくらいのペースでいいんじゃないかな?
DOS窓開いて format c: でアプリ初期化してみるとか
・・・そうか、PATHが何なのかから話さないとワカラン世代が出てきてるのか。 どっかに良い説明サイトあったっけ?下手に訳も分からず変更するとマズいし。
決め打ちよくない。 format %SystemDrive% とすべき。 コマンドプロンプトからSystemDrive変数が見えるかは知らんが。
携帯から失礼します。>>400を試したらPCが応答しなくなり再起動もできなくなりました。どうしたら良いのでしょうか。
>>404 ささやき-えいしょう-いのり-ねんじろ!
はいになりました
いくらなんでも釣り針がでかすぎる
>>400 やってみました。
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\>FORMAT C:
ファイル システムの種類は NTFS です。
警告: ハード ディスクのドライブ C: のデータは
失われます。
フォーマットしますか (Y/N)? N
こわかった。
元質問者はVistaとの事なので、そこでYを押しても「マウントしてるからうんぬん」と言われて フォーマットできないはず。Win9xなら知らん
>>408 linuxじゃなくてよかったな
yとだけ出力し続けるコマンドとかあるからなあれ
>>410 yesは、同じ文字列をひたすら入力するためのコマンド。
引数なしだと'y'だけど、yes "なんか"にすれば"なんか"
をひたすら出力するよ。
エロゲーやってると使いたくなるな。
出力結果を10にしたいのですが、Mymethodメソッドにどういった処理を追加すればよいでしょうか? class MediumExam1 { public static void main(String[] args) { MediumExam1 med=new MediumExam1(); CompareSample com=new CompareSample(); med.Mymethod(com); System.out.println(com.i); } void Mymethod(CompareSample sample){ } } class CompareSample { int i=5; }
int i=5; ↓ int i=10;
>>413 void Mymethod(CompareSample sample){
sample.i = 10;
}
class MediumExam1 { public static void main(String[] args) { MediumExam1 med=new MediumExam1(); CompareSample com=new CompareSample(); med.Mymethod(com); System.out.println(com.i); } void Mymethod(CompareSample sample){ sample.i=10 } } class CompareSample { int i=5; }
>>413 void Mymethod(CompareSample sample){
}
sample.i+=(100+50)*20-2995;
}
>>413 void Mymethod(CompareSample sample){
}
while (sample.i!=10) sample.i++;
}
>>413 void Mymethod(CompareSample sample){
System.out.println(10);
System.exit(0);
}
420 :
デフォルトの名無しさん :2010/04/10(土) 15:18:04
OSを再インストールしたらまたJavaもインストール出来ると思いますか?
422 :
デフォルトの名無しさん :2010/04/10(土) 15:54:38
パッケージ xb.org とは何でしょうか?
propertiesファイルを作る際に native2ascii で半角スペースを \u0020 に変換したいのですができないのでしょうか? もしできない場合 半角スペースも含めたツールでのunicodeへの変換方法があったら教えてください
Propertiesで使うからこそのnative2asciiだろ? 別の用途で使うっていうならスレ違い。
言葉足らずでした。Propertiesでちゃんと使っています propertiesファイルの中で Key=[値] の[値]の中に半角空白を含めたいのですが、\u0020と書くとちゃんと半角空白を取得してくれるのに そのpropertiesファイルを作るnative2asciiでは\u0020に変換してくれないのです
>>425 半角空白をそのままpropertiesに書くと都合が悪いってこと?
427 :
デフォルトの名無しさん :2010/04/10(土) 20:08:36
カーネル2.6系のLinuxでJavaアプリを動かしているのですが、lsofコマンドを打つと、そのJavaアプリがかなりの量のpipeを使用しているように見えてます。
ちょうどここ
http://naruhodo.television.co.jp/qa3899162.htmlで質問されている方と全く同じ現象なのですが 、これは一旦なんなんでしょうか。
JavaからRuntimeでコマンドを実行したりしていますが、それが原因なのでしょうか。Runtimeのインスタンスには、使い終わったあと nullを突っ込んだりはしていませんが、それが原因でしょうか。
いずれにしても、この数がRuntimeでコマンドを実行するたびに増えていっています。
このままですと、リソースを食いつぶすのではないかと考えています。
何か手だてはありませんでしょうか。
ちなみに、/proc/sys/fs/file-nrを確認しましたが、特に増えて行く様子はありません。
なるほど、Properties は前の空白は除去する仕様だからか。 それの回避には、元ファイルで key=\u0020値 とコード番号で書いておいて、それを native2ascii に通せばいいんだよ。 [元ファイル] a=\u0020 b=\u0020a 漢字 [native2ascii実施後のファイル] a=\u0020 b=\u0020a \u6f22\u5b57 となる。
>>429 これは・・・使い方が想像もつかない・・・
ContextualRenderedImageFactory の実装って自作するのかな?
ParameterBlock なんか ClassCastException 起しかねない無茶苦茶な実装だし。
Graphics2D の実装から見ていかないと使い方わからんね。
使ってるサンプルとかも見つからないし、なんかもうSUNの冗談かと思いたくなってきた。
俺なら諦めてBufferdImageに書いちゃうな、もう。
複製してる時点で明らかに遅そうとしか。
432 :
デフォルトの名無しさん :2010/04/11(日) 08:43:13
すみません、超初歩的な質問なんですが・・ private final LinkedList<クラス名A> queue = new LinkedList<クラス名A>(); queueの型がクラスLinkedListと<クラス名A>の2重の型で指定されているように 見えるのですが <クラス名>の<>で囲んだクラス名で変数を指定するとどういう意味があるのでしょうか? また、<>で囲む方式の名称ってありますでしょうか? 昔は、<クラス名>で変数を指定したことは無かった気がします。。。
434 :
432 :2010/04/11(日) 09:05:47
>>433 Genericsっていうんですね。
ありがとうございますm(__)m
質問です V2CやeclipseなどのJava製のソフトを使っていると、 しばらく放置してから触るとGUIの反応が一時的に悪くなったあと すぐに反応が元通りになるですけど、これはどういう理由からなのでしょうか?
メモリがスワップアウトされてるか、弱参照オブジェクトがGCされてるんじゃね? 放置したアプリを触ったときに一時的に重くなるのは必然だと思うよ。 会社のヘタレマシンだとそれ以上にAdobeReaderが酷かったりする。
>>436 世代別GCの弊害ですか。
ありがとうございます。
納得の行く、どうにもならない理屈が付けられる場合、気にすることにメリットが あるかな?という程度。
TrueType Collection(.ttc)形式のファイルに含まれているフォントを、 (出来れば標準ライブラリで)全て読み込む方法があれば教えてください。
>>438 どうにかなるかならないかは質問者次第では?
どうにも我慢できないなら、言語を変えるとか、VMを自作するとか、いろいろ方法はあるよね。
質問者次第==(質問者に)メリットがあるか、だね。 自作のアプリならメモリ使用量を見直してみるとかあっても、V2Cとかeclipseじゃなぁ。 VM自作って考えたこともないけど、簡単なの?
かなり以前に、お絵描きアプレットに適した云々で質問したものです。 今更ですが、御回答ありがとうございました。 何用途向けは若干わかったのですが、お絵描きアプレットにどれが適しているかまでは 分からなかったので、とりあえず引き続きプログラムの学習を続けようと思います。 その学習の一環で、上位フォルダのファイルの拡張子でフォルダを作り、そこに移動させる 自作プログラムを作りました。(ただし振るスクラッチではなく、講座サイトなどのソースを見て、 このクラスが使えそうかなという感じで) このソフトを色々と拡張しようと思っているのですが、いくつかご相談をお願いします。 1 拡張子がmp3のとき、ID3タグを付与しようと思っています。 -1.文字列を16進法のバイナリに変換して、そのまま書き込むいい方法 -2.ファイル冒頭に任意のバイト数を追記する方法 2 任意のフォルダの場所で実行や、拡張子別に動作を分けるなど考えています -1.プロパティファイルを書き込むためのクラス 3 高速化について -1.一般的なfor文とfor(byte i = (byte)test.length();i != 0;i--)のコスト差 -2.条件分岐を減らす方法 -3.マルチスレッド化 -4.それ以外の高速化の方法 次のレスに詳細を書き込みます。
1-1 ID3v1なら末尾に付与のためfilewriter()で何とか出来そうなのですが、全半角両方が 一文字と認識されてしまうため、仕様の30文字制限の処理が上手くいきません。 そこでバイナリエディタで確認できる文字列に変換し、それで処理しようと考えています。 文字を(byte)で変換したり、intにcharを代入したりしましたが、上手くいきません 1-2 ID3v2の場合、ファイル冒頭に追記します。filewriter()だと末尾追記か全消ししかないため 使えそうにありません。何かいいクラスはないでしょうか? 2-1 ユーザーが入力した任意の文字列を取得するのに、プロパティファイルを使うのがちょうどいいと 思ったのですが、読み込む側の解説は充実していても書き込む側がさっぱりでした。 もし書き込みクラスというのがあればご教示お願いします。 3 これを作る一環で、必要はないと思いますが、偶然高速化についての記事を読みました。その記事では 3-1 for文の条件式はコストがかかると書いてました。128以下のfor文でカウンターを使わないなら、 質問文中のようにしようと考えました。これについて問題があるか否か。 3-2 if文はパイプライン処理が途切れるため遅くなると書いてました。nullについては例外を使って出来ましたが、 それ以外に何か減らすコツのようなものはありますか? 3-3 マルチコアならマルチスレッドは有効だと書いてました。スレッド化自体は講座サイトで分かるのですが、 より有効で実践的なマルチスレッドにするにはどのような考え方でマルチスレッドすればいいのでしょうか? 3-4 大雑把な質問で申し訳ないのですが、それ以外に何か高速化する手段があればご教示お願いします。
>>430 ,431
ありがとうございます。とりあえずbufferedImageの複製コースで今は実装してます。
ビルダーのjavadocを見ても全然わからんしやっぱりあんまり使われてないんですね…
遅延評価が出来そう?な感じで使えば良いものそうなのに残念なドキュメントです。
>>442 1-1
String のメソッドか、java.nio.charset.CharsetEncoder を調べる。
1-2
java.io.RandomAccessFile を調べる。
2-1
java.util.Properties を調べる。
3
上の情報を自分で把握できないレベルじゃ無駄無駄無駄無駄無駄無駄。
>>445 ありがとうございます。
>1-1
>1-2
Stringメソッドでそれらしい戻り値のは試してたのですが、今度は総当りでやってみます。
またそれ以外のメソッドも、今の読み取り能力ではいまいち理解できませんが、
とにかく試験的に使ってみてどのようになるか見てみようと思います。
>2-1
うっかりしていました。API自体は見ていたのですが、何故かset〜に気づかずないないと
思い込んでしまっていました。
そのせいで検索ワードも必要ない単語を混ぜて検索ばかり…。
講座サイトにも、初期のころに見つけたサイトに普通に書いてました…。
>3
おっしゃるとおり。ちょっと色気を出しすぎました。
とりあえず教えていただいた情報から、引き続き拡張してみたいと思います。
String namae[] = {"hoko", "yoko", "maki"}; char[] kae = namae[0].toCharArray(); String.valueOf(kae); if(kae[0].equals("h")){ System.out.println(kae[0]);} char型の配列をstringにして比較したいのですが これだと charは間接参照できませんとでます。 どうすればいいでしょうか
漢字使うならID3v2で"UTF-8"か"UTF-16"か"UTF-16BE"。詳しくは仕様書。
>>447 if(kae[0]=='h'){
もしくは
if(Character.valueOf(kae[0]).equals('h')){
charはプリミティブであってオブジェクトじゃない。
文字関係は微妙だよねぇ・・・
>>449 >>450 有難うございます。 後者だとできました
kae[0] == 'h' だとエラーになりました
もっと勉強してみます
>>452 エラーが出たのはもしかして ' (シングルクォート)ではなく " (ダブルクォート)を使ったのでは?
そのとおりでしたw まだまだわからんことだらけです
455 :
デフォルトの名無しさん :2010/04/11(日) 19:11:50
中級車向けの学習に適している オープンソースを教えてください。
例外処理でfinallyを使う意味がわかりません。 try{ }catch(Exception e){ } //この部分は必ず実行されるのでは?
URL url = new URL("
http://www.aaa.co.jp/image.jpg ");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestMethod("GET");
http.connect();
InputStream in = http.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
in.close();
http.disconnect();
としているのですが、指定urlにファイルがなかった場合、urlを指定した別のものに変えたい場合はどうすればいいのでしょうか?
>>456 out.println("a");
try {
out.println("b");
if(true)throw new IOException();
//if(true)throw new Exception();
out.println("c");
} catch (IOException e) {
out.println("d");
if(true)throw new Exception();
out.println("e");
}finally{
out.println("f");
}
out.println("g");
a-b-d-f
//外したException投げるほうだとa-b-f
ともにgは出力されない
>>457 IOExceptionキャッチして呼びなおせばいいじゃない
>>459 なるほど・・・Exceptionにはエラー吐かせることしか考えてませんでした。
ありがとうございます。
>>456 >>458 が書いているような
catch ブロックの中で例外が投げられるケースに加えて、
try や catch ブロックの中で return した場合でも、
後の部分は実行されない。
finally ブロックを書けば必ず実行される。
>>461 returnもそうなんだ シランカッタ
break continueとかもなのかな
>>456 catchした例外を例えば別の例外にラップしてスローしたら、以降の部分は実行されない。
try{
}catch(Exception e){
throw new RuntimeException(e);
}
// 実行されない
>>456 まぁ, Lisp の unwind-protect を物まねしてみただけだ
try{ }finally{ } なんかで、例外は呼び出し元に処理させるって手も。
finally内のコードって例外出ようが出なかろうが処理されるんだっけ? catch内でreturnとかした場合でもfinallyって処理されるんだっけ?
468 :
456 :2010/04/12(月) 01:02:25
なるほど参考になりました。 まとめるとfinallyを書かないと実行されないのは以下の通りですか? ・別の例外がスローされた場合 ・returnされた場合 ふと気になったのは アプリが途中で落ちた場合(exitなど) はどうなるんだろう。。
今やったら exitの場合はfinallyに到達しませんでした。 exitしたところで終了
例外の扱い方を詳しく書いた本ありませんか? 処理自体はわかるけど例外を効果的に使った設計方法がよくわかりません。
finally内でエラーが発生した場合どうなるの?
>>471 それが例外をthrowしたって事なら、finallyでthrowした例外が優先。
473 :
デフォルトの名無しさん :2010/04/12(月) 09:01:38
>>470 いろんなフレームワーク見ると
RuntimeExceptionを継承した自前のクラス作って
業務層でそれを投げて
コントローラーでハンドリングってのが定番になってる
以下、おれの経験だからみんなどうしてるか聞きたいんだけど
おれがWebシステムでよくやるのが
RuntimeExceptionを継承した親クラスを2種類作って
それぞれの例外クラスはどちらかを継承
・継続利用不可能なシステムエラー
データ不整合とかバグとかなんらかの対処をしなきゃいけない
ユーザのログインセッションも切断
・継続利用可能な業務エラー
2重更新など
ユーザにはエラーメッセージを表示して利用継続
以上、反論は受付は受け付ける
システムエラー以外に例外は投げるべきではないとか言ってた アフォ はまだ居るのかな。
475 :
デフォルトの名無しさん :2010/04/12(月) 11:25:55
>>470 オライリーの『Java魂』(ライオン本)あたりはいかがですか?
第5章を立ち読みするだけども可。
WebアプリケーションでURLクラスのsetURLStreamHandlerFactoryでハンドらをセットしたいのですが、 これってひとつのアプリケーションを飛び越えて、webコンテナ含むランタイム共通の設定になってしまうんですよね? てことは、複数アプリが動く環境では呼ぶべきじゃないものでしょうか? ファイルアクセス、インターネットアクセスできない環境でURLを引数に持つクラスを使いたくて、 memory://id みたいな感じで、メモリ経由(HashMapだけど…)でデータの送受信をしたいのですが… URLクラスをごまかす、いい方法って他にないでしょうか? なんでURLはfinalなんだよ…
Effective Javaの例外ってどうよ?
479 :
デフォルトの名無しさん :2010/04/12(月) 22:01:18
>>477 ソース見ると、単にクラス変数にセットしてるだけだから、クラスローダごとに
独立しているはず。
別のアプリに影響はないと思うんだが、実際にやってみたら違った?
jqGridが超イケてるんで似非Ajaxしようとしてるんですけども、 サーブレット(又はjsp)で、JSON書き出してjqGridにロードする 場合 検索フォームのボタン押す ↓ ServletへクエリPOST(DB検索) ↓ ServletでJSONObject/JSONArrayを作成 ↓ ??? ここからどうしたらいいんでせうか。 Beanなり、Session変数で受け取ると、ドキュメント(というか javascript内)にゴリゴリ検索結果のJSON書きつけることになるので ちょっと微妙なんじゃないかと思うんですが・・・ 外部JSONをjspで作る場合、jqGridのスクリプトを含んだメインページに 再度リダイレクトさせる必要があると思うのですが、どうも上手く表示が できませぬ。ボスケテ。
482 :
481 :2010/04/12(月) 22:33:55
言葉が変でした。 ×リダイレクト ○フォワード
プログラミングエラーか設定異常か外部システムに起因するトラブル以外で 例外起こしてるならただのヘボシステムだろ。 ちゃんとチェックしてから処理しろよ。
>>480 クラスローダごとにって、java.net.URL みたいな基本的なクラスを別々のクラスローダで読み込むのか?
485 :
デフォルトの名無しさん :2010/04/13(火) 00:30:59
>>483 コントローラー
↓
ファサード
↓
業務ロジック
ってなってるときに
業務層で2重更新がわかったらどうしてる?
>>477 javadocに「このメソッドは、使用する Java 仮想マシンで 1 回しか呼び出せません。」と
書いてあるから、設定したら他のWebアプリにも影響与えるね。
この辺はサーブレットコンテナ依存なんで一概には言えないが、Tomcatの場合
Java SE付属のクラスは、TomcatのVM全体で共有されるクラスローダに読み込まれる。
これは
>>484 も懸念するとおり。
他のWebアプリはおろか、Tomcat自体の動作にも影響を与える。
URLクラスを使うのは無理っぽいね。代わりにStringか独自インタフェースでリソース名を指定するようにして、
リソース名→ストリームへの変換を独自のファクトリで行うようにするしかないんじゃないかな。
ちなみに、Eclipseは中でそうやってて、FileやURLの代わりに
org.eclipse.core.resources.IResourceというインタフェースで
リソースを表現している。
>>481 テーブルを表示するページの処理と、検索結果としてJSONを返す処理の2つを作る。
ページの作り方を変えて、検索フォームと検索結果を同一ページで表示するようにして、
検索時にはページ遷移せず、AjaxでJSONもらってjqGridに表示するだけにすればいい。
jQureyなら、getJSON使えばURL指定でJSONをもらえるので、これを使う。
それが嫌なら、
>>481 の案通り、検索結果表示部と検索結果のJSONがすべて入ったJSPを送り返すしか。
>>477 URL のインスタンスが必要なだけならコンストラクタに URLStreamHandler を
取るのがあるからそれ使え。Factory の実装が必要なのは任意の文字列から
URL インスタンスを作る場合。
new URL("memory", "", 0, "1234", new MemoryURLStreamHandler());
親切な補足: Map<String,byte[]> cache = new HashMap<String,byte[]>(); class MemoryURLConnection{ public void open(){ } public InputStream getInputStream(){ return new ByteArrayInputStream(cache.get(getURL().getPath())); } } class MemoryURLStreamHandler{ public URLConnection openConnection(){ new MemoryURLConnection(); } } ちなみに USB ライブラリ作ったときにバルク転送 (双方向通信) の上位インターフェースを こんな感じで URL オブジェクトで返すようにしたことがある。あと関連としてプロトコルには x- 付けとけ。
>>489 コンストラクタまで目がいってなかったっす…
目からうろこ…
ありがとうございます。
>>489 プロトコルにはx- 付けとけって、その心は?
標準ではないって事を明白にしといた方がいいって事だと思うが
×関連 ○慣例 RFC 1738 Uniform Resource Locators (URL) 4. REGISTRATION OF NEW SCHEMES A new scheme may be introduced by defining a mapping onto a conforming URL syntax, using a new prefix. URLs for experimental schemes may be used by mutual agreement between parties. Scheme names starting with the characters "x-" are reserved for experimental purposes.
494 :
デフォルトの名無しさん :2010/04/13(火) 12:02:32
JDKをインストールすると、"C:\Program Files\Java\jdk1.6.0_19\bin\java.exe" がインストールされて、さらにその後 JREのインストールが始まって、 "C:\Program Files\Java\jre6\bin\java.exe" がインストールされるんだけど、 なんで二重にインストールされるの?
495 :
494 :2010/04/13(火) 12:15:00
>>494 なんとなくわかったんなら
わかった部分でも書いた方がよいよ
ひょっとしたら間違ってて
ほかの人に訂正してもらえるかもしれんし
あっ、なるほどと思って
自分の考えを改める人がいるかもしれん
497 :
494 :2010/04/13(火) 12:55:16
現時点での俺の理解だと JREによってインストールされる "C:\Program Files\Java\jre6\" 以下のファイル群は 公開JREと言って色んなアプリから参照されるためのもの。 アプリケーションの追加と削除に表示される。 JDKによってインストールされる "C:\Program Files\Java\jdk1.6.0_19\jre" 以下のファイル群は 非公開 JRE と言って JDK自身が使うためのもの。 公開JRE と 非公開JRE には機能的な違いはほとんどない。 ここまではなんとなくわかった。 未だ謎なのは上記2つの他に "C:\Program Files\Java\jdk1.6.0_19\bin\java.exe" など 非公開JRE でも 公開JRE にも分類されない変な場所に JRE の一部と思われるファイルがある事。
498 :
494 :2010/04/13(火) 12:56:44
修正 × 非公開JRE でも 公開JRE にも分類されない ○ 非公開JRE にも 公開JRE にも分類されない
1.6.0_19にアップデートしたらアプレットが動かなくなりました。 どうやらjavaコンソールの、詳細→セキュリティに「混合コード (サンドボックス内実行 vs. 信頼済み) セキュリティー検証」が追加され デフォルトが有効になっているのが原因。 ライブラリのapache関連jarも使用しているので、署名付きと非署名はだめになってしまう… しかも署名したjarにあるクラスからgetResouseでファイルアクセスしてもダメ。えっなぜ? さらにAsStreamならOK。なんで? いったいどーいうことなんだべさ
webコンテナのスレッドってアプリケーションごとに生成&管理されるのが仕様? そうだと、webでThreadLocal使うとやばいよね?
まず、重要なのはjava.exeとjavac.exe java.exeはJavaを実行するのに必要(JREとJDKにある) javac.exeはコンパイルするのに必要(JDKのみ) Sunの意図としては Javaを意識せずに使うアプリはJREを使ってね ふつーの人はそもそもこっちしかインストールしないし こっちは常に最新にしておいてほしい JavaWebStartで更新されるのはこっちだけ いずれシステムトレイにJavaを更新してくださいって出るよ で、開発するときはバージョンを変更するかもしれないのでJDKを使ってね こっちは1.4でも1.5でも1.6でもたくさんいれて設定を切り替えてね
>>500 そんなことないよ
スレッドが10個とか(設定により変わる)立ち上がって待ってて
クライアントからのリクエスト毎に割り当てられて
処理が終わったら、また待ちになる
銀行の窓口が10個あると思えばいい
で、ThreadLocalは窓口ごとに紐づくから
処理の最初と最後で初期化とかきちんとすればおっけー
リクエストしてきたユーザの情報とか
いちいちメソッドの引数で持ちまわしたくないようなもんを
突っ込んどくことが多い
Timer t = new Timer(); t.schedule(ts1,1,500); t.schedule(ts2,1,500); t.schedule(ts3,1,500); 登録したタスクのts2だけを削除することはできないのでしょうか? やはり再構築?
>>503 ts2.cancel();
じゃ、だめなん?
ClassのgetResourceとgetResourceAsStreamについてですが 同じリソースに上記メソッドで一度アクセスし、ファイルを変更して2度目のアクセスを試みると 内容が変更前のままに。 javadocはクラスローダの実装によるみたいな事を書いてありますが、 常に最新のものを読み込むとは限らないので、その場合上記メソッドは使用しない方がいい? というか、ばかでかいファイルファイル読むとメモリに持ち続けるってこと!?
>>504 あ、そんなのがあったんですね。ありがとうございます。
>>494 VMにはクライアントVMとサーバーVMがあってJREの方にはクライアントVMしか実装されてない。
とかいろいろ違う。
JAVA_HOMEの下にjre/server/binがあったりする。winにはなかった気がするが。
>>509 言えることはクラスローダーによって違う(オーバーライドできる)から、
何とも言えないということがいえる
アプレットでURLクラスを使いファイルをopenStreamするとどうもキャッシュされた値を返すようで、 サーバにリクエストが来ません。 キャッシュを使わないようにする方法はありましたら教えてください。
>>511 URL#openStream を使う代わりに、
URL#openConnection で URLConnection を取得して、
URLConnection#setUseCaches と URLConnection#getInputStream を使うとか?
Properties loadFromXML で 以下のエラーが出ます。
java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.
ファイルはUTF-8ボムなしです。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE properties SYSTEM "
http://java.sun.com/dtd/properties.dtd ">
<properties>
…
…
…
</properties>
apache系のjarにサインされたjarって配布されているのでしょうか?
エンコードしなくてもいいProperties代替クラスってないですかね。 現地でeclipseがないから直せないし、お客で変えてもらうこともできない。 アプリでnative2asci呼べまいいんだけど、JREでだめだし。。。あーめんどい
>>517 eclipse 使ってれば、プロパティエディタで一発なんだが。
>>517 Propertiesをextendsすれば?
あとは、native2ascii呼ぶというより自前で実装するか
だから XML にすりゃ良いだろ。
>>517 お前は勉強が足りないな
一言でいえば、低能
native2asciiなんて猿くらいしか使わんよ
●その1 while(true) { n=request(); //0〜Nの値を返す switch (n){ case 0: ここに処理を全部書く break; case 1: ここに処理を全部書く break; ... case N: ここに処理を全部書く break; default: System.out.println("Error"); }} ●その2 while(true) { n=request(); //0〜Nの値を返す switch(n) { case 0: shori0(); break; //処理を全部書いたメソッドshori0()を実行する case 1: shori1(); break; //処理を全部書いたメソッドshori1()を実行する ... case N: shoriN(); break; //処理を全部書いたメソッドshoriN()を実行する default: System.out.println("Error"); }}
523 :
522 :2010/04/15(木) 14:35:09
●その3 Shori[] shori=new Shori[N+1]; //メソッドjikkouを持つスーパークラス Shori shori[0]=new Shori0(); //処理書いたShoriのサブクラス Shori shori[1]=new Shori1(); ... Shori shori[N]=new ShoriN(); while(true) { n=request(); //0〜Nの値を返す try { shori[n].jikkou(); } catch(Exception e) { System.out.println("Error"); } } その1〜その3でそれぞれの処理方法の 特徴の違いって何?どれで作ったほうがいい? ちなみに仕様変更とかで新しく処理加える可能性があるとして どれの使ったほうがいいの? プログラミング初心者なんでよくわかんないっす
524 :
522 :2010/04/15(木) 14:38:05
言い忘れてました
>>523 の
その3のShoriのサブクラスはjikkouメソッドをオーバーライドして処理を個別に変えてます
class base { void hoge(); }; class bbb extends base { void hoge(); } while(true) bbb.hoge(); テキトー
526 :
522 :2010/04/15(木) 14:45:32
>>523 でミスがもうひとつ
Shori shori[0]=new Shori0(); //処理書いたShoriのサブクラス
Shori shori[1]=new Shori1();
...
Shori shori[N]=new ShoriN();
↓
shori[0]=new Shori0(); //処理書いたShoriのサブクラス
shori[1]=new Shori1();
...
shori[N]=new ShoriN();
すこしよけいな文字が入ってました
>>526 プログラムのセンスというか人として終わってるから
程度の低い質問
初心者のくせに態度がでかい
これはひどい
プログラミングに不向きな人は何作ってもダメなものしかできない
回答初心者なんでよくわかんないっす
535 :
デフォルトの名無しさん :2010/04/15(木) 16:30:15
>>522 数値とクラスのマップを持っとく
Map m = new HashMap();
m.put("0", new Shori());
・・・
ググると答えがでるって ばあちゃんが言ってた
>>535 何でキーが文字列
Integerで良いじゃないか。
IteratorをSetに変更したいのですが、どうすればいいでしょうか?
540 :
デフォルトの名無しさん :2010/04/15(木) 17:24:18
>>539 Iteratorにする前にする
無理なら回すしかないんじゃね?
>>540 new ArrayList()にあたるSetって何になります。
そういえばSetなんてnewしたことないや。
543 :
デフォルトの名無しさん :2010/04/15(木) 18:00:40
>>517 探したら一発であったな
org.apache.commons.collectionsExtendedProperties
無駄に高機能
そしてなぜか要素ごとに改行が入る
>>518 プロパティエディタに関してもNetBeansの方がプロ向きだな。
\\server\foo\hoge.txt を File から URL に変換すると file://server/foo/hoge.txt になる。 その URL から InputStream をとろうとすると失敗するんだけどどうすりゃいいの? スタックトレースを見ると何故か FTP で逝ってるっぽい… java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at sun.net.NetworkClient.doConnect(NetworkClient.java:157) at sun.net.NetworkClient.openServer(NetworkClient.java:118) at sun.net.ftp.FtpClient.openServer(FtpClient.java:488) at sun.net.ftp.FtpClient.openServer(FtpClient.java:475) at sun.net.www.protocol.ftp.FtpURLConnection.connect(FtpURLConnection.java:270) at sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:352) at java.net.URL.openStream(URL.java:1007)
>>548 普通に実行できるからわからない…
public static void main(String[] args) throws java.io.IOException {
java.io.File file = new java.io.File("\\\\server\\foo\\hoge.txt");
java.net.URL url = file.toURL();
System.out.println(url);
java.io.InputStream in = url.openStream();
java.util.Scanner scanner = new java.util.Scanner(in);
while(scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
in.close();
}
>>648 もしかして、ファイル名をStringリテラルで表す時に、
"\\server\\foo\\hoge.txt"になってない?
UNCパス名なら"\\\\server\\foo\\hoge.txt"
551 :
522 :2010/04/16(金) 02:21:01
俺はどうすればいいんだ・・・
>>548 ああそれ JDK 1.1 くらいの時代に見たことがあるなー。
いやただそれだけだがw
Javaアプレットについて質問をさせてください。 画像を表示するアプレットを作成しようとしたのですが、画像がうまく表示されません。 画像データがなしでビルドしてもエラーが出ないので画像の読み込みがうまくできていないのかもしれません。 原因が分かる人いたらコメント願います。 ※Eclipse3.5を使っていて"gazou.png"というファイルを読み込んで表示しようとしています。 package appletrennshuu; import java.awt.Graphics; import java.awt.Image; import java.applet.*; public class Appletrenshuu extends Applet { Image image; public void init(){ image=getImage(getCodeBase(),"gazou.png"); } public void paint(Graphics g){ g.drawImage(image, 0,0,this); } }
gazou.png をどこに置いてるか知らないが "appletrennshuu/gazou.png" だとどうだとエスパー魔美
>>551 request が数なんか返さずに Shori の参照を返すようにするとか。
request().jikkou();
エラーハンドリングの位置が重要じゃなくなれば、 request の中で全部処理するようになるのだろう。
あと、Java には enum というのがある。
そいつに構うな
>>544 びみょぉ〜、書き込むときはエンコード指定してもunicodeエスケープしちゃう…
>>555 無事表示されました。ありがとうございます。
ワロタ1
素人ばっかりだな
オマエモナー
>>555 ありがとうございます。画像が表示できました。
( ̄□ ̄;)!!
配列よりもコレクションつかったほうがいいの?
case by case
face to face
Set<E>とかClass<? extends Object>とか < > ←のこのカッコが何か分からない 持ってるJava入門書が古いのか知らないけど< >のカッコとか全く出てこない どっか初心者にも優しく説明してるサイトとかあったら教えてください
いやです><
Java5から登場したジェネリックスっていう機能 もう5年前ぐらいの話なのでその参考書は1.4時代のだいぶ古いやつだろうね ぐぐればいっぱい出てくるよ
>>568 Generics
Vector strings = new Vector();
strings.add("Hello Generics");
String s = (String)strings.get(0);
// 誤ってIntegerを追加できる
strings.add(new Integer(0));
Integer i = (Integer)strings.get(1);//実行時にclass cast exception
Vector<String> strings = new Vector<String>();
strings.add("Hello Generics");
String s = strings.get(0);//cast不要
strings.add(new Integer(0));//コンパイルエラー
573 :
568 :2010/04/16(金) 18:39:21
>>572 ありがとうございます
Set < E
E > null
ってことですね
5.0からもう五年か。もう6がEOL待ちかよ。
>>573 型引数で調べてみ。
慣れるとそこそこ便利。1.5から使える。
576 :
568 :2010/04/17(土) 16:17:12
Java5 ジェネリックス Generics 型引数 教えていただきありがとうございます ググってみます
577 :
568 :2010/04/17(土) 16:22:04
578 :
デフォルトの名無しさん :2010/04/17(土) 17:13:39
デフォルトパッケージにAと言うクラスがあるとします。 また、パッケージtestにBと言うクラスがあるとします。 ここで、Bのソース内からAのクラスを使うように記載しようとすると参照できないのですがどのようにすればよいのでしょうか。 import A;とも書けません。 ※なんでこんなことになったのかと言うと、上記のAのクラスはあるところから提供されていて それをそのまま使うようにいわれたのですが、上記のようにエラーが発生して使えないのです。 ちなみにすべてのクラスをデフォルトパッケージにしてしまえば解決するのですが、 そういう方法以外にないものかと思いまして。。。
Object a = Class.forName("A").newInstance(); // 以下全部リフレクション操作... くらいしかできなかったような
>>289 の件についてだけど
俺は英語として自然に読めるほうを使ってるんだけどどうかな。
if (!list.isEmpty()) ...
// if list is not empty ...
if (flag == false) ...
// if flag is false ...
if (!flag) ...
みたいな書き方は、どうも違和感を覚える。
if not flag?
>>580 それはflagっていう変数の名前付けが悪いからでは?
flagの真偽値とそれの意味するところの関係が曖昧だから。
>>580 >>289 は、単純に変数名が悪いだけだと思うぞ。
変数名まともならどっちでもいいと思う。
ちなみに、AはBか?を問うときは、三単現でもおかしくないんだぜ。
一例として flag っていう変数名を使ったけど、 要するに boolean 型の変数名とか boolean を返すメソッドの名前が 動詞句とか動詞の過去分詞形だと ! を使う方が自然ではないかという考え。
if x is not y, x... という文を if not y, x... と書くのは普通にあるんじゃないか?
プロフェッショナル 〜コーディングの流儀〜
余談だけど Peter van der Linden は、 if (!no_data) ... は二重否定 (not no data) で良くないので if (no_data) ; // 空文 else ... と書け、と言ってる。 ちょっと行き過ぎな気もするが、英語圏の人は気になるのか? 彼いわく Double negatives don't unconfuse code, so if the empty statement helps you never fail to avoid them, then don't not go for it. (二重否定がコードを不明瞭にしないことはないので、 そういった事態を避けることに失敗しないために空文が役立つ場合は、 ぜひ使わないことをやめるといい)
まず not_data なんて名前自体に否定を持たせるような名前は付けないとは考えなかったんだろうか。 溺れた人を助ける医者の話を思い出すわ。
リーダー bool よりも boolean 私はね これでjavaに決めたんだ
ド・モルガンの法則がつかえるときは使えば多少ましになるよ。
sun がoracleに飲み込まれて javaの生みの親であるゴスリング氏やその他重要な人物が一身上の都合で辞めまくってるわけだが。 java終わった?
終わった
いまさらな話題だな
594 :
デフォルトの名無しさん :2010/04/18(日) 11:21:23
なぜコンパイルエラーになるか教えてください。 class A{ public static void main(String args[]){ S ss=new S(1,2); int aa=mm.geta(); int bb=mm.getb(); System.out.println(aa); System.out.println(bb); } } class S{ public void S(int a,int b){ M mm; mm=new M(); mm.a=a; mm.b=b; } } class M{ int a; int b; public int geta(){ return a; } public int getb(){ return b; } }
S(int,int)というコンストラクタが無いから
4〜5行目のmmは?
597 :
594 :2010/04/18(日) 12:22:56
>>595 public voidを取ったらその部分はなくなりましたが、
mm.geta();
mm.getb();
がおかしいそうです。どうしたらいいでしょうか。
ss.mm.geta.......
599 :
594 :2010/04/18(日) 13:09:59
できない(;_;)
>>599 class S{
M mm;//<---
S(int a,int b){
mm=new M();
mm.a=a;
mm.b=b;
}
でできるけど、カプセル化を勉強しよう
class S のコンストラクタ内で持っている M mm をインスタンス変数に。
602 :
594 :2010/04/18(日) 13:29:44
603 :
594 :2010/04/18(日) 13:40:12
>>601 ありがとうございます。
インスタンス変数について勉強してみます。
大学でjavaの単位を落としています。
クラスSはこのようにして、それに合わせてクラスSとMを修正してね class S { private M mm;//インスタンス変数は隠蔽 S(int a, int b) { mm = new M(a, b); } public int geta() { return mm.geta(); } public int getb() { return mm.getb(); } }
605 :
594 :2010/04/18(日) 13:57:24
606 :
デフォルトの名無しさん :2010/04/18(日) 15:41:59
floatを四捨五入して小数点第二位までのStringにするにはどうすればいいでしょうか。 1f → "1.00" 1.5f → "1.50" 1.55f → "1.55" 1.555f → "1.56" という感じです。
>>606 System.out.println(String.format("%1.2f",aa) );
608 :
デフォルトの名無しさん :2010/04/18(日) 16:29:00
この間復刊した「Java並行処理プログラミング」を読んでるんですが、 問題あるコードの例として、下記の断片が挙げられてます。 単なるpublic公開は当然問題があるのはわかるのですが、 下記のAsserionErrorが投げられるような不正な状況が発生するという事でした。 断片↓ public Holder holder; public void initialize() { holder = new Holder(42); } Holderの定義↓ public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSaniity() { if (n != n) throw AssertionError("(rya"); } } 直感ではまったく理解できないのですが、これがダメという事は、 Holderのコンストラクタの処理完了前に、 メモリだけ確保された状態の参照がholderに代入されるって事ですよね? こんな順番めちゃくちゃがJavaの仕様なんだったら世の中のコードのほとんどがダメダメなんじゃないでしょうか。
assertSaniity() とやらが暗黙に呼び出されるような仕掛けが、いつの間にか 追加されていたとは、俺は古いのか。
611 :
608 :2010/04/18(日) 17:54:12
>>610 そう、アウトオブオーダー書き込みの話です。
間違ってないつもりです。引用は、初版のP.59のList3-14,3-15です。
原書のerrataをみても訂正はありません。
この本曰く、このコードは、
「他のスレッドからは正しくないステートのHolderが見える事があり得ます。
この正しくない公開によって他のスレッドは、"一部だけ構築されたオブジェクト"を見る事になります」
と説明されています。
>アウトオブオーダー書き込みかなぁ?
おれも最初そう思ったがコードを
>>608 が勝手に断片化して肝心の部分が書かれてないだけじゃないの?
613 :
608 :2010/04/18(日) 17:58:05
ここでアウトオブオーダー書き込みと言っているのは、 holderへの新オブジェクトへの参照を書き込むのが、 コンストラクタの処理完了より先に書き込まれる、という事です。 本書ではこのコードについて、上記の説明の前に 「この見た目には無害なプログラムがエラーになる様子を実際に見えて、びっくりする人もいるでしょう」 と言っています。
614 :
608 :2010/04/18(日) 18:04:42
勝手に断片化はしてないです。
List3-14(断片)と3-15(Holderの定義)を、そのまま書いてます。
なにも省略してません。
>>613 と
>>613 の引用は、3-14の説明箇所の文です。
3-15(Holderの定義)は、「List 3-15 正しく公開されないとエラーになりそうなクラス(not so good)」という説明で書かれています。
615 :
608 :2010/04/18(日) 18:35:50
610のページにもあるように、Stringにさえアウトオブオーダー書き込みの問題は起こる わけで、そんなモノなんだから作られるインスタンスの中身になんか実は一切関係ない。 そのコードは、それが起こった時に目に見える例外を起こさせるためのテストオブジェクト。 大事な部分は、それを実際にインスタンス化させているコード例。それがきっとある筈。 ・・・だと思うフツー。俺その本もってねーけど、その説明こそキモなんだから。
617 :
608 :2010/04/18(日) 18:50:57
>>616 > 大事な部分は、それを実際にインスタンス化させているコード例。それがきっとある筈。
それがまさに、
>>608 の「断片(本書のList3-14)」という事だと思うんですが、そうじゃなくて?
>>608 みたいなコードは普通に書いてるぞ?
これがダメだったら、どうすりゃいいんだよ?
変数をprivateにして、それを参照するメソッドを全部synchronizedにするのか?コンストラクタ以後値を変えないのに?
まじかよ、そんな事するのか本当に?
実際は「起こる可能性がある」というレベル。 public class Test extends Thread { public Holder holder; public void initialize() { holder = new Holder(42); } public static void main(String[] args) { Test thread = new Test(); thread.initialize(); thread.start(); while (true) { thread.initialize(); } } public void run() { while (true) { holder.assertSaniity(); } } } で数分ブン回しても起きないし。
ちなみに、Run() 中でキャッシュされる可能性とか考えて System.out.println(holder.hashCode()); を入れて回したが、ちゃんとインスタンスは切り替わってる。
そりゃまあマルチスレッドの問題は、 大抵「起こる可能性がある」でしかないわな。 環境と状況依存。 Intel CPU上のSunVMでどんなに頑張って再現できなくても、 Power上のIBMVMやItanium上のHPVMではぽろぽろと発生したり。
内部クラスの内部クラスの内部クラス
>>308 メモリモデルを理解すれば問題が理解できる。
正しく同期しなければ別スレッドには最新の値は見えないことがある。
cpuのレジスタに乗ったままの情報はメインメモリに書き出されるまで別スレッドから参照されない。
マルチスレッドは奥が深いです。いい本なので頑張って。
>>618 通常は作ったオブジェクトを他のスレッドに渡すときに
その参照に対する可視性を保証するために同期するのが普通なので
その同期の副作用にてオブジェクトの中身に対する可視性も保証される。
参照の同期すらケチった場合に微妙な問題が起こりうる。
class TestClass { private static final OBJECT=new Object(); TestClass() {} void hoge() { synchronized (OBJECT) { System.out.println("アフォ"); } } }
626 :
デフォルトの名無しさん :2010/04/19(月) 02:23:21
適時 synchronized で囲んどきゃレジスタに乗ってるのもフラッシュされるだろ。 前世紀から RS/6000 でガンガン開発&動かしてるけどアウトオブオーダーと思しき挙動には 会ったことがないな。まぁコードレビューするときにちゃんと考慮できてるかで相手の技量を 読む程度だな。
>>624 ,
>>626 適時ったって、これじゃあ、フィールドを参照する(=ほとんどすべて)のメソッドを
みんなsynchronizedにしないとあかん事になるんじゃないか?
ふつう、synchronizedなんて一時的に明らかな不整合状態になる時しかしなくね?
>>628 別スレッドから変更できる変数で判断している部分は、その時なんじゃね?
リフレクションを追っていくとnativeコードが登場します。 リフレクション多用はやっぱりパフォーマンス悪化につながりますかね…
32bitWindows+tomcatで動作しているモジュールは linux64bitOSの64bit用JRE環境上で正しく動作するでしょうか? Windowsに特化したコード(パスも含め)は一切ありません。
試してみるという方法はないのでしょうか?
>>633 すみません。完全に間違った表記でした。
人通り動作することは確認しました。
ただ根本的に、OS、JREのビットの問題はSun(Oracle?)が保証する範囲であり、javaPGが気にする範囲ではないかということと、
客に伝えるために、その辺を明記しているページがあれば教えてもらえないでしょうか。
最初の質問と全く違っていましてすみません。
Write Once Run Anywhere って唱えておけば言いんじゃね。 つか実行環境が 8bit だろうが 64bit だろうがバイトコードは変わりません。
636 :
デフォルトの名無しさん :2010/04/19(月) 19:54:33
CSVファイルの読込み方法について教えて下さい CSVの構成は3列固定で必ず値が入っています 行数は何行入っているかわかりません 値の取得は行単位で取得しています リスト変数を使わずに2次元配列で各値を区切り文字で分解後、格納しています 予想していた行よりもCSVの行が多いと配列から溢れてエラーとなります そこで、ファイルを開いた後にCSVファイルが何行であるかを調べる方法がありますでしょうか? 因みにリストは使えません。配列のみで操作したいです。 よろしくお願いします
リストに入れて最後に配列化すりゃ良いだろ。
>>636 最後まで読まなきゃ何行あるかなんて分かるわけがない。
> 予想していた行よりもCSVの行が多いと配列から溢れてエラーとなります
なら、読み込みながら行数を数えて、用意していた配列から溢れそうなら、
もっと大きい配列を作ってそっちに今までの配列から内容をコピーして、
今まで使っていた配列を指していた変数に大きい方の配列への参照を代入して読み込み処理を続ける。
要はArrayListの再発明だな ご苦労さんだw
つぎはCVSの方言聞いて来るな
だいたい、ストリームを開いた時点では最後の行は存在しているとは限らないしな。 Socket#getInputStream() とか。
Stringが複数あって、長さがまちまちなんですが 位置を揃えて綺麗に出力するにはどうすればいいでしょうか? \tも使ってみたのですが、長さが違うので同じタブ数でもズレて表示されてしまってました 文字数をカウントしてそれで分岐させれば表示はできるとは思うのですが できるだけシンプルに作りたいのです・・・
645 :
デフォルトの名無しさん :2010/04/19(月) 22:19:36
Excelsior JETで作ったソフトは100メガとか バカでかくなるんだけど、小さくする方法知りませんか? 試用版なんでメーカーには聞けません。
>>645 購入検討中です、って言えば答えてくれるんじゃないの。
>>644 System.out.println("置換".replaceAll("換","か\\\\\\\\ん"));
>644 "か\\\\\\\\ん"
649 :
644 :2010/04/19(月) 22:44:28
自己解決しました。 Matcher.quoteReplacement でエスケープすれば良い、ということでした。 regexの方は正規表現なので気をつけないといけないけど replacementは普通の文字列として考えれば良い、 と思い込んでいました。
>>638 thx
レコード数をカウンタで回して再配列化するって方法には気がつきませんでした。
ありがとうございました!
結局VectorとかArrayListと同じことやってるじゃない。
基礎を勉強するためには多少の再発明は必要なんでは。
>>643 ざっと読んだだけだけど、たぶん文字をバイト配列に変換して、
その長さによって全角文字と半角文字を判別してるよね(違ってたらすまん)。
バイト数を根拠に文字幅を決めてしまってよいものかな?
他に良い方法があるかって言われると思いつかないんだけど。
(強いて言うならFontMetricsを使うことかな。めんどくさそうだけど)
>>642 の言う「出力する」っていうのが
(1)ファイルに書き込む
(2)印刷する
(3)ウィンドウに表示する
このいずれかで良いのであれば、HTMLにしてしまうのが簡単。
標準出力に表示したいのであれば、やっぱり
>>643 みたいになるかな。
>>653 org.apache.commons.lang.StringUtilsのleftPadとかrightPadじゃだめな感じ?
655 :
デフォルトの名無しさん :2010/04/20(火) 00:18:16
>>651 ははは…おっしゃる通りで…
>>652 さんの通り、学習中の身なので遠回りしてみたかったってのもあったんです
(あと、二次元配列を使ってみたかった)
実装して納得出来たら素直にArrayListを使います。
頭悪い質問に真面目に回答して下さってありがとうございました。
656 :
643 :2010/04/20(火) 00:24:33
>>653 固定幅フォントじゃないとだめだけど・・・ バイト数=長さでいいはず\t\r\nはシラネ
htmlっていう発想はなかったわw
rightPadでもよさそうだね 事前に文字数数える必要はありそうだけど
だれかcommons翻訳してくれる人いないのかなぁ
機械翻訳でやってみようかなぁ
用途はしらないけど、もしかしたらそのまま\tで出力してエクセルに張り付けてもいいのかもね
クラス A とクラス Bが相互に参照している時って Java コンパイラはどうやって整合性確認してんの?
class ClassA { ClassB classb; ClassA(){ new ClassB(this); }
class ClassA { ClassB classb; ClassA(){ classb=new ClassB(this); } } class ClassB { ClassA classa; ClassB(ClassA a) { classa=a; } }
class ClassA { ClassA() { ClassB b=new ClassB(); } } class ClassB { ClassB() { ClassA a=new ClassA(); } }
>>656 >(3)ウィンドウに表示する
その方法だとこれみたいにGUIに描画すると半角、全角混ぜると描画したときに揃わないぞ。
>>657 着眼点はいいんじゃない。C++なんかだとヘッダファイルの定義で判断してるもんね。
Javaだと一つのクラスの定義はclass{}の中におさまってるから、
ヘッダファイルに相当する部分はコンパイラが自動生成できるよ。
importだってCのincludeみたいにただ展開するだけじゃないしね。
それでどうやって整合性確認、というか相互参照を解決しているの? 俺も知らないから興味ある
>>664 そういう疑問を持ったことがないならキミはプログラマになった気になっているだけだろう。
>>666 たとえば、
1パス目:全.javaファイルの型名だけ解析
2パス目:全.javaファイルのメソッドシグニチャを解析
3パス目:全.javaファイルのメソッドの中身を解析
みたいな感じでやっとくとか。
ワンパスで完全な.classファイルを出力し
一度解析した.javaファイルは二度と解析対象にせず、
みたいな無茶な前提がなければどうとでもなるような。
クラスファイル自体が C のオブジェクトファイルみたいなもんだからな。 効率を無視して良いなら、とりあえず全対象ソースに対して参照しているクラスやシグネチャを 正しいものとしてバイトコード化し、最後にリンク代わりに呼び出し整合性を確認といった 方法がとれる。
初めに必要なファイルを読み込んじゃうのか クラス名とファイル名を一致させるのはこの為なのね
>>663 これって2chとかのこと?
font指定すればいいんじゃねーの?まあGUIならtable使うが
for文の中にローカル変数の定義書くとパフォーマンスが悪くなるので for文の外で定義すべきでしょうか?
>>657 class TestSuperClass {
TestSuperClass(){}
}
class TestSubClassA extends TestSuperClass {
TestSubClassA() {}
}
class TestSubClassB extends TestSuperClass{
TestSubClassB() {}
}
TestSubClassA a=new TestSubClassA();
TestSuperClass s=a;
TestSubClassB b=s;
コンパイルOK,実行時エラー
という情報をどこかで聞いた
整合性なんて無い
?
コンパイラ持ってないんだろ
コンパイラ持ってないことを知らないんだろ
680 :
デフォルトの名無しさん :2010/04/20(火) 20:24:00
javaのコンパイラは高いからな。
javaのコンパイラは厳しいからな
682 :
デフォルトの名無しさん :2010/04/20(火) 22:50:51
みなさんはどうやってjavaをマスターしましたか? 授業でですか? 独学でですか? 仕事でですか?
683 :
デフォルトの名無しさん :2010/04/20(火) 22:53:46
留学で
javaの駅前留学
ArrayList<型> 変数名の<型>の部分にクラスを指定し その後、変数名.add(型.メソッド());のようにすることって可能なんですか? メソッドの戻り値が型に合ってませんとか怒られるけど戻り値がクラスの名前あls;kふぁ;s
687 :
デフォルトの名無しさん :2010/04/21(水) 06:04:23
学校と本でJavaの学習を終え、 自分なりにアプリケーションを作ってみようと 簡単ではありますが設計書を書きました。 そこで問題が・・・ 当方のアプリケーションにプラグインを実装したいと考えているのですが、 どの本にも実装方法が記されていないばかりか、 「簡単でも良いから教えてください」と、 学校の先生に何度か聞いても 「時間がある時に教えてやる」と言われたまま数ヶ月も経ってしまいました。 普段は学校、アルバイトと、時間が無いので、 ゴールデンウィークから開発に着手したく少し焦っています。 Javaアプリにプラグインを実装するのに良い資料ありませんでしょうか? もしくはご経験のある方がサンプルを示して頂ければ嬉しい限りです。 よろしくおねがいします。
>>686 public class Hoge {
public static void main(String[] args) {
ArrayList<String> hogeList = new ArrayList<String>();
hogeList.add("Hoge");
hogeList.add(Hoge.newHageString());
for(String hoge: hogeList){
System.out.println(hoge);
}
}
static String newHageString(){
return new String("Hage");
}
}
これならできるが、こういうことか?
>>687 あんたの指すプラグインがわからない
あんたが作るアプリケーションに後からプラグインという形で拡張できるようにしたいということかな。
(jarファイルかなんかで。)
>>687 自前のpluginを作りたいならI/F含めて設計して勝手に仕様付けすればいい
>「時間がある時に教えてやる」
は恐らく、その先生とやらが分からないものと考えたほうがいいだろう
生徒の前で分からないとは言えないからなw
>>687 思い描いているプラグインのシステムに近いものを実装しているアプリケーションで
ソースが公開されているもののソースを眺めれ
eclipseのプラグインとかantの新規タスクの作成と受け入れの部分も一種のプラグインシステムだ
>>687 「機能の一部を差し替え可能にしたい」のが動機なら、
リフレクションとかデザインパターンの「Strategy」あたりの勉強が必要ではないかと
プラグインの機能によっては「Abstract Factory」まで話が膨らむかもしれないけど
「専用ディレクトリに追加JARをおくとプラグイン一覧が自動更新」とかは
クラスローダの自作も必要になるかなぁ
一番手っ取り早いのは、簡易に考えて特定のinterface実装させたクラスの呼び出しかな イベントクラス等のイメージで組み込めばいいかと
>>673 美しいコードとしては外。
理屈としてはループの回数だけスタックに参照(8byte?)を載せ下げするので、その分の付加がかかる。
695 :
デフォルトの名無しさん :2010/04/21(水) 11:39:55
素人vs美人 変数は使う直前(使う時)に宣言するのがマシンパフォーマンス的には良い ループの度に変数宣言はクドイから俺なら変数宣言(変数初期化)はループの前(外)かなぁ ループに入らないパターンがあるならループの前に分岐させて変数初期化してやればクール ループにならないパターンは変数を読まないからメモリが空くし ま、分岐で処理時間掛けるかメモリ食わせるかの優先しだい
>>673 くらいのだったらVMの中の人が最適化してくれるんじゃねえの
>>689 お前もわかってないだろw
プラグイン用のインターフェースを決める。例えば
interface Plugin{
void execute();
}
プラグインクラスは上記Interfaceをimplする。
プラグインの.classなり.jarなりをクラスパスが通っているところに配置する。
Plugin plugin = Class.forName("プラグインのクラス名").newInstance();
plugin.execute();
でいけるんじゃないか?俺もわかってないけどw
プラグインファイルを置いただけでプラグインの一覧とか表示するなら
Fileクラスつかってプラグインディレクトリを探索したり、定義を決めて
xmlで書かせるなりする必要あるし、自分アプリと連携するなら
アプリからプラグインに連携項目を公開する方法とか決めないと。
そんなものを学生レベルに一から教えるのはとてもめんどくさいから
>「時間がある時に教えてやる」
は嘘ごまかしではない気がする。その後忘れてると思うけど
for (int i=0;i<10000;i++) { long k=0L; ... } long k; for (int i=0;i<10000;i++) { k=0L; ... } int i; long k; for (i=0;i<10000;i++) { k=0L; ... } long k; for (int i=0;(i<10000)&&((k=0L)==0L);i++) { ... } int i; long k; for (i=0;(i<10000)&&((k=0L)==0L);i++) { ... }
EL式でメソッドが実行できるようになったって? もうscriptletでよくね・・・?
700 :
デフォルトの名無しさん :2010/04/21(水) 12:05:08
>>697 > Plugin plugin = Class.forName("プラグインのクラス名").newInstance();
これはどこに書くつもりだ。
704 :
デフォルトの名無しさん :2010/04/21(水) 21:21:21
>>703 検証乙です
って事は使わない変数を大量に宣言するだけならマシンパフォーマンスには影響しないんだ?
もし本当なら、すげぇな
>>704 宣言だけのところにブレイクポイント設定できないだろ?そういうことだとおもうぜ。
オレ流プラグイン実装で META-INF/services/ とか使ってる人はいるのだろうか
文字列内に、改行コードでなく「\n\r」を入れたいのですが、なにか方法はないでしょうか。 strの内容が、 "aaaa bbbb"(途中で改行) ではなく "aaaa\n\rbbbbb" がはいった結果になるよう、 str="…………";を記述したいのです。
\\n\\rとか?
>>708 ありがとうございます! 目的の動作ができました。
>>707 String str = "aaaa\r\nbbbb";
System.out.println(str.replaceAll("\\r\\n", "\\\\r\\\\n"));
713 :
711 :2010/04/21(水) 22:31:21
rとn逆だったorz
714 :
デフォルトの名無しさん :2010/04/21(水) 22:36:35
715 :
714 :2010/04/21(水) 22:40:31
>>714 手元に3.2が無いから正確な回答はできないけど、たぶんそれでOK
…というか、おとなしく最新版使えば?
718 :
714 :2010/04/21(水) 22:49:40
3.2っつーかWTP入ってんのか?
>>718 よくわかんないけど、Pleiadesつかえばいいんじゃね?
正直、アナタのeclipseにどんなプラグインがはいっているのかわからないから、
なんともいえないんだわ。
マルチに答えてしまった俺がバカだった。。
ユーティリティのプロトタイプを書いてみたので、便所に落書(1/4) /** * jar ファイルにあるパッケージとクラスを列挙します。 */ public class JarAnalyzer { // 内部クラスはとっぱらってしまった (-> \\$) static Pattern pat = Pattern.compile("((?:[^/]*/)*)([^\\.\\$]*)(\\.[^\\.]*)"); Map<String,TreeSet<String>> pkgs = new TreeMap<String, TreeSet<String>>(); /** jarファイルを解析します。 * @param jarfile jar ファイル * @throws IOException */ public JarAnalyzer(File jarfile) throws IOException { if (!jarfile.exists()) { throw new FileNotFoundException(); }
便所に落書(2/4) // 内部解析 JarFile jar = new JarFile(jarfile); Enumeration<JarEntry> e = jar.entries(); while (e.hasMoreElements()) { JarEntry ent = e.nextElement(); // パスからパッケージとクラスを判断 Matcher mat = pat.matcher(ent.getName()); if (mat.matches() && ".class".equals(mat.group(3))) { // パッケージ名 String pkg = mat.group(1).replace("/", "."); pkg = pkg.substring(0, pkg.length()-1); if (! pkgs.containsKey(pkg)) { pkgs.put(pkg, new TreeSet<String>()); } // クラス名 String cls = mat.group(2); if (! "".equals(cls)) { pkgs.get(pkg).add(cls); } } } jar.close();
便所に落書(3/4) // 余分なエントリは除去 LinkedList<String> empties = new LinkedList<String>(); for (String name : pkgs.keySet()) { Set<String> ent = pkgs.get(name); if (ent.size()==0) { empties.add(name); } } for (String name : empties) { pkgs.remove(name); } }
便所に落書(4/4) /** パッケージ名の一覧を返します。 * @return パッケージ名の一覧 */ public Set<String> getPackageNames() { return Collections.unmodifiableSet(pkgs.keySet()); } /** クラス名の一覧を返します。 * @param packagename パッケージ名 * @return クラス名の一覧 */ public Set<String> getClassNames(String packagename) { if (! pkgs.containsKey(packagename)) { return Collections.unmodifiableSet(new TreeSet<String>()); } return Collections.unmodifiableSet(pkgs.get(packagename)); } }
おまけ public class Test { public static void main(String[] args) throws IOException { File f = new File("C:\\install\\commons-io-1.4-bin\\commons-io-1.4\\commons-io-1.4.jar"); JarAnalyzer ja = new JarAnalyzer(f); for (String p : ja.getPackageNames()) { System.out.println("[" + p + "]"); for (String c : ja.getClassNames(p)) { System.out.print("\t"); System.out.println(c); } } } }
http://ideone.com/2UYEs 便所の落書きにしては長いのでup
System.out.println時に標準出力&ファイルへ同時出力
printlnしたソースの行等を左側に出力
commons 特にlang CLI Collections Mathみたいな汎用ライブラリ?あれば教えてください
後知ってるのは Uncommons Math、google collectぐらい・・・
728 :
デフォルトの名無しさん :2010/04/22(木) 00:26:38
>>727 そういう細かいのってあるとしたらcommonsだろうなあ、と思いましたけどなさそうですね。
というか普通はlogging-apiとかlog4jみたいなのを使うと思うんですが。
>>729 まああくまでログというより実験コード用に便利かなと
標準出力=sysoutっていうのが頭の中にはいっちゃってるし、println(i) println(j)みたいなのをいちいちprintln("i="+i)って書かなくて済むような
みんカラの方のフィードは読めたから、多分記述が間違ってるんだな
733 :
デフォルトの名無しさん :2010/04/22(木) 09:21:46
import java.(ry で、いつも思うんですが 何で下記の様に指定する事が出来ないんでしょうか? import java.* とか import java.*.* java.以降は必ず1つは指定しなければならないって仕様なんですかね?
>>733 それ名前が衝突しまくるので逆に不便じゃね
>>733 Java の API マニュアルのクラス一覧とか上から見ると、
Annotation で早くも二つ連続して並んでないか?
>>727 Packageクラス使えば文字列に正規表現かける必要なかった気がする。
737 :
デフォルトの名無しさん :2010/04/22(木) 11:58:37
>>733 パッケージはディレクトリじゃないよ
ツリー状になってない
例えば
java.langパッケージと
java.lang.annotationパッケージは
親子関係になってない
738 :
733 :2010/04/22(木) 12:37:06
>>737 なるほど
ディレクトリ構造っぽい表記が出来るのにバッティングしてしまうんですね
一々importを書くのが面倒だけど、仕方ないのかぁ
少し前のレスに変数の宣言はメモリパフォーマンスに影響しないってのがあったけど
このimportも「*」で指定するより直で指定した方がパフォーマンスいいんですかね?
>>738 今はIDEが補完するからimportを面倒なんて思っている人はかなり少ないと思う。
Eclipse使ってるならCtrl+Sfhit+Oを押すだけだよ。
あとコンパイル時に参照するだけだからパフォーマンスには影響しないよ
740 :
デフォルトの名無しさん :2010/04/22(木) 17:46:00
>>739 >Eclipse使ってるならCtrl+Sfhit+Oを押すだけだよ
こんな便利機能があったとは…
マジでありがとうございました
>>687 です。
>>728 さん
プラグインの実装、ずばり!理解できました。
開発には時間が掛かるかも知れませんが、
納得行くものが出来たら公開する予定です!
本当にありがとうございました。
>>740 ちなみにimport staticは、
該当の部分を選択して、Ctrl+Sfhit+Mな。
743 :
デフォルトの名無しさん :2010/04/22(木) 22:40:19
ubuntu8.04でgcj4.2を使い始めました。 これで簡単なコンソールアプリをリンク(コンパイル)すると普通に 成功してリンクしたマシンでは実行できるのですが、 このアプリを他のJDKもgcjもインストールしていないマシンで実行 しようとすると、libgcj.so.80が見つかりませんというエラーが出て 動きません。libgcj.so.80を含めてリンクするにはどうしたらいいんでしょうか?
744 :
714 :2010/04/22(木) 22:45:54
>>719-720 >WTP
>Pleiades
なるほど、その辺です、きっと!
後は自分で調べます!
ありがとうございました!
これから半年ROMります!
HashMap<String, Object> map = new HashMap<String, Object>(); map.put("a", aClass); map.put("b", bClass); map.put("c", cClass); こんな感じで設定されているんですがこれからキーと値の対応を維持しつつ キーと値(入れたときのクラス(Objectクラスじゃない))を別に取り出したいんですがうまい方法ありませんか? ちなみに値のクラスはいろいろ入ってくるという想定です
すげぇな。何言ってんのか俺には理解できない。
>>746 for(Object obj: map.values){
@SuppressWarning("unchecked")
Class<?> clazz = (Class<?>)obj;
...
}
750 :
746 :2010/04/23(金) 00:56:04
すいません、ちょっと上のほう省略しすぎて勘違いさせてしまったような気がします AClass aClass = new AClass(); BClass bClass = new BClass(); CClass cClass = new CClass(); ・・・ HashMap<String, Object> map = new HashMap<String, Object>(); map.put("a", aClass); map.put("b", bClass); map.put("c", cClass); aClass,bClass,cClassはそれぞれ別クラスのインスタンスです。 なので >Class<?> clazz = (Class<?>)obj; ここでうまく元のクラスに合うようにしたいのです こういうかき方はできないんですがやりたいこととしては aClass.getClass() clazza = (aClass.getClass())obj bClass.getClass() clazzb = (bClass.getClass())obj こんな感じで動的にクラスを変更して取り出したい
751 :
デフォルトの名無しさん :2010/04/23(金) 01:14:03
Class.forName
752 :
デフォルトの名無しさん :2010/04/23(金) 01:16:12
Class clazz = Class.forName(className); MyClass myInstance = (MyClass)clazz.newInstance();
instanceOf
754 :
デフォルトの名無しさん :2010/04/23(金) 02:43:58
>>750 aClass.getClass() clazza = (aClass.getClass())obj
bClass.getClass() clazzb = (bClass.getClass())obj
をやったあとに何がやりたいの?
clazzaとclazzbが無関係だとメソッドも呼べないし
意味ないんじゃない?
そうしなきゃならない必然性がわからん
>Class<?> clazz = (Class<?>)obj; これで良いんじゃないの
質問者は初心者系で こういうプログラムは必ずこういう風にしなければならないと勘違いしているタイプとか?
757 :
デフォルトの名無しさん :2010/04/23(金) 03:29:31
MapやらListにまったく違う型のオブジェクトを入れたいと思ったことがないな せめてインタフェースを作る気がする
DI
>>757 SwingQueueがイベントをクラスで持ってなかったっけ?
どっちにしろインターフェイス実装されてるんだが。
760 :
744 :2010/04/23(金) 13:25:24
>>745 重ね重ねありがとうございました
キーはやっぱりWTPでした
ではまた半年後に
761 :
デフォルトの名無しさん :2010/04/23(金) 14:52:42
StringクラスのcharAtメゾットを用いて、キーボードから入力した文字列の3文字目を表示する。 Stringクラスのreplacメゾットを用いて、キーボードから入力した文字列のaをすべてbに置き換える。 この2つのプログラムを知りたいんだが・・・
そうですか
ドイツの人はメゾットって発音するらしいね
そうですか
EclipseでJSF2の勉強したいんですが、日本語で有用なサイトありますか? JSF1+Faceletsなサイトはいくつか見かけたのですが、JSFの予備知識無しに 1からJSF2のやろうとするとどこから手をつけたらいいのか和からなくて。 jsf-2.0.jarとかをおいてWebContents配下にhtmlファイルを置いたら、 ブラウザでそのhtmlにアクセスするとテンプレートとして機能するのでしょうか? サンプルサイトみてもブラウザのURL欄になに入れたらいいか書いてないし
物理演算用のプログラムを作るためにjavaを勉強しようと思ったので、少し質問させてください。 プログラム自体は一応やったことがありますが、オブジェクト指向というのはよくわかりません。 また物理演算の結果表示のために、グラフィカルな表示が必要になります。 そのため、オブジェクト指向とグラフィックスの2つを勉強できるサイトや本があれば教えてください。 それぞれ別サイトで構いませんのでよろしくお願いします。
>>766 ちょっと待っててください
支配下の回答者を呼んできて答えさせますから
次レスで答えるはずです
class Base { void hoge() { System.out.println("Base"); } } class Derived extends Base { void hoge() { System.out.println("Derived"); } } class Derived2 extends Derived { void hoge() {    super.hoge(); // Derived::hoge(); System.out.println("Derived2"); } } このプログラムで,Derived2 の hoge から super.hoge() とすることで Derived の hoge() を呼び出すことができたのですが,Base の hoge を呼び出すにはどうすればよいでしょうか? 試しに super.super.hoge() としてみましたがダメでした.
出来ないと思ったが
ホゲ!ホゲ!
出来ます
自社で作成したパッケージの名前は、勝手に決定して社外に公開していいのでしょうか? それともパッケージ名を管理する団体に登録申請などをする必要があるのでしょうか?
>>771 え?そうなの?
漏れもできないと思ってたけどどうやるの?
766も回答お願いします。。。 支配下の回答者さんはまだでしょうか?
777 :
デフォルトの名無しさん :2010/04/23(金) 23:41:58
org(anization)から始めるのはいいけど jpから始めるのは変 日本政府製である場合以外はね
Base.class.getDeclaredMethod("hoge").invoke(this); で出来ないかなーと思ったが、 「基本となるメソッドがインスタンスメソッドの場合、動的メソッドルックアップを使用して呼び出しが行われ、ターゲットオブジェクトの実行時の型に基づいてオーバーライドが実行されます (『Java 言語仕様、第 2 版』のセクション 15.12.4.4 を参照)。」 でオーバーライドされてもうた。
779 :
デフォルトの名無しさん :2010/04/23(金) 23:42:51
orz
781 :
デフォルトの名無しさん :2010/04/23(金) 23:51:28
>>777 だな
jpパッケージのクラスを日本中で共同使用するわけじゃないんだし
jp.co.can○nとかjp.co.s○nyとか恥ずかしいぞ
orzから始めてるぜ
趣味でやってる素人の一般人もパッケージ名って気にしたほうがいいの?
個人もドメイン名を使うことが推奨されてる
>>781 共同使用ってなんだ?
パッケージはツリー構造じゃないからjpを日本中で共有することにはならんよ。
一部上場のjpTLD企業にいくつか入ったことがありますが、
jp始まりの内作ソフトウェアは結構作られていますよ。
yui.rei.ritsu.tsumugi
787 :
デフォルトの名無しさん :2010/04/24(土) 00:28:10
>>785 >jp始まりの内作ソフトウェアは結構作られていますよ。
知ってるよ
アホなとこばっかりだwww
Hな名前のパッケージ作って発表しても良いですか?
ok
package名が被らないようにするためにFQDNを逆に並べたものが推奨されている。 jpで始まるのがかっこ悪いとか言ってるのはただの無知。 自分トコのドメインがexample.jpならjp.example.project...とするべき
ネタで言ってるんじゃねーの? 本気だとしたら唯の馬鹿だから無視しといたほうがいい
System.out.println("そんなYaZuYaで働きたい!!");
jspを練習したいのですが、お勧めの統合開発環境ってありますか? おそらくホームページビルダーは対応していないと思うし、 ECLIPSEとかが無難でしょうか? (慣れた人だとテキストエディタで十分だと思いますが、 初心者なんでデバッグ機能が付いているほうがいいので)
PHPもjavaもサーバー側で処理を行うのですが、 特に処理に関してなにが違うのでしょうか?
E.classのとこでエラーする、解決方法無いでしょうか。 Objectにしてキャストするしか無いですか? class Punko<E> { void punkoMethod ( Object owner , String func , E Param ) { try { owner.getClass().getMethod( func , E.class ) ; } catch ( Exception e ){} } }
797 :
デフォルトの名無しさん :2010/04/24(土) 08:55:37
jspってスコープを4つほど覚えたら それで事が済むんじゃないの? 1時間本を読ん だらしまいだろ。 カスタムタグとか、いじくりまわしても そんなの使う場なんてあるの??
798 :
デフォルトの名無しさん :2010/04/24(土) 09:16:01
ネタで言ってるんじゃねーの? 本気で全板の2getだけ表示するソフト組むとか言ってるから 無視しといたほうがいい。
>>794 シェアが大差付けられているという点に目をつぶるなら、ビジュアルでGUI開発
できるNetBeansを試してみるのも悪くないかと思う。
Sun提供の公式な開発環境でもあるし。
>>796 なにがしたいのかわからんが
param.getClass()にすれば?
独習Java サーバサイド編で勉強しようとしてる者なんですが、 サーバサイドJavaと言った場合、JavaEEのことだと書いてあるのに、 環境設定する際にJavaSEを落とすよう言われEEは落とさないみたいなんですが EEがなくてもJSPやサーブレットの勉強って出来るものなんでしょうか?
Dark-side Java
個人なら.nameか.infoでいいんじゃないの?
805 :
デフォルトの名無しさん :2010/04/24(土) 14:05:21
「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 ↑これは何が原因だ?
806 :
デフォルトの名無しさん :2010/04/24(土) 14:07:28
新規にテキストファイルからjavaプログラムを作って上書き保存してもjavaプログラムに 変換しないのは何が原因だ? お前ら教えろ! 脳みそが有ったらな。
807 :
デフォルトの名無しさん :2010/04/24(土) 14:11:54
>>799 Netビーンを試したいのですが、Oracleのページからダウンロードできるものでもいいでしょうか?
808 :
デフォルトの名無しさん :2010/04/24(土) 14:13:23
>>807 , 794
SunがOracleに買収されたのでそれ。
初心者ならネットに日本語情報がいっぱい転がってるEclipse、
日本語化&Web開発etcのプラグインが入ったPleiadesのAll-in-one Eclipseって
やつがおすすめ。NetBeansも今のは大分よさそうだけどね。
慣れた人ほどテキストエディタでやる人はいない(細かい修正を除いて)。
IDEの機能を使えばいろいろ楽ができるから。
>>795 Javaはコンパイル後Java VMという仮想マシン内で実行される。
PHPはインタープリターというやつが呼び出しの度に逐次コンパイルして
実行される。だからメモリにキャッシュしてとかDBコネクションプール利用とか
のJavaで当たり前の技術もPHPでは別途サーバーを立てないと無理、
とかいろいろ違う。
>>797 普通はjspスクリプトレットを書かない(jspファイルにはコードを一切書かない)ので
カスタムタグがないと死ねる。jspファイルからDBに接続するようなPHPみたいな
サンプルを鵜呑みにしないこと
>>802 J2SEでいい。servlet APIはJ2EEの一部だけどtomcatとかに入ってるからそれで。
>>809 All-in-one Eclipseはイマイチだぞ
EEじゃない
814 :
813 :2010/04/24(土) 22:30:04
よく分からないけど、EJBとかいうのが使えないしイマイチ
windows 7 の64bitなんですが、 jdkは32bit用と64bit用どちらがいいのでしょうか? (32bit用ならProgram Files(x86)、64bit用ならProgram Filesにインストールですよね?) あと、Tomcatをインストーラからインストールしようとすると、 64bit用のフォルダにインストールになるみたいなんですが、 jdkとTomcatは同じに揃えなければならないのでしょうか? (jdkは32bit、Tomcatは64bitとかはマズいでしょうか?)
816 :
デフォルトの名無しさん :2010/04/24(土) 23:13:04
・・・ どおもおかしいぞ。
>>813 ん?JSPの練習にEJB関係ないでしょ。
あとまさかとは思うけど、PleiadesのAll-in-oneをAll-In-One ProjectのEclipseと勘違いしていない?
EJBは糞
>>817 勘違いしてた、PleiadesのAll-in-oneのはEEなんだ
Pleiades重いけどな
もう使われるも局面あまりないだろう。
使わなくてもEclipse自体は対応してた方が良いだろ
824 :
デフォルトの名無しさん :2010/04/25(日) 02:51:49
Tomcat起動後にstart serviceさせても 途中で消えてスタートしません。 start serviceが押せてstop serviceは押せない状態。 原因が分かる方いますか?
$TOMCAT_HOME/logs/catalina_log を見ろ。 8080ポート使ってるとかじゃないのか。
826 :
デフォルトの名無しさん :2010/04/25(日) 03:00:33
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path not foundってなってるからこれが原因かなぁ・・・。
それは無視していい。
あと、monitor tomcat自体の起動には成功するけど、 start serviceしないんですがそれでも8080の問題ってことはありますか?
その問題はよくある OSが64bitだったりVistaや7だとありがち
830 :
デフォルトの名無しさん :2010/04/25(日) 03:15:14
両方当てはまります。 どうすればいいんでしょうか?
32bit版を使う
32-bit/64-bit Windows Service Installer インストーラは32か64かを選択する機会を与えてくれませんでした。 どうすれば32の方でインストールできますか?
ここは問診の場じゃねぇんだ。情報を小出しにするならどこか別のチャットでやれ。
古いインストーラを使う 探してなければ本についてる奴とかを使う
うちはWindows7(64bit)でApache(32bit)を起動してる 2010/04/25 3:26:39 org.apache.catalina.core.AprLifecycleListener init 情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32; C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\; C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\; C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Java\jdk1.6.0_17\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin; C:\Program Files (x86)\Apache Software Foundation\apache-ant-1.7.1\bin;C:\Program Files (x86)\QuickTime\QTSystem\; 2010/04/25 3:26:39 org.apache.coyote.http11.Http11Protocol init 情報: Coyote HTTP/1.1を http-8080 で初期化します 2010/04/25 3:26:39 org.apache.catalina.startup.Catalina load 情報: Initialization processed in 1491 ms 2010/04/25 3:26:39 org.apache.catalina.core.StandardService start 情報: サービス Catalina を起動します 2010/04/25 3:26:39 org.apache.catalina.core.StandardEngine start 情報: Starting Servlet Engine: Apache Tomcat/6.0.20 2010/04/25 3:26:47 org.apache.coyote.http11.Http11Protocol start 情報: Coyote HTTP/1.1を http-8080 で起動します 2010/04/25 3:26:47 org.apache.jk.common.ChannelSocket init 情報: JK: ajp13 listening on /0.0.0.0:8009 2010/04/25 3:26:47 org.apache.jk.server.JkMain start 情報: Jk running ID=0 time=0/54 config=null 2010/04/25 3:26:47 org.apache.catalina.startup.Catalina start 情報: Server startup in 8402 ms
836 :
デフォルトの名無しさん :2010/04/25(日) 03:43:52
質問です 致命的: ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION ********** Looks like the Spring listener was not configured for your web app! Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext. You might need to add the following to web.xml: <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 検索してみると、このエラーが出たときはSpringプラグインを外せばいいようなことは分かったんですが 具体的にSpringプラグインって「どこにあって」「どう外せば」いいんですか? Eclipse3.5のヘルプの新規ソフトウェアのインストール…というところに 「すでにインストールされている のは?」というリンクがあって そこに入っているプラグインが全部表示されるんですけど 「スプリング」や「Spring」という名前のプラグインは見当たりません
>>836 私には分かりません。
まず、最初のエラーメッセージはどこで出力されましたのか分かりません。
メッセージの内容から、Servlet(のSpringライブラリ)起動時のエラーメッセージであり、
Eclipse(のSpringプラグイン)のエラーとは無関係ではないかと思っています。
次に、「(Eclipseの)Springプラグインを外せばいいようなことは分かった」経緯が分かりません。
検索した際のキーワードや、原因が「Springプラグイン」だと判断できたURLは明記して欲しいです。
あと、開発環境(ディストリビューションや追加したプラグイン)、
実行環境(APサーバ名、Java/Servletのバージョン)
ソースコードで使用しているライブラリや
Springライブラリ・プラグインを使用した経緯などを具体的に記述すれば、
誰かが答えてくれるかもしれません。
仮想環境のUbuntuでやればいいのに
なんでtomcat系はバカが多いの?
一時期やたらtomcatの入門本出てたからじゃない?
tomcat自身そもそも初心者向きだろ
public static void main(String[] args) throws IOException { File f = new File("C:\\usr\\Java\\commons-io-1.4.jar"); if (!f.exists()) { throw new FileNotFoundException(f.getCanonicalPath()); } else { System.out.println(f.getCanonicalPath()); } // URL url = new URL("file://" + f.getCanonicalPath()); URL url = new URL("jar:file://" + f.getCanonicalPath() + "!/"); URLClassLoader lo = URLClassLoader.newInstance(new URL[] { url }); String classname = "org.apache.commons.io.CopyUtils"; try { System.out.print(classname); Class<?> c = lo.loadClass(classname); System.out.println(" is found"); } catch (ClassNotFoundException e) { System.out.println(" is not found"); e.printStackTrace(System.out); } } の結果が C:\usr\Java\commons-io-1.4.jar org.apache.commons.io.CopyUtils is not found java.lang.ClassNotFoundException: org.apache.commons.io.CopyUtils 以下省略 になってしまうのですが、どこを間違えているのかわかりません。教えてください。 Jarを解凍して確認してみましたが、 2008/01/17 03:14 2,933 CopyUtils.class と存在しています。
>>812 一つめのサイトはデザイン的に「Oracleのサイト」という言い方をされても仕方ないと思うが。
>>813 J2EEとSEの違いとEJBの関連がわかってたらそんな発言は出てこないと思うのだが
EJB使いたきゃJBoss Seam使えば?EJB3.1はいいらしいよ。
もっと軽くもっと簡単にやったほうがいいと思うけど
¥¥を/に変換しなきゃいけなくなくないじゃないの?
>>845 URL url = new URL("jar:file://" + f.getCanonicalPath().replace('\\','/') + "!/");
System.out.println(url.toString());
としてやってみた。
C:\usr\Java\commons-io-1.4.jar
jar:file://C:/usr/Java/commons-io-1.4.jar!/
org.apache.commons.io.CopyUtils is not found
java.lang.ClassNotFoundException: org.apache.commons.io.CopyUtils
と変わらず。
URL url = new URL("file://" + f.getCanonicalPath().replace('\\','/'));
// URL url = new URL("jar:file://" + f.getCanonicalPath().replace('\\','/') + "!/");
とfile:形式でも試してみる。
C:\usr\Java\commons-io-1.4.jar
file://C:/usr/Java/commons-io-1.4.jar
org.apache.commons.io.CopyUtils is not found
java.lang.ClassNotFoundException: org.apache.commons.io.CopyUtils
と変わらず。
f.toURL()
Cから入るとjavaの文字列操作のうんこにきづかされるよね
>>847 あっ
C:\usr\Java\commons-io-1.4.jar
file:/C:/usr/Java/commons-io-1.4.jar
org/apache/commons/io/CopyUtils.class
jar:file:/C:/usr/Java/commons-io-1.4.jar!/org/apache/commons/io/CopyUtils.class
org.apache.commons.io.CopyUtils is found
ということは file: の後ろの / は一個!?
URL url = new URL("file:/" + f.getCanonicalPath().replace('\\','/'));
で試してみると。
C:\usr\Java\commons-io-1.4.jar
file:/C:/usr/Java/commons-io-1.4.jar
org/apache/commons/io/CopyUtils.class
jar:file:/C:/usr/Java/commons-io-1.4.jar!/org/apache/commons/io/CopyUtils.class
org.apache.commons.io.CopyUtils is found
と通りました。
850 :
836 :2010/04/25(日) 18:47:30
>>837 情報が足りなくてすみませんでした
>最初のエラーメッセージはどこで
Tomcat起動時のエラーメッセージです
>「(Eclipseの)Springプラグインを外せばいいようなことは分かった」経緯
http://old.nabble.com/Spring-Error-without-Spring-td21418471.html >If the Spring plugin is on the classpath, S2 will attempt to use it.
和訳)クラスパス上にSpringのプラグインがあれば、Struts2はそれを使おうとする
>when i copied the jars from the new distribution download i copied some
plug-ins that caused these errors. the plugins are removed and
everything is fine now.
和訳)私は新しいディストリのjarからコピーするときに
幾つかのプラグインをコピーしてしまって、それがエラーを起こしていたようだ
それらのプラグインは外されたので今はすべて正常に機能している
OS: WindowsVista
環境: Eclipse3.5 + Pleidas
追加したプラグイン:
ライブラリ: struts-2.0.14-lib.zipのうち、
freemarker-2.3.8.jar commons-logging-1.0.4.jar struts2-core-2.0.14.jar xwork-2.0.7.jar ognl-2.6.11.jar の5つ
apache2.2 & apache-tomcat-6.0.26
Springライブラリ・プラグインの設定については
現在読んでいる本の付いているCD-ROMのwarファイルに含まれているようでして
自分で意図的に設定したわけではありません
追記ですが、エラーを辿るとxwork-2.0.7.jarの中に
public class SpringObjectFactory extends ObjectFactory
というのがあって、そこからエラーが発生しているように見えます
↓にエラーの内容を貼っておきます 必要であれば補足します
851 :
836 :2010/04/25(日) 18:52:24
2010/04/25 18:36:29 org.apache.coyote.http11.Http11Protocol init 情報: Coyote HTTP/1.1を http-8080 で初期化します 2010/04/25 18:36:29 org.apache.catalina.startup.Catalina load 情報: Initialization processed in 897 ms 2010/04/25 18:36:30 org.apache.catalina.core.StandardService start 情報: サービス Catalina を起動します 2010/04/25 18:36:30 org.apache.catalina.core.StandardEngine start 情報: Starting Servlet Engine: Apache Tomcat/6.0.26 2010/04/25 18:36:31 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register 情報: Parsing configuration file [struts-default.xml] 2010/04/25 18:36:31 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register 情報: Parsing configuration file [struts-plugin.xml] 2010/04/25 18:36:31 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register 情報: Parsing configuration file [struts.xml] 2010/04/25 18:36:31 org.apache.struts2.config.Settings getLocale 警告: Settings: Could not parse struts.locale setting, substituting default VM locale 2010/04/25 18:36:31 org.apache.struts2.spring.StrutsSpringObjectFactory <init> 情報: Initializing Struts-Spring integration... 2010/04/25 18:36:31 org.apache.struts2.spring.StrutsSpringObjectFactory <init> 致命的: ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION ********** Looks like the Spring listener was not configured for your web app! Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext. You might need to add the following to web.xml: <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 2010/04/25 18:36:31 org.apache.catalina.core.StandardContext filterStart 致命的: フィルタ struts の起動中の例外です
852 :
836 :2010/04/25(日) 18:56:28
java.lang.NullPointerException at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:189) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType(XmlConfigurationProvider.java:479) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes(XmlConfigurationProvider.java:450) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:407) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:239) at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111) at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:152) at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52) at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395) at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452) at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:205) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
853 :
836 :2010/04/25(日) 19:12:01
xworkを古いヴァージョンにして自己解決しました
>>844 それだと、EclipseのViewにJava EEがないじゃん
857 :
856 :2010/04/25(日) 21:11:25
すまん、パースペクティブだった
型パラメータのクラスオブジェクトを取得するトリックは存在しないでしょうか?
具体的には、任意の型が、型パラメータとした型のサブクラスかどうかを総称
クラスの中でフィルタリングしたいという用途です。
フィルタしたクラスオブジェクトをコレクションとして取り出すため総称型を
使いたいと考えています。しかし、型パラメータのクラスを特定出来ないので
フィルタできないでいます。
http://www.ibm.com/developerworks/jp/java/library/j-djc03113/ は、型パラメータは消去されて上位の型として扱われてしまう(超訳)という
解釈ですが、だとすると、実行時に別途クラスオブジェクトを渡してやらないと、
駄目ということでしょうか。
class xxxx<T>
とクラス定義して
Class<? extends T> t = (Class<? extends T>)c;
とやっても型消去のせいか、確かに ClassCastException は起こりませんでした。
今は総称型は使わないでコンストラクタに Class<?> superc とクラスを渡して、
Class<?> t = c.asSubclass(superc);
を実行して ClassCastException が起こるかどうかでフィルタしています。
面倒だから貼る
http://ideone.com/k8YV0 http://ideone.com/D8tJF というユーティリティ作って
package myPlugin;
public interface myPlugin {
public String getString();
}
というインタフェースで
import myPlugin.myPlugin;
public class Plugin implements myPlugin {
public String getString() {
return "called Plugin#getString()";
}
}
と
package plug;
import myPlugin.myPlugin;
public class Plugin implements myPlugin {
public String getString() {
return "called plug.Plugin#getString() in myPluginSample2";
}
}
というプラグイン作って
public class test {
public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException {
view("../myPluginSample/myPluginSample.jar");
System.gc();
view("../myPluginSample2/myPluginSample2.jar");
}
static void view(String path) throws IOException, InstantiationException, IllegalAccessException {
PluginLoader pl = new PluginLoader(new File(path), myPlugin.class);
for (Class<?> c : pl.getPlugins().values()) {
myPlugin p = (myPlugin)c.newInstance();
System.out.println(p.getString());
}
}
}
と動かしてる。
この
http://ideone.com/D8tJF がなんとかならないかなーと。
861 :
デフォルトの名無しさん :2010/04/25(日) 22:12:29
863 :
861 :2010/04/25(日) 22:32:53
>>862 回答ありがとうございます。
そのセクションには、Ant関連の記述が見当たらないように思えるのですが、
そのJavaコードをコンパイルするAnt設定は自分で整える必要がある、ということですか?
サンプルのxmlから依存関係等を解析して…
かなり不親切な気もするのですが、そんなものなんですかね?
SDKだからね、そんなもん。 慣れればAntなんかは楽勝だし、どの環境でも動作するシェルだと考えると、 かなり優秀で親切だと思うな。 コンパイル/実行の完全な手順が書かれているわけだから。
>>858 メソッドの引数として型パラメータのクラスオブジェクトをもらう手がある。
もし、単に型パラメータのフィルタリングだけがしたいなら、extends句を使用して、
特定のクラス・インターフェースを継承したものしか、コンパイルできなくする手もある。
以下、サンプル
public class GenericTest {
public String getMessage(){
return "foo";
}
public static <T extends GenericTest> T getInstance(Class<T> clazz){
T result = null;
try {
result = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace(System.err);
}
return result;
}
public static void main(String[] args) {
GenericTest test = GenericTest.getInstance(GenericTest.class);
if(test!=null){
System.out.println(test.getMessage());
}
//GenericTestを継承していないクラスはGenericTest.getInstanceメソッドは使用できない
//Object test2 = GenericTest.getInstance(Object.class);
}
}
866 :
861 :2010/04/25(日) 23:48:16
>>864 ありがとうございます。
なるほど、Antに関してはサンプルのxmlだけで必要十分というわけですね。
まあそういうことであれば、楽をするのは諦めて自力でやってみたいと思います。
log4j使ってる人?
凄い初心者なんですが質問させてください。 2DのCGを描画したいんですが、どんなAPIを使えば良いのかわからないので教えていただけませんか?
嫌だ
てめぇに聞いてねぇよでしゃばんなボケ
871 :
デフォルトの名無しさん :2010/04/26(月) 01:22:38
>>868 WebはJavaで
ゲームはC++で作るのが
プログラマーの常識。
875 :
796 :2010/04/26(月) 09:56:22
>801 やりたい事は、 テンプレートで指定した型"E"をパラメータにリフレクションでメソッドコールしたいって事なんですけど。 owner.getClass().getMethod( func , E.class ) ;
878 :
796 :2010/04/26(月) 13:21:22
>801 >876 失礼しました! 出来ましたコンパイル通りました。 ありがとう御座いました。
新規案件でWebアプリやるならフレームワークなに使いますか? Struts1/2/JSF2/JBoss Seamあたりで悩んでいるのですが。 業務経験はStruts1が5年、2が1年半くらいで他はありません。TeedaでJSFをちょこっとやったけど。 Struts2を使うつもりだったのですが日本ではあまり流行ってない(=他の人に引き継ぎにくい)し、 どれも一長一短でどうしたもんかなと思っているのですが。
880 :
868 :2010/04/26(月) 20:32:08
みなさんレスどうもです。
>>871 javaが手っ取り早いかと思いまして。
>>872 これ凄いですね、やってみます。
>>873 どこに、とはどういう意味でしょうか?
僕がイメージしているのは、xy座標系で、(x,y)にこの色で点を描く、みたいな感じです。
>>879 SAStruts(seasar2)一択
882 :
デフォルトの名無しさん :2010/04/26(月) 21:01:38
Strutsは糞
Wicket
ありがとうございます。見事にバラバラですね。 どれも調べると便利そうなのですが実際やってみるといろいろトライ&エラーが必要だし、 1,2個のプロジェクトで使って慣れた頃にはもっと便利そうなのがでて再勉強っていう サイクルはもうやめたいんですよね。 ECS,Torque,struts-tiles,James... apache系だけでももう二度とやらないだろうなという プロジェクトがこんもり。Wicketも便利そうだけどコンポーネント指向でデファクトスタンダードが できてから移ろうかなと。JSF2がそれになるんじゃないかと思って候補に入れたんですが、 JSF1+Faceletsのサンプルは散見するけどJSF2で開発を始めるとっかかりがよくわからないし。
2chで3行でまとめる技術がないやつがプログラムなんてやんなよ
・・・は?
JDK1.6update19からjavaプラグインのセキュリティが変更になって、 署名付きのjarがapache-commons系の署名なしjarを読み込むとセリュリティエラーで実行できません。 ダイアログを無視すれば起動できますが、危険なコードです的な事を言われるので、 ユーザに無視させることを強要できません。 コントロールパネル→java でjavaコントロールパネルを開き 詳細タブ→セキュリティ→混合コード→検証を無効にする でダイアログを出さないことはできますが、 全てのアプレットが対象になり、そんな危険なことも強要できません。 log4jをアプレットで使用しているんですが、これにjp.co…の自社のキーで署名しても、 どうやら署名なしのjarとして扱われてしまいます。 サードパーティのjarをアプレットで使用する場合は、この警告からは逃れられないのでしょうか?
>>879 おれも
>>881 に一票
フレームワークを使うなら、何を楽にしたいのかが重要なんだが、
そこら辺は考えてないの?
デザイン重視で、デザイナ入れるつもりなら
WicketにSpringとかSeasar2とか組み合わせるのもありかと。
>>889 キャッシュされたJarファイルを見に行っているのでは?
ブラウザのキャッシュとJavaの一時ファイルを両方とも削除してみてはどうでしょうか。
Javaの一時ファイルは、Javaコントロールパネルから削除できます。
>>891 いえ、キャッシュは削除しています。
実際にlog4j.jarも読み込んでるので。
翻訳プリーズ
PreparedStatementのexecuteBatchとはどういった使い方をするものなのでしょうか?
確認したわけじゃないが、Statementと同じでaddBatch繰り返した後に一括実行 させる用途ではないか?
複数の SQL (つうか DDL) を execute() でまとめて実行するためのもの。 RDBMS によっては毎回発行されるよりまとめて渡してもらった方が効率の良い 動きをするものもある。
Digital Devil Language
batchはDDLに特化してるわけじゃないからSQLでいいんじゃね?
どちらかといえば大量のINSERT/UPDATE文突っ込んで実行するほうが 多いんじゃね?
>>892 結局logj4のjarもorg.apache…のキーで署名しないとだめだよ。
署名されているjarをネットで探してみては?
assert(value == null): value.getClass().getSimpleName(); の value.getClass()... の所で「valueは潜在的にnullの可能性があります」と Eclipse 様からご指摘頂いたんだが、そんな可能性はないよな?
>>904 assert後のコードから察するに、
本当はassert(value!=null)が正しいのでは?
value == null はあくまで表面上のnullを検知しているだけだ valueの真の潜在nullはそんなチンケなものじゃ検知できるはずがない
>>905 インスタンス内で管理している Map に想定外のオブジェクトが入ってたケース
(ただし null はあり得る) を引っかけるアサーションだから assert(value==null)
で正しいです。
nullでなく初期化されていない可能性って事かな?
洗剤はヌルヌルしているもんだ
プログラミング初心者です!どうぞよろしくお願いします。 public static void main(String args[]) { int dt[] = {100, 200, 300}; int n = 0; System.out.println(dt[n++]); System.out.println(dt[n++]); System.out.println(dt[n++]); } を実行した結果、dt[0]〜dt[2]が表示されるのは何故でしょうか? 最初のdt[n++]でnの値は1にならないのですか?
911 :
910 :2010/04/28(水) 06:00:44
自己解決致しました…。すみません。 こういう場合でも後加算されているのですね。
int n = 0; n = ++n * n++ + ++n * n++; System.out.println(n); // 10 わかるかなー?
913 :
910 :2010/04/28(水) 07:05:14
>>912 何という難問!私のルールで解いてみますw
最初の++nで1
次の++nでn=2
最初の(++n * n++)で後加算を後回しにして2*2=4
最初の(++n * n++)の後加算を加え5となる。1ブロック目は5
2ブロック目も同じで5
合わせて10!
違いますね絶対。よかったら教えて頂けますか?
public enum A{ X(1), Y(2), Z(3), ; private static final Logger logger = Logger.getLogger("A"); private A(int a){ logger.fine("a=" + a); } } logger の初期化より先にコンストラクタが実行されるから NullPointerException が発生するんだよなぁ。何かいい方法はあるかいボブ?
int n = 0; n = n + 1; int l = n * n; n = n + 1; n = n + 1; int r = n * n; n = n + 1; n = l + r;
オブジェクトの参照が保持されている変数には全てnullを入れて、 gc時の負荷を軽くしようとしてる。 って努力は報われているでしょうか? 当方Androidでアプリ開発しています。
>>916 nullをセットしているのがメソッド内のローカル変数なら、殆ど意味がない。
どうせメソッド抜ければ、nullセットの有無にかかわらず、
参照の有無に応じてGCの対象になるんだから。
インスタンス変数なら、オブジェクトの寿命による、としか言えない。
長寿命のオブジェクトが不要な参照を持つのなら、さっさと参照を削除して
軽くした方がいい、というのはあるかな。
注意点として、Androidの中のDalvikVMは実装が違うので、
SunのJavaVMのつもりで考えていると間違った最適化を考えてしまうかも。
例えばJITコンパイルがないとかね。GC方式も違うかも。
今までの経験を元に「こうすれば軽くなるはず」と考えて事前に最適化するよりも、
ある程度動くようになってからプロファイリングして、事実を元にして
「ここが重いからこう直そう」と後で最適化を施した方がいいと思う。
SDKには、折角プロファイリング用のツールが付いてきてるんだから、
これを使わない手はない。
918 :
ボブ :2010/04/28(水) 16:15:53
>>914 ありえない。
スタックトレース貼ってみ
すまんenumか。吊ってくる。
xy座標の点が複数あって その間の距離を計算して格納したいのですが 仮に点が100個あった場合、配列でdistance[100][100]とすると 点a-点bの距離は、もちろん点b-点aの距離と同じですし 半分近くの領域が無駄になってしまいますよね? 無駄のないようにそれぞれの点の間の距離を記録するにはどうすれば良いでしょうか?
>>919 まず、どうやってるのか分からんから答えられる訳があるまい。
テキストファイルなら
BufferedReader in = new BufferedReader(
new FileReader(new File(testfile))
);
while ((line = in.readLine())!=null) {
System.out.println(line);
}
in.close();
で各行が読めるし、標準入力なら
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in)
);
while ((line = in.readLine())!=null) {
System.out.println(line);
}
>>922 点がpoint[]に入っているとして
step0: point[0] から point[1]〜[99] までの距離をそれぞれ求める。
step1: point[1] から point[2]〜[99] までの距離をそれぞれ求める。
・・・
stepN: point[N] から point[N+1]〜[99] までの距離をそれぞれ求める。
・・・
最後に point[98] から [99] までの距離を求める。
とすればいい。
925 :
922 :2010/04/28(水) 20:58:43
>>923-924 すいません、言葉足らずでした
点の情報は、すべてプログラム上でPoint2Dの配列に格納しています
同じように点と点との距離を求めて、配列なりリストなりに記録したいのです
計算自体は
for(int i=0; i<point.length()-1; i++){
for(int j=i; j<point.length(); j++){
point[i].distance( point[j] );
}
}
というように書けば計算できるのですが
いざこれを記録するとなると
例えば配列だと
[4][3][3][2][7]
[ ][4][5][6][7]
[ ][ ][5][6][7]
[ ][ ][ ][1][3]
[ ][ ][ ][ ][7]
という風に、半分近くの領域が無駄になってしまうのが気になるのです
かといってリストだと、後から参照する時に順番が難しく扱いづらいように感じます
うまく点と点との距離を記録する方法はないでしょうか?
言葉足らずってレベルじゃねーぞ
java classファイルをコマンドプロンプトから実行しようとしたら、 Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object と出ました。コンパイルは出来たみたいなのですがどういうことでしょうか?
クラスパスはパソコンを買ったときからいじってなくて、 .;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip となっているのですがこれが問題あるのでしょうか?
930 :
デフォルトの名無しさん :2010/04/28(水) 21:58:04
staticなメソッドやフィールドを同じクラス内のstaticなメソッドから使用するとき クラス名つけて使用したほうがいいの?そのまま使用したほうがいいの? ↓こういうの class ClassA { private static int var1 = 0; public static void Hoge() { var1++; //←ここって ClassA.var1++; にしたほうがいいの? } public static void Hoge2() { Hoge(); //←ここって ClassA.Hoge(); にしたほうがいいの? } }
好きにしろ
入門書に書いてあるようなことを訊く奴はバカ
934 :
919 :2010/04/28(水) 22:22:23
>>923 ありがとうございます。解決しました
言葉足らず申し訳ありませんでした
今回は標準入力からということでした
とにかくありがとうございました
>>925 一応、
double[][] point = new double[100][] ;
for (int i = 0 ; i < 100 ; i++) {
point[i] = new double[i] ;
}
という感じで、各行の列数の異なる2次元配列を作ることは可能だぞ。
入門書にはPathの設定は載ってるんですが、 class pathを設定する話は見当たらないのですが、 class pathはどこをしていすればいいんですか?
色々検索してみたら どうやらQuickTimeをインストールすると classpathが狂うということが分かりました。 身に覚えがあるので解決策も検索してみます。 お騒がせしました。
938 :
922 :2010/04/28(水) 22:49:18
>>935 それは盲点でした!
その方向でいってみようと思います
ありがとうございます!
C言語の system() みたいに
簡単にプロセスを起動できるようなクラスを以前作ったのだけど
http://ideone.com/XVeT7 ↓ソースコードのダウンロードはここから
http://ideone.com/plain/XVeT7 たとえば
EasyProcess.start("rm", "-vi", "foo.txt");
みたいに書くと、ちゃんとファイル削除前に確認もしてくれるよう作ったのだけど
ひょっとしたらLinuxとかではうまくいかないかもと不安になったので
環境を持ってる人だれか試してみてくれないかな。
たしかUNIX系OSでは標準入出力と端末が結びついていないと
-i オプションが無視されるとか聞いたことがあるので。
ちなみにWindowsのコマンドプロンプトやCygwinではOKでした。
コード見ただけで System.in から読み込んで stdin へ渡すスレッドがプロセス終わっても起動しっぱなしの悪害プログラム。
そうそう
「ついでにバグがあったら教えてくれると嬉しい」って
>>939 に書こうとして忘れてた。
>>940 ありがとう。
public static void main(String[] args) {
// ...
// Java で事前の処理を行ってから
// 他のプログラムに渡す
EasyProcess.start(...);
}
こんな感じの使い方を想定してたので
プロセスが終了した後のことをあんまり考えてなかった。
いちおうプロセス終了後に System.in から読み込もうとすると
Transfer スレッドも終了するようにはなってるんだけど。
942 :
939 :2010/04/29(木) 02:07:45
考え始めてみたら、意外と難しいな。 System.in を転送するスレッドをどうやって止めればいいんだろう。 簡単な方法はあるのかな。 あと Windows で System.in.markSupported() が true を返したので どの環境でも System.in はマークをサポートしてるだろう という前提で書いてしまったけど、これも問題になるかも。
自分でubuntuとかで試せばいいだろう
>>942 そういうのcommonsにあったような。
antのコードを見たんだっけかな?
945 :
デフォルトの名無しさん :2010/04/29(木) 09:51:29
便乗だけど、antって使うと何がいいの? ウィキ読んでもさっぱり分からない OSが変わっても同じようにコンパイルできるってこと? 逆にantを使わなかったら何か面倒なことあるの? コンパイルなんて「実行」押したら済むでしょ?
仕事で使うならコンパイルだけじゃ済まないの。 ビルド番号更新して JAR 作って署名して javadoc 作って別チーム参照用のファイルサーバに コピーしたり、イミフ な CSV の定義ファイルからデータテンプレート作ったり、クラスの本数で 開発管理用ファイル更新したり。 まぁ Ant である必要性が無いのはそうだな。行き当たりばったりで作った仕様っぽくて言語 として使いづらい。あとあれ作った奴は流行りで XML 使っただけだろ。スキーマも書けない 糞 XML 仕様。
947 :
945 :2010/04/29(木) 12:14:38
>>946 一応よく分からずに使ってはいるんだけど、
そんなややこしい作業があったのね
ありがdでした
FileInputStream(FileOutputStream)のclose()がIOExceptionを投げる のはどんな状況のときでしょうか? それと、close()が失敗したときにどのような処理をすべきでしょうか? 現在IOExceptionを握りつぶすくらいしか思いつきません・・ 現在 void hoge() /* throws IOException */ { // IOException を搬出してはいけない仕様になっています InputStream istr = null; try { istr = new BufferedInputStream(new FileInputStream("hoge.txt")); // istr を使って色々処理 } finally { try { if (istr != null) { istr.close(); } } catch (IOException e) { // 握りつぶす } } } のような関数を書いているのですが、どうも糞コードのような気がしてなりません。 皆さんなら上記のプログラムをどのように書き直すでしょうか? 冒頭の質問と合わせてお願いします。。。
>>948 close()時のIOExceptionはディスクエラーぐらいしか思いつかんけど。
あえて言うとすれば毎回書くのはアレだから
public static void closeQuietly(Closeable closeable) { if (closeable != null) try { closeable.close() } catch (IOException e){} }
みたいなメソッド作って使いまわすぐらいか。
Lock の解放に失敗、出力ストリームならバッファのフラッシュに失敗、低レベル I/O 処理中に プロセスが中断シグナル拾った、OS や JavaVM がおかしくなっているなど。 対応としてはログ吐いて握りつぶすか IllegalStateException でも投げるしかねぇな。 public static void close(Closeable c){ try{ if(c != null) c.close(); } catch(IOException ex){ logger.log(Level.SEVERE, "クローズに失敗", ex); } return; } ちゃんと作る時は (全経路テストこなすために) ユーティリティ機能として実装する。 InputStream in = null; try{ in = new FileInputStream(file); .... } finally { IO.close(in); }
質問です。このソースの訳を教えていただきたいのですが、 もし、パラメータの値が無かったら配列なしのString型のValuesが作られnullが代入され(1行目) ValuesがnullだったらValuesの配列1個作り”0”を代入しなさい という意味でOKですよね。(if文以降) 逆にYasaiにパラメータに2個渡されてたらValues[0]、Values[1]が作られ(1行目) それぞれの配列に値が渡される。 Valuesがnullだったら、、、んあれ・・・・ Values[0]とValuesは同じ???(if文以降) 複数渡されてたらValuesなんて宣言された無いから怒られるんじゃ・・・。 それともValues[0]もValues[1]も大きなくくりではValuesだからif文が通るのか・・・。 かなり混乱気味です。夜分遅くですが教えていただけると助かります。 String[] Values=request.getParameterValues("Yasai"); if(Values==null){ Values=new String[1]; Values[0]="0"; }
何がわかってないのかがわからないので、何を教えていいのかわからない 配列が理解出来てないのか? そのソースにコメント振ると Values に Yasai を代入。Yasai がないときは {"0"} を代入 て感じ
質問です。 一つのint型変数を用意してメモリ使用量/全体量 をコンソールに出力するだけのコードを書いてみたのですが、 変数に0等の小さい値を入れた場合と巨大な値を入れた場合とで メモリ使用量に違いが出ていました。(値はリテラルで指定してます) Javaのint型は4バイトのメモリ領域を使用したと思うのですが、 代入した値によってメモリ使用量が変動してしまうのはなぜなんでしょうか?
んなばかな
>>953 コードが示されていないので推測するしか無いが
コンソールに出力する文字列生成時に桁数が多い分どっかでメモリ食ってるんじゃないか?
public static void main(String[] args) { int i = 0; // 2147483647 System.out.println(i); System.out.println(Runtime.getRuntime().freeMemory() + "/" + Runtime.getRuntime().totalMemory()); } iの数値が0でも2147483647でも俺の環境だと変わらないな。 iをメソッドの外に出してstatic装飾子付けても変わらなかった。
ソケットをコネクションしていざ書きこもうと思ったとき、相手プロセスがコネクションを切ってしまい非活性になりました。 したしsocket.isClosed()してもfalseになり、writeするとエラーになります。 書き込み前にソケットの状態を確認し、相手がクローズしていたら、再度コネクションを張り直し処理を続行しようと思っています。 その場合のロジックを教えていただけないでしょうか?
書き込みで例外が発生したら、コネクション張りなおし…じゃだめなのか?
1. SocketAddress を引数に取る OutputStream クラスを作成。 2. コンストラクタ内で接続し出力ストリームを保持しておく。接続に失敗したら例外。 3. write メソッド内で例外が発生したら再接続。再接続に失敗したら例外。
>>954-956 レスありがとうございます。
検証までして頂いてとても参考になりました。
後出しで申し訳ないのですが、Java環境はCLDC1.1/MIDP2.0です。
Javaである以上基本的な仕様は変わらないだろうと勝手に思い込んでいたのですが
KVM環境では事情が違う?のかも知れないですね。
CLDC/MIDPスレで質問すべき事だったかも知れません。
検証コードの内容は
>>956 と同等のものですが、
開発環境付属のKVMエミュレータと、携帯電話実機環境(OAP)のどちらも
やはりint iへ代入する値によってメモリ使用量に違いが出てきます。
i=0のときのfreeMemory() => 479820(実機では1534388)
i=100のときのfreeMemory() => 479820(実機では1534384)
i=2147483647のときのfreeMemory() => 479808(実機では1534304)
>>960 >検証コードの内容は
>>956 と同等のものですが、
まったく一緒なのかね?少しでもソースが違えば生成されるコードが違う可能性あるんだから、
いい加減な情報出されても判断の仕様がない。
>>954 の可能性に加えて、i の値を定数扱いして小さい数値だとより短いコードをコンパイラが出してるのかもしれない。
生成されたコード比較してみな。
>>961 レスありがとうございます。
バイトコードの違いも調べましたが、
i=0のiconst_0 と、
i=2147483647のldc1 <Int 0x7fffffff>
のスタックに積む部分以外は同一です。
長くなりますが、ソースコード全文を貼らせて頂きます。
(エミュレータ環境ではコメントアウト部分のみで結果の出力を得られますが、
実機では標準出力が利用できない関係上、出力のためのコードを設けてあります。)
/* Test.java */
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Test extends MIDlet {
private TestCanvas canvas;
public Test() {
int i = 0; //100 //2147483647
//System.out.println(Runtime.getRuntime().totalMemory());
//System.out.println(Runtime.getRuntime().freeMemory());
String[] results = {
Long.toString(Runtime.getRuntime().totalMemory()),
Long.toString(Runtime.getRuntime().freeMemory())
};
canvas = new TestCanvas();
canvas.setResults(results);
Display.getDisplay(this).setCurrent(canvas);
}
public void startApp() {}
public void pauseApp() {}
public void destroyApp(boolean flag) {}
}
【続き】 /* TestCanvas.java */ import javax.microedition.lcdui.*; class TestCanvas extends Canvas { private String[] results; public TestCanvas() {} public void setResults(String[] results) { this.results = results; } public void paint(Graphics g) { g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0, 0, 0); g.drawString(results[0], 2, 10, Graphics.LEFT|Graphics.TOP); g.drawString(results[1], 2, 25, Graphics.LEFT|Graphics.TOP); } }
class MyTest { public static void main(String[] arg) { int a=100,b=100,c=50,d=100,e=50; a+=--a+a--; b+=b---c; e+=d---e; System.out.println("a="+a); System.out.println("b="+b); System.out.println("c="+c); System.out.println("d="+d); System.out.println("e="+e); } } おまえら、これ実行後のa,b,c,d,eの値を予想できる?
コンパイラによって値が変わる
966 :
デフォルトの名無しさん :2010/04/30(金) 16:18:22
>>962 int型は環境に関係なく常に4バイトです。ただし、PrintStream#println(int)はパラメータ
で受け取ったint値を一旦文字列かchar[]に変換しているため、10進文字列化したときの
桁数が違えば当然ヒープメモリ消耗量が変わります。
967 :
デフォルトの名無しさん :2010/04/30(金) 16:28:06
>>957 リモート側が何の通知もなしに通信を切断した場合に通信リンクが
有効かどうかを確認するには、何かのパケットをリモートマシンに
送信してみる必要がありますが、そういう命令がTCPにないと思います。
ためしにデータを送ってみるしか無いでしょう。
int retry = 3;
while ( retry > 0 ) {
if ( trySendData(送りたい情報+あて先) ) {
break;
}else {
retry--;
}
}
private void trySendData(いろんな引数) {
Socket sock = null;
try {
送信処理();
return true;
}catch ( Exception e ) {
return false;
}finally {
if ( sock != null ) try { sock.close(); } catch ( Throwable t ) {}
}
}
>>962 Javaの生成コードはよくしらないが
>i=0のiconst_0 と、
>i=2147483647のldc1 <Int 0x7fffffff>
この二つはバイトサイズ一緒なのかい?
ちょっとだけぐぐってみたけど、JavaのコードってまるでFORTHだね
>>964 a が 100 + 99 + 99 = 298 で、
b は 100 + 100 - 50 = 150 で、
c は変わらんから 50 と。
面倒なので以下略。
度々レスありがとうございます。
>>966 i=0、i=2147483647の両ケースともメモリ使用量の桁数は揃っているため、出力のための
文字列化ではヒープメモリ消費量は変わらないのでは無いかと思いますが、間違ってるでしょうか?
>>968 バイトサイズ?というのはどう言う事ですか?
Javaの4バイトのint型の範囲(-2147483648〜2147483647)内ですが、
そう言う事ではなくてですか?
また、ライフタイムの怪しい
>>962 のString[] resultsをメンバ変数に
してみましたがメモリ使用量には違いが出たままです。
>>969 a=298
b=150
c=50
d=99
e=100
になった
だから?
>>970 俺もオープンアプリやってるからうち帰ったら試してみるわ
>>962 のソースでメモリ使用量が違うってのは興味深いな
質問です。 html側で入力された、半角スペースで区切られた数字列を、アプレット側で呼び出して StringTokenizerを使ってばらしたいのですが、 <html側> <param name="data" value="123 123 222 333"> <アプレット側> StringTokenizer data = new StringTokenizer("getParameter("data")"); という風にやって見たところ、この行について 文ではありません。というエラーが発生しました。 new StringTokenizer("");の括弧の中に getParameter("data")を入れたのが悪いのだろうとおもっているのですが、 変数をStringTokenizerでばらす場合にどういった操作をすればいいのでしょうか?
>>974 new StringTokenizer(getParameter("data"));
977 :
968 :2010/04/30(金) 19:04:49
>>970 生成される命令コードの長さが違うのかと思ったが、ちと違うようだ、以下wikiから引用
# ldc - コンスタントプール内の4バイトの定数(int,float,String)の内1バイト以内でエントリ番号を指定できるものをスタックに積む。
# iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5 - intの-1,0,1,2,3,4,5をスタックに積む。
これ見ると、どっちも命令長は1バイトだが、「コンスタントプール内」に定数のエリアが確保されるかどうかの違いがある
とりあえず、その分はメモリ使用量に違いは出るのだろう。
>>964 >b+=b---c;
これってなんでbは150になるの?
b---c は b-- - c になる。
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.2 > The longest possible translation is used at each step,
> even if the result does not ultimately make a correct program
> while another lexical translation would.
> Thus the input characters a--b are tokenized (§3.5) as a, --, b,
> which is not part of any grammatically correct program,
> even though the tokenization a, -, -, b could be part of a grammatically correct program.
149にならないのは何故?
なんで149になるんだ?
b+= b-- - c って b=b+ b + c b=b - 1 ってことじゃないの?
>>978 1. b と c の値をロードする。仮に t1=b; t2=b; t3=c; としよう。
2. b をデクリメントする。
3. t2 - t3 を計算する。演算結果は t4 に入るとしよう。
4. t1 + t4 を計算する。結果は b に代入される。
つまり b をデクリメントした後に演算結果で上書きされるので b の
デクリメント操作は無効となる。
>>979 それは演算子の認識順位を述べているだけで説明としては 20 点。
もっとがんばれ。
ってことはデクリメントしたいときは、分けて書かないとダメのなのか
2 と 3 は逆だったかもしれない。まぁ結果は同じだが。 インクリメント演算はロード/ストアが発行されない分効率は良いんだが、 他の混在させるとこういうややこしい事になるので混ぜない方が良い。
ちなみに a += --a + a--; も a-- の評価順序が低いというだけではなくて、
上記のような結果の上書きが発生する。説明は省略するので宿題だ。
javap の結果をよく見て考えれ。
これを演算子の認識と評価の優先順位問題と見た奴は即死。
>>969 あたりは本当は結果に対して説明ができなくなって諦めたんじゃないか?w
>>977 4バイト確保されてメモリ使用量の変動しない
>>956 が、一般的に正しい
状態だと思いますが、
>>956 と同様の検証コードを以ってしてもKVM環境では
値によってメモリ使用量が変動してしまうため、その原因を調べています。
>>960 のi=100の例の様に、専用の命令が用意されている-1〜5以外の
値を代入した場合でも0や2147483647やそれ以外の場合と同様に
メモリ使用量が微妙に違ってきてるのです。
>>973 まず疑わしいのは自分のソースだろう、とあたりを付けてはいるのですが
int型以外のケースでもテストを重ねるほど、KVMの仕様を疑いたくなるほど
メモリ使用量に関して腑に落ちない点が出てきます…
単なるテストコードの間違いであってくれれば話は早いのですが。
一人で書き込みすぎるのもあれなので、色々と調べ直してみたいと思います。
ヒントを頂けるかも知れないので、スレはもうしばらく見学させて頂きます。
レスして下さった方々ありがとうございました。
>>987 そのレベルで調べたいんならKVM解析するしか無いよ
KVM ってそんなメモリ管理まで仕様になってんの? 単なる実装依存じゃね?
>>986 ここは質問スレだぞ
口はさめるほど知ってるなら説明してやれよw
おれはj2meなんかさわったことないし知らんけど
>>987 実行時のメモリ割り当てなんて、コンパイラやらロケーターやらVMやら色々なプログラムが絡むから
全てを明らかにしたいなら、今使ってるバージョンのソフトを全て逆アセンブルでもして、
それぞれの動きを完全に把握する必要があると思うよ。
逆に聞きたいんだが、なんでそんなことが気になるわけ?
Javaなんて抽象度の高い半インタプリタ言語でプログラム作ってる人が
気にするようなことじゃないと思うんだが、それでなんか不具合でも発生してるの?
顔真っ赤にして何言ってんだか。KVM の方の話とごっちゃにすんなよ。
993 :
977 :2010/04/30(金) 22:44:14
>>987 >4バイト確保されてメモリ使用量の変動しない
>>956 が、一般的に正しい
ん〜、i=2147483647の時は4バイト確保されるけど、i=0の時はメモリ確保されないので
メモリ使用量に違いが出るって言ったつもりなんだけど、僕の言ってること理解出来てます?
iconst_0 とldc1 ではメモリの使用量が違う。
でも、それでメモリの残り容量にどう影響が出るかは、4バイトの使用量の差があっても、
アライメントによっては同じサイズに整合されるかもしれないし。
他の方も言ってる通り、結局は実装依存だと思いますよ。
994 :
987 :2010/04/30(金) 22:57:59
>>991 不具合とかは無いですが好奇心です
>>993 なるほど、今度は良くわかりました
その線の様な気がしてきました
貴重な回答ありがとうございます。
実際のプログラムには関係ないんだが、エビーマーレみたいな名前の単語ってある? 誰かに聞いたことあるんだが思い出せなくて
エディーマーフィ の検索結果 約 227,000 件中 1 - 10 件
エルカンターレ の検索結果 約 154,000 件中 1 - 10 件目 (0.32 秒)
次スレはどうした?w
エビマヨネーズ の検索結果 約 1,360,000 件中 1 - 100 件目 (0.47 秒)
もう語ることなど無い
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。