★★Java質問・相談スレッド133★★
at TECH
[前50を表示]
650:デフォルトの名無しさん
09/11/08 19:28:29
分からん人もいるだろう
辞書を引く努力すら放棄してる人が大半のような気はするけどな
651:647
09/11/08 20:31:26
>>648
なるほど、わかりました。ありがとうございます
>>649-650
一応、辞書を引きながら調べては居るものの、根本的に文法がわからないので
まったく意味が理解できず
652:デフォルトの名無しさん
09/11/08 21:23:35
これは文法関係ないぞ。
技術英語なんざカタカナ英語に訳してそのまま繋げれば読める
653:デフォルトの名無しさん
09/11/08 21:41:00
読むのと理解するのは違うけどなっ
フォーカストラバーサルサイクルなんて繋いで呼んだだけだ^p^;
654:デフォルトの名無しさん
09/11/08 22:02:26
Even English speakers won't understand jargon without proper background knowledge.
655:デフォルトの名無しさん
09/11/08 22:16:27
質問です。
Double-Checked LockingはJavaではちゃんと動かない、という話は理解しているのですが、
例えば、以下のようなコードならば意図どおりに動作するでしょうか?
class X {
private Y instance = null;
void method() {
if (this.instance == null) {
synchronized (this) {
Y __instance = Y.getSingleton(); // インスタンス化されてるけど初期化されてないインスタンス
if (this.instance == null) {
__instance.init(); // Y固有の初期化処理
this.instance = _instance;
}
}
}
}
}
656:デフォルトの名無しさん
09/11/08 22:18:43
EJBに関して質問です
リモートセッションビーンを呼び出したいのですが、lookupでこけてしまいます。
jndi-viewからセッションビーンを確認できないので、JNDIのどこかが誤っている
と思います。
JBoss4.2(EJB3.0)なので、ejb-jar.xmlやjboss.xmlは不可欠でないと思うのですが、
それは正しいでしょうか?
657:デフォルトの名無しさん
09/11/08 22:51:22
>>655
いいえ
__instance.init(); が this.instance = _instance; よりも後に実行されると
(メモリアクセスは様々な要因で勝手に並び替えられる)、
他のスレッドから未初期化のインスタンスが見えてしまう
658:デフォルトの名無しさん
09/11/09 00:22:19
JavaのStringは内部的にUnicodeでエンコードされていると聞いたのですが、
内部的にUTF-16になるのでしょうか?
659:デフォルトの名無しさん
09/11/09 00:27:41
はい
660:デフォルトの名無しさん
09/11/09 00:31:07
>>658
Unicodeであってるよ。
全ての文字を16ビット値で表現可能とするために、
UTF-16と呼ばれるエンコーディング形式を定義しているだけ。
UTF-16では0x0000〜0xffffの間の値は直接Unicode文字に対応してる。
661:デフォルトの名無しさん
09/11/09 01:38:58
>>657
なるほど。
あと、もう一点伺いたいのですが、__instance.init(); を init(__instance); にしたり、
instanceフィールドをvolatileで宣言した場合でも同様になるでしょうか?
662:デフォルトの名無しさん
09/11/09 01:43:38
instanceがvolatileなら大丈夫
volatileには同期効果がある
663:デフォルトの名無しさん
09/11/09 01:51:55
>>662
私の理解では、volatileは「各スレッドから常にその変数の最新の値が見えるように強制する」もの
なのですが、最適化時に順序の入れ替えを禁止する効果もあるのでしょうか。
664:デフォルトの名無しさん
09/11/09 02:46:10
はい
えーと・・・・・・ここかな
URLリンク(java.sun.com)
抜粋で
> Synchronization actions induce the synchronized-with relation on actions, defined as follows:
> ・A write to a volatile variable (§8.3.1.4) v synchronizes-with all subsequent reads of v
> by any thread (where subsequent is defined according to the synchronization order).
> If we have two actions x and y, we write hb(x, y) to indicate that x happens-before y.
> ・If x and y are actions of the same thread and x comes before y in program order, then hb(x, y).
> ・If an action x synchronizes-with a following action y, then we also have hb(x, y).
あるスレッド内でvolatileへの書き込みより前に起きることは、
別のスレッド内でそれを読み出した後に起きることよりも前に起きる
665:デフォルトの名無しさん
09/11/09 07:48:47
>>664
なるほど、ありがとうございました。
666:デフォルトの名無しさん
09/11/09 10:54:05
Webアプリを作っていて、JSFと普通のサーブレットを使っています。
/faces以下にアクセスしたらFacesServletで、それ以外にアクセスしたら自前のサーブレットで処理したいと思っているんですが、
それぞれのサーブレットのURLパターンを /faces/* と /* にしたところ、すべてのリクエストが自前のサーブレットに回ってきて、
/faces/index.jspのようなリクエストでもFacesServletで処理されなくなります。
どのようにすればこれを正しくわけることができるのでしょうか。
667:デフォルトの名無しさん
09/11/09 16:33:50
0〜30の数字の中からランダムに5つ重複なしで選びたいんですが
どうやったらいいでしょうか?
もしそういう関数があれば教えてください
668:デフォルトの名無しさん
09/11/09 16:46:18
配列に0〜30まで数字を入れる
乱数でかき混ぜる
前から取り出す
( ^ω^)おっ おっ おっ
669:デフォルトの名無しさん
09/11/09 16:47:53
宿題か何かかよ
670:デフォルトの名無しさん
09/11/09 16:54:06
そうです宿題です
すいません宿題スレっていうのがあるんですね
そちらに行きます
ありがとうございました
671:デフォルトの名無しさん
09/11/09 16:59:05
668で解決じゃないの
672:デフォルトの名無しさん
09/11/09 17:05:41
宿題は2ちゃんねらにやらせる時代
673:デフォルトの名無しさん
09/11/09 17:26:01
import java.util.Vector;
import java.util.Map;
import java.util.HashMap;
public class Main
{
public static final int MAX = 999;//初期値
public static final int SIZE = 5;//頂点の数
public static int path[][] =//隣接行列
{
{MAX, 50, 80, MAX, MAX},
{MAX, MAX, 20, 15, MAX},
{MAX, MAX, MAX, 10, 15},
{MAX, MAX, MAX, MAX, 30},
{MAX, MAX, MAX, MAX, MAX},
};
public static void dijkstra(int start, int end, Vector<Integer> allNode)
{
Map<Integer, Integer> root = new HashMap<Integer, Integer>();
int[] distance = new int[SIZE];
boolean[] kakutei = new boolean[SIZE];
for (int i = 0; i < SIZE; i++)
{
distance[i] = MAX;
kakutei[i] = false;
}
kakutei[start] = true;
distance[start] = 0;
for (int i = 0; i < allNode.size(); i++)
674:デフォルトの名無しさん
09/11/09 17:26:42
{
root.put(i, start);
if (kakutei[i] == true) continue;
if (path[start][i] != MAX) distance[i] = path[start][i];
}
while (kakutei[end] == false)
{
int kakuteiIndex = -1;
for (int i = 0; i < allNode.size(); i++)
{
if (kakutei[i] == true) continue;
if (kakuteiIndex == -1)
kakuteiIndex = i;
else if (distance[i] < distance[kakuteiIndex])
kakuteiIndex = i;
}
kakutei[kakuteiIndex] = true;
for (int i = 0; i < allNode.size(); i++)
{
if (kakutei[i] == true) continue;
if (distance[kakuteiIndex] + path[kakuteiIndex][i] < distance[i])
{
distance[i] = distance[kakuteiIndex] + path[kakuteiIndex][i];
root.put(i, kakuteiIndex);
}
}
}
675:デフォルトの名無しさん
09/11/09 17:27:09
なんなんですか
676:デフォルトの名無しさん
09/11/09 17:27:37
for (int i = 0; i < distance.length; i++)
{
System.out.println(i + " までの最短距離は " + distance[i]);
}
int r = root.get(end);
StringBuffer sb = new StringBuffer();
sb.append(end);
while (true)
{
sb.append(r);
if (r == 0) break;
r = root.get(r);
}
sb.reverse();
System.out.print(start + " から " + end + " までの最短ルートは");
for (int i = 0; i < sb.length(); i++)
{
System.out.print(" ==> " + sb.charAt(i));
}
}
public static void main(String[] args)
{
Vector<Integer> allNode = new Vector<Integer>();
for (int i = 0; i < SIZE; i++)
{
allNode.add(i);
}
dijkstra(0, allNode.size() - 1, allNode);
}
}
677:デフォルトの名無しさん
09/11/09 17:28:18
やっていることをコメントアウトで解説してくれませんか?
678:デフォルトの名無しさん
09/11/09 17:30:37
よく見てないけどダイクストラ法か何か?
679:673
09/11/09 17:32:23
はい、ダイクストラ法です
680:デフォルトの名無しさん
09/11/09 17:33:08
質問です。
ArrayList listに
list.add(new Integer(10))と追加してあるんですけど
このlistから元の数字の10を取り出すにはどうすればいいでしょうか?
(int)list.get(0)みたいなことをやりたいんですがキャストできませんと言われました。
681:デフォルトの名無しさん
09/11/09 17:33:43
Integerにキャストすればおk
682:デフォルトの名無しさん
09/11/09 17:40:03
>>681
The method Integer(Object) is undefined for the type ○○○(自分で作ったクラスの名前)
と言われました・・・
683:デフォルトの名無しさん
09/11/09 17:42:51
list.get(0).intValue()
684:デフォルトの名無しさん
09/11/09 17:43:29
あごめんなさい
キャストじゃなくてInteger(list.get(0))で新しく作ろうとしてました
キャストならできました!
ありがとうございます
685:デフォルトの名無しさん
09/11/09 17:45:23
>>683
これだとできませんでした
686:デフォルトの名無しさん
09/11/09 19:40:07
((Integer) list.get(0)).intValue()
687:デフォルトの名無しさん
09/11/09 22:06:48
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;;
public class renshu3 extends JApplet
{
private JLabel lb;
private JPanel pn;
private JRadioButton rb1,rb2,tmp;
private ButtonGroup bg;
public void init()
{
lb=new JLabel("いらっしゃいませ。");
pn=new JPanel();
rb1=new JRadioButton("白", true);
rb2=new JRadioButton("黒", false);
bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
pn.add(rb1);
pn.add(rb2);
add(lb, BorderLayout.NORTH);
add(pn, BorderLayout.SOUTH);
rb1.addActionListener(new SampleActionListener());
rb2.addActionListener(new SampleActionListener());
}
688:デフォルトの名無しさん
09/11/09 22:07:29
class SampleActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
tmp=(JRadioButton) e.getSource();
lb.setText(tmp.getText() + "を選びました。");
if(){
lb.setForeground(Color.white);
}
else{
lb.setForeground(Color.black);
}
}
}
質問です。ラジオボタンが2つあって、それぞれ押すと色が変わるようにしたいんですが
ifの括弧に何を入れればいいんでしょうか。
689:デフォルトの名無しさん
09/11/09 22:10:53
trueかfalseになる様な式を入れればいいんじゃないでしょうか
690:デフォルトの名無しさん
09/11/09 22:18:04
>>688
解らないならばAcionLisnerを2種類用意しろ
691:デフォルトの名無しさん
09/11/09 22:21:39
「〜を選びました」って出せるのにif文の内容が判らないとは、これいかに?
692:デフォルトの名無しさん
09/11/09 22:25:12
その文は最初からありましたので
693:デフォルトの名無しさん
09/11/09 22:53:24
URLリンク(www.open-tec.info)
こちらのサイトのWindows版を入手したものの
使い方が分からずにいます。
java実行環境があれば実行できるようですが、
>>3のリンク先
URLリンク(www.java.com)
からjavaをインストールしましたが、どのように使うのか分かりません。
現在インストールしているのはJava Version6 Update 17です。
根本的なことが理解できていないような気がしますが
どなたかご教示下さい。
694:デフォルトの名無しさん
09/11/09 23:11:54
ここはプログラミングの板であってソフト板じゃない
695:687
09/11/09 23:14:32
括弧にtrueを入れてみたところ、白にはなりましたが黒にはなりませんでした。
URLリンク(www.dotup.org)
どうか教えてくださいませんか。
696:デフォルトの名無しさん
09/11/09 23:22:59
質問なのですが三つの座標が一直線に並んでいるか判定するにはどうすればよいでしょうか
697:デフォルトの名無しさん
09/11/09 23:26:57
面倒なら目視すればいいんじゃないんでしょうか?
698:デフォルトの名無しさん
09/11/09 23:37:05
>>696
点A,B,Cとして、二点間A-B,A-Cの傾斜を求めて一致するか判定。なお正負には注意。
699:デフォルトの名無しさん
09/11/09 23:39:27
>>695
>>690に書いてある通り、クラスを2つ作ればいいだけの話だと思うんだけど
IDEを使わないで書いたコードなので、たぶんタイプミスがあると思う↓
rb1.addActionListener(new RB1ActionListener());
rb2.addActionListener(new RB2ActionListener());
private class RB1ActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
/* 白の時したい処理を書く */
}}
private class RB2ActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
/* 黒の時したい処理を書く */
}}
700:デフォルトの名無しさん
09/11/09 23:54:58
教えていただいてて申し訳ないですが、さっぱり分からないのでtrueのまま提出することにします。
701:デフォルトの名無しさん
09/11/10 00:08:54
>>700
trueのかわりに「rb1.isSelected()」って書いとけ!
702:デフォルトの名無しさん
09/11/10 00:15:08
あきらめろ
703:デフォルトの名無しさん
09/11/10 01:16:14
理屈が分からなくても動きさえすれば無問題
そんなふうに考えていた時期が俺にもありました
704:デフォルトの名無しさん
09/11/10 03:41:49
>>701
激烈之謝謝!
705:デフォルトの名無しさん
09/11/10 10:16:20
JEditorPaneにHTMLを読み込んだ後に、HTMLを追加できないですかね?
<html><body>
<!-- HogeHogeな内容 -->
<!-- ここに新しく追加 -->
</body></html>
706:デフォルトの名無しさん
09/11/10 16:39:23
Faceltesのタグファイルについてです。
// タグファイル
<ui:composition><f:convertDateTime timeZone="JST"/></ui:composition>
// 使用側
...
<my:convertDateTime dateStyle="full" />
...
のように元のタグ(f:convertDateTime)を利用してカスタムタグ(my:convertDateTime)を作る場合、カスタムタグ
の属性値を委譲先のタグの属性に渡すにはどうやると良いでしょうか?
上の例ですと
<ui:composition><f:convertDateTime dateStyle=#{dateStyle} timeZone="JST"/></ui:composition>
とすれば可能ですが#{dateStyle}が空の場合に問題となります。
707:705
09/11/10 19:03:34
自分で解決してしまいました
HTMLEditorKitの使い方を間違えていたようですorz
708:デフォルトの名無しさん
09/11/11 01:32:05
コレクションワークフレームについて質問です。
現在「Javaの道」で勉強中なのですが、
URLリンク(www.javaroad.jp)
上記URLの例1の中で下記1.のような記述があります。
これは下記2.と同じ意味なのでしょうか。
2.でもエラーはでませんでした。
addメソッドの中に new ** というように記述するのを初めてみたもので。
メモリ確保やニュアンスがちがうのでしょうか。
1.(Javaの道 記載コード
void addhead(List exList) {
for (int i = 0; i < 10000; i++) {
exList.add(0, new Integer(i));
}
}
2.(自分で書き換えたコード
void addhead(List exList) {
for (int i = 0; i < 10000; i++) {
Integer it = new Integer(i);
exList.add(0, it);
}
}
709:デフォルトの名無しさん
09/11/11 10:44:54
一緒です
System.out.println(123 + 456);
と
int x = 123 + 456;
System.out.println(x);
が一緒なのと同じ理屈
710:デフォルトの名無しさん
09/11/11 22:03:58
>>708
こっちは同じコードだけど
>>709
こっちは最適化で変わるんじゃ・・
711:デフォルトの名無しさん
09/11/12 00:59:15
>>708
一旦変数に参照させてから使わないといけない、という決まりは無い。
String s = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
こういうのもあり。
712:デフォルトの名無しさん
09/11/12 07:08:19
ダブルバッファリングのことについて質問です
「Swing ではJRootPaneとそのコンテンツペインそれからJPanelクラスがダブルバッファリングを有効にしています」
というような記述を見つけたのですが、JPanel上に描画を行うならダブルバッファリングを行う必要はないのでしょうか
一般公開されてるソースを参考にJAVAでゲーム作成の勉強をしているのですが、
JPanelを使っているのにダブルバッファリングを使っていてちょっと混乱しています。
713:デフォルトの名無しさん
09/11/12 10:14:57
そのソースとやらがアクティブレンダリングやってるなら必要。やってないなら不要。
714:デフォルトの名無しさん
09/11/12 19:39:25
自分で図形が動いていくプログラムを書いて、表示が乱れるかどうかやってみりゃいいんじゃね。
715:デフォルトの名無しさん
09/11/12 19:46:47
C++ 使いです、C++ では、コンストラクタで例外を投げないというのがセオリーなのですが
java も同様に考えていいでしょうか?
716:712
09/11/12 20:04:39
>>713
返答ありがとうございます。
アクティブレンダリング(自前の描画メソッド?)が必須なときがいまいち分かってないのですが、もう少し調べてみます。
>>714
返答ありがとうございます。
自分でも色々実験して検証してみます。
717:デフォルトの名無しさん
09/11/12 20:14:52
>>715
Java では普通に例外を投げる。
718:デフォルトの名無しさん
09/11/12 20:47:27
そもそもリークするからとか言い出すC++厨が頭沸いてる。
コンストラクタで引っかかるようなモン、処理継続させたって無駄じゃね?
719:デフォルトの名無しさん
09/11/12 21:12:54
>>715 です
>>717
郷に入らずんば、郷に従え として、例外を投げても後始末してくれるという具合に考えます。
>>718
あまりにも思考が短絡的ですね。
720:デフォルトの名無しさん
09/11/12 22:03:04
ふーん、
・コンストラクタに置くしかなくて、
・でもエラーが起きても処理を継続させないといけない
って状況って何?
721:デフォルトの名無しさん
09/11/12 22:51:00
好きにしろよ
同意を求める為だけに質問するフリをするな
722:デフォルトの名無しさん
09/11/12 23:19:34
質問じゃねーよ、当てこすってるんだよ。
C++のローカル神話持ち込んできた癖に、そっちこそ好きにしろやww
723:デフォルトの名無しさん
09/11/12 23:37:33
分かると思って安価入れなかったんだけど、勘違い君に噛み付かれてるなあ
721は719向けね
724:デフォルトの名無しさん
09/11/12 23:39:59
相手が何でも察すると思うな。
きちんとドキュメントにしたまえ。
725:708
09/11/12 23:55:00
>>709, >>710, >>711
ご回答ありがとうございます。
>>711 これはすごいw。なんて複雑怪奇なんだ。
でも、行数減らしてかけるからスッキリしますね。
726:デフォルトの名無しさん
09/11/12 23:59:39
どこかのコンストラクタでエラーが起きただけでプログラム停止できれば楽だろうねぇ。
727:デフォルトの名無しさん
09/11/13 00:03:10
止めたくなければ上位のメソッドでキャッチすりゃいいだけだよ
どこまで頭悪いんだ
728:デフォルトの名無しさん
09/11/13 00:04:46
むしろなんでC++はコンストラクタで例外投げないの?
コレクションからコレクション作るときnull許可しないなら普通に投げないか?
729:デフォルトの名無しさん
09/11/13 00:08:42
C++ コンストラクタ 例外でググるとそんなのは迷信だってサイトが大量に出てきて笑えるよ
時代遅れの妄言だな
730:デフォルトの名無しさん
09/11/13 00:35:35
>>727
>>720
731:デフォルトの名無しさん
09/11/13 00:41:16
>>725
え゛? 複雑? あー、でもJavaじゃメソッドチェインはあんまやらないから、見慣れない人がいるのもしゃーないのか。
ライブラリが「void返すくらいならthis返せ」って思想だったらよかったのに。
732:デフォルトの名無しさん
09/11/13 02:07:25
>>727
たぶん、new した所が普通に上位のメソッドだという考えになっていないんだろうね。
C++ だとローカル変数を置くだけでオブジェクトが生成されちゃうこともあって。
733:質問者
09/11/13 08:48:30
1. Java1.6の、型を限定したListの作り方を教えてください。
2. inport java.util.List;として、他の場所ではList型が使えているのに、
new List(); が、「型Listのインスタンスを生成できません。」とコンパイルエラーになります。
理由に心当たりがありましたらご教授ください。
734:デフォルトの名無しさん
09/11/13 09:17:02
Listは実装じゃなくてインタフェースだから
List型の変数は宣言できても実体は作れない
実体はLinkedList<T>やArrayList<T>や自分で作った実装のあるクラスでないといけない
List<?> list = new ArrayList<?>();
とか
735:733
09/11/13 09:50:48
>>734
ありがとうございました。
736:デフォルトの名無しさん
09/11/13 10:34:51
エラーでてるのに処理続けてもなあ。
エラー出ない様に対処してから再試行するべき。
737:デフォルトの名無しさん
09/11/13 10:52:08
勘違い君は、>>727だけでなく>>732もなのか。
>>726では「キャッチしなくていいなら楽だ」って意味なのに、>>727で「キャッチすりゃいい」なんてレス
入れるのは勘違いも甚だしい。
また、>>718>>720の脈絡からすれば「コンストラクタでエラーならプロセス停止するべき」って言ってる
に等しい。
リークが問題になるのはプロセスを継続する場合なんだからな。
「処理」って「エラーになったクラスの処理」だったなんて寝ぼけたこと言うのかもしれんが。
738:デフォルトの名無しさん
09/11/13 12:20:09
578 名前: デフォルトの名無しさん [sage] 投稿日: 2009/11/13(金) 12:00:40
HTTPは無理しすぎだからな。
本来は閲覧専用のプロトコルだったはずだ。
いつの間にか書き込みができるようになったり、
個人識別ができるようになったり、
pushもできるようになったり。
739:732
09/11/13 12:22:46
>>737
>>737 は、>>727 がどのレスに対するレスなのかを勘違いしていると思われる。
740:デフォルトの名無しさん
09/11/13 12:36:53
アンカー付けようねってことだねwww
741:デフォルトの名無しさん
09/11/13 13:33:09
Javaで正規表現を使うにはどうしたらいいでしょうか?
また、Javaの文字(char)のユニコード値を得る(int)コードはどうしたらいいでしょうか?
742:デフォルトの名無しさん
09/11/13 13:33:50
間違えてsageてしまったのでageます
743:デフォルトの名無しさん
09/11/13 13:37:26
正規表現はPatternクラス
charはキャストすればintに入る
744:デフォルトの名無しさん
09/11/13 13:39:48
間違えた
「キャストしなくても」
745:デフォルトの名無しさん
09/11/13 13:44:32
>>743(名無しさん)
ありがとう
746:デフォルトの名無しさん
09/11/13 19:49:29
Hibernateについて質問させてください。
複数クラスとテーブルのマッピングSQLを作成するにあたり、
以下の方法では取得できています。
@itより抜粋
Query sqlQuery = session.createSQLQuery(
" select {mem.*},{wg.*} from member {mem} join workgroup {wg} “ +
“ on {mem}.groupno = {wg}.groupno", new String[] { "mem","wg"},
new Class[] {Member.class,WorkGroup.class});
List list =sqlQuery.list();
for (int i = 0; i < list.size(); i++) {
Object[] items = (Object[]) list.get(i);
Member member = (Member)items[0];
WorkGroup group = (WorkGroup)items[1];
System.out.println(
member.getNo() + ":"
+ member.getName() + ";group:"
+ group.getGroupname()
);
}
session.close();
質問に入りますが、全列を使用するわけではないので、取得列名を絞り込むこと
は可能でしょうか。絞込みによる性能向上を期待しています。
どなたかお分かりになる方の助言をお待ちしています。
よろしくお願いいたします。
747:デフォルトの名無しさん
09/11/13 20:01:07
質問します。
java で、ファイルに書き込まれている内容の比較をしたいのですが、そのようなメッソッドは無いでしょうか?
748:デフォルトの名無しさん
09/11/13 20:11:55
Javaでやる必要があんのけ?
749:デフォルトの名無しさん
09/11/13 20:14:29
javaでやれといわれたので。
750:デフォルトの名無しさん
09/11/13 20:23:00
そのようなメッソッドはありません
普通にファイルを読み込んでから普通に内容を比較してください
751:デフォルトの名無しさん
09/11/13 20:27:47
黒魔法メッソッド!!!
752:デフォルトの名無しさん
09/11/13 20:38:16
>>747
MappedByteBuffer#equals()でも使うのがお手軽じゃない?
使ったこと無いけど。
753:デフォルトの名無しさん
09/11/13 23:34:26
スレリンク(tech板)
★★ Java の宿題ここで答えます Part 68 ★★
754:デフォルトの名無しさん
09/11/13 23:51:03
質問させてください。
現在Swingで、コンボボックスを画像表示にし、
そこで選択された画像を、フレーム中央に表示させるプログラムを作っています。
ところが、getSelectedItemの設定で行き詰ってしまいました。
どなたかアイディアをお貸しいただければ幸いです。
ちなみに現在のソースは以下のようになっています。
色々いじくったので可笑しなことになっているかもしれません。
URLリンク(rg550.hp.infoseek.co.jp)
どうぞよろしくお願いします。
755:デフォルトの名無しさん
09/11/14 00:51:34
>>754
combo.setRenderer(new JLabel());
になってないか?
756:デフォルトの名無しさん
09/11/14 00:54:35
>>754 JavaDocではこうなっている。
void setRenderer(ListCellRenderer aRenderer)
757:755-756
09/11/14 01:08:46
間違えた。すまん
758:754
09/11/14 01:16:20
>>755-756
いえ、非常にありがたいです。
他にも何かお気づきの点があれば、よろしくお願いします。
759:755-756
09/11/14 01:31:36
class ComboLabelにtextとicon保存
public Component getListCellRendererComponent内で上で保存したtextとiconをJLabelにセットしなければならないから、
class ComboLabel{
にtext追加。
public Component getListCellRendererComponent(
にsetText追加。
すればいいんじゃないかと……
760:デフォルトの名無しさん
09/11/14 02:04:27
>>754
これで普通に画像の切り替えできてるよ。
変数が見えてなかったりLabelが表示されてなかったりしたのも直したけど。
MyCellRenderer renderer = new MyCellRenderer();
combo.setRenderer(renderer);
combo.addItemListener(renderer);//追加
class MyCellRenderer extends JLabel implements ItemListener, /*追加*/ ListCellRenderer {
..... //省略
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED){
lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon());
}
}
761:754
09/11/14 02:39:10
皆さんどうもありがとうございます。
早速教えていただいたように直してみました。
ところが、
lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon());
の箇所で、lb、modelを解決できませんというエラーが表示されてしまいます。
どこが間違っているのか、自分ではどうしても解決できませんでした。
もう一度教えていただいてもよろしいでしょうか。
お願いします。
ちなみに現在のソースです。
URLリンク(rg550.hp.infoseek.co.jp)
762:デフォルトの名無しさん
09/11/14 02:46:43
>>761
こっちに変えてみな。
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED){
ComboLabel lbl = (ComboLabel)((JComboBox)e.getSource()).getSelectedItem();
lb.setIcon(lbl.getIcon());
//lb.setText(lbl.getText()); Textが必要ならComboLabelにgetText()を追加する
}
}
763:デフォルトの名無しさん
09/11/14 02:49:14
あと以下の2行を修正
public class Combobox extends JFrame{
private JLabel lb; //追加
//JLabel lb = new JLabel(("ここに画像が表示されます")); この行コメントアウトして下のように変更
lb = new JLabel(("ここに画像が表示されます"));;
764:754
09/11/14 03:01:24
迅速なお返事をどうもありがとうございます。
教えていただいたことを元に、もう少し自分で考えてみようと思います。
こんなに遅い時間まで、本当にどうもありがとうございました。
765:デフォルトの名無しさん
09/11/14 03:05:30
>>764
適当に動くようにしたソースはっとくよ。
URLリンク(rg550.hp.infoseek.co.jp)
766:754
09/11/14 03:12:17
わざわざソースまで!
自分の求めていたとおりに動かすことができました。
本当にありがとうございます。
自分ももっと勉強します。
767:デフォルトの名無しさん
09/11/14 03:35:46
MyCellRenderer extends JLabel implements ListCellRenderer
よりも
MyCellRenderer extends DefaultListCellRenderer
にするといいよ。
getListCellRendererComponent() の最初で
super.getListCellRendererComponent(); を呼んで、
アイコンをセットして、
最後に return this; とすればいい。
768:デフォルトの名無しさん
09/11/14 07:53:25
java でC/C++ でいうところの、関数ポインタのような振る舞いをさせるには
どのようなデザインパターンを用いればいいでしょうか?
2つのboolean 値があって、その値の内容の組み合わせパターン(2^2)によって、呼び出すメソッドを変えたいのですが
if 〜else if 構文や、switch 文はかっこ悪いので使いたくありません、よろしくお願いします。
769:732
09/11/14 08:59:26
>>768
Java では関数ボインタを変数に持ったり、関数ポインタを使って多相化することはない。
そういうことをしたい時は、オブジェクトを変数に持って、パターンによって、
共通のインタフェースを実装した異なるオブジェクトを呼ぶことになる。
関数テーブルの代わりにはオブジェクトテーブルということになるが、
オブジェクトテーブル以外にも、4つのパターンを表現した enum クラスを作って、
各 enum 定数の中に実装を書くなどの作戦もある。
770:デフォルトの名無しさん
09/11/14 09:17:34
>>769
Thx
771:デフォルトの名無しさん
09/11/14 09:28:13
>>769
それ、なんてStrategyパターン?
772:768
09/11/14 09:41:43
>>771
外していたらごめんなさい、多分State パターンではないでしょうか?
773:デフォルトの名無しさん
09/11/14 14:23:46
総称型の配列が作れません。
以下のような場合どうすればいいのでしょうか?
public T[] getSpecifiedElements(T[] allElements) {
//allElementの一部要素をT配列で返したい。
}
ArrayList<T> temp = new ArrayList<T>(); に必要な分をつめこんで、
temp.toArray(new T[temp.size()]); ってしたいのですが無理なようです。
(T) temp.toArray(); もクラスキャストエクセプションになってしまいした。。。
774:デフォルトの名無しさん
09/11/14 14:38:55
>>772
お前がやりたいのは、ちょっとした計算ロジックを切りかえたい
ということに見えるが、それだとしたらStrategyパターンであってる
775:デフォルトの名無しさん
09/11/14 14:56:35
>>773
無理。
代替案としては Class<T> を引数で指定してもらうか、
配列使わずList<T>で受け渡しするか。
<T> T[] getSpecifiedElements (T[] allElements, Class<T> clazz) {
List<T> temp = new ArrayList<T>();
//tempに必要な要素をつめる。
return temp.toArray((T[])Array.newInstance(clazz, temp.size()));
}
List<T> getSpecifiedElements (List<T> allElements) {
List<T> temp = new ArrayList<T>();
//tempに必要な要素をつめる。
return temp;
}
776:デフォルトの名無しさん
09/11/14 14:57:52
>>773
総称型の配列をnewすることは、Javaの言語仕様上できない。
多少強引だがこれでOK。
@SuppressWarnings("unchecked")
T[] subElements = (T[]) java.lang.reflect.Array.newInstance(
allElements.getClass().getComponentType(), temp.size());
return temp.toArray(subElements);
つーか、そもそも配列使うのやめればいいだけなんだけどな。
777:デフォルトの名無しさん
09/11/14 15:25:04
>>775
>>776
引数でクラス指定すると総称型の意味がないし、
ワーニング潰すのも気持ち悪いので、
諦めてList<T>を返すことにしました。
しかし勉強になりました。ありがとうございます。
778:デフォルトの名無しさん
09/11/14 16:01:01
ストラッツの質問はここでも大丈夫でしょうか?jsp にアクセス(リロード)した際、自動的にActionクラスを実行するプログラムを組みたいのですが、どうすれば良いでしょうか?
779:デフォルトの名無しさん
09/11/14 16:01:46
>>776
jdk7だと[]とListの区別がなくなるのかも。
780:デフォルトの名無しさん
09/11/14 16:58:38
URLリンク(www.tomicom.ac.jp)
ここを参考に,特定の文字列をAESで暗号化するiアプリを作成してみたのだけど,例外が出てしまう…
どなたか,原因が分かる方ご教授お願いします.
例外
Main :java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm keyTest
java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm
at com.nttdocomo.security.CipherSessionKey.createSymmetricCipher(+71)
at cryptionClass.encryption(+72)
at keyTest.start(+14)
com.nttdocomo.security.CipherSessionKey: Can't use the sessionkey or the iv with the algorithm
ソースコード
URLリンク(www.cms-e.net)
781:デフォルトの名無しさん
09/11/14 17:24:28
"Can't use the sessionkey or the iv with the algorithm"
って書いてあるけど?
782:780
09/11/14 17:33:11
>>781
まぁ,そのエラーメッセージの意味は分かるのだけど,解決策が分からない….
参考URLではプログラム解説のためにDESアルゴリズムを用いているけどできればAESを使いたいので.
783:デフォルトの名無しさん
09/11/14 17:36:00
>>781
いや,ごめん.意味も分かってないかも.
アルゴリズムのあるセッション鍵かIVを使用できません.
という文章的な意味は分かるのだけど,そのトラブルシューティングが分からない
784:デフォルトの名無しさん
09/11/14 17:49:27
>>778
jspがAction経由で表示されたなら、リロードしてもActionが再実行されると思うけど。
785:デフォルトの名無しさん
09/11/14 21:55:10
>>783
その訳はたぶん
そのセッション鍵またはそのIVをそのアルゴリズムと共に使うことはできません
ではないか?
ちょっと調べたらAESはブロックサイズが128ビットらしいので、IVのサイズをそれに合わせて長くしてみるとか
786:デフォルトの名無しさん
09/11/14 22:56:31
ジャバってランタイムがないと動かないの?
RPGツクールみたいなもん?
単体で動くexeとか作れないの?
787:デフォルトの名無しさん
09/11/14 22:57:45
POJOって一体何なの?
どういう風に便利なのかとか、どうすれば使えるのかとかがよく分からない。
788:デフォルトの名無しさん
09/11/14 22:58:29
そうです
強引な方法も無くはないが
素人には10年早い
789:デフォルトの名無しさん
09/11/14 23:08:27
788さん、それボク786に対する答えですか。
790:デフォルトの名無しさん
09/11/14 23:43:23
>>786
うん
でもC++とかでもランタイム必要なものもあるよ
791:デフォルトの名無しさん
09/11/14 23:56:51
OS だってランタイムだ、という考え方をすれば、単に OS 標準でどこまで付いて来るかという問題でしか無いとも言えるな。
792:デフォルトの名無しさん
09/11/15 00:12:21
790さんありがとうございます
とりあえずいろいろいれずにWindowsでexeをクリックするだけで起動する感じが理想なので
別の言語あたってみます
793:デフォルトの名無しさん
09/11/15 04:55:26
アジャイル手法とかに詳しい人がいたら、ご意見をいただけないでしょうか。
最近、私が関わっているプロジェクトで、
「カバレッジ100%を達成するためにホワイトボックスな単体テストを書きまくった結果、
逆に、テストを書き直すコストが増大して大きなリファクタリングができなくなりつつある」
という本末転倒っぽい状態に陥りつつあるのですが、何か良い方法なり指針はないものでしょうか。
794:デフォルトの名無しさん
09/11/15 06:57:08
端的に言えばカバレッジ最優先なポリシはバランスが悪い。
リファクタリング前と後で、極端なまでにテスト再利用性が存在しないのは、
そもそも変化が許容される内容(つまりはリファクタリングによって改善した内部構造そのもの)
に対して過剰なテストが行われていることを意味している。
極端に言ってしまえば、テストは所詮バグが存在しないことの証明にはならないのだから、
あまり内部詳細に踏み込みすぎず、外部インタフェース越しに一般的なシナリオをテストするに
留めておくぐらいがちょうど良いと個人的には思う。
795:デフォルトの名無しさん
09/11/15 07:30:53
>>793
一律にテスト書かないで変更が多そうな部分と変更が少なそうな部分にわけて
変更が少なそうな部分を重点的にテストするとか
796:デフォルトの名無しさん
09/11/15 09:00:14
javamail-1.4.2 を使い、メール送信機能を付与した、プログラムを作成しました
送信テストも終わり、このプログラムを他人に配布したいのですが
通常のjava のアプリケーションが動くJava(TM) SE Runtime Environment (build 1.6.0_17-b04)
の環境であれば、別途に必要なランタイムやライブラリィはありませんか?
797:796
09/11/15 09:52:09
自己解決です
URLリンク(oshiete1.goo.ne.jp)
同じ方がいました、他人に配布するのは、ライセンス的には問題なさそうですが、
バッチでmail.jar を入れるとか、面倒な感じですね、実行するにも長たらしいコマンドを入れなければならないし
C で書いたDLL があるので、こいつを使った方が解決が早そうです。
java のインストローラが作れればいいんだが・・・・
798:デフォルトの名無しさん
09/11/15 10:28:08
izpackかは?
コマンドって、実行時のクラスパス指定のこと?
それならManifestに記述すればいいし最悪バッチファイルなりなんなり書けばいいし、他にもexeにラップしちゃうって手もあるし、あんまり問題にはならなくないかい?
799:796
09/11/15 10:45:00
>>798
ありがとうございます、java は最近はじめたばっかりなので詳しくく質問させてもらいました
Manifest とか、exe にラップする方法があるのですね知りませんでした、調べてみます。
800:デフォルトの名無しさん
09/11/15 13:28:58
>>785
ありがとうございました!
IVを128bitにしたら無事通りました!
801:793
09/11/15 13:50:12
>>794
なるほど。。
インタフェースごしのブラックボックステストと、ホワイトボックステストを分けるのも手かもしれませんね。
802:デフォルトの名無しさん
09/11/15 15:00:16
URLClassLoader#loadClass(null)で呼び出したクラスは、
このクラスローダがGCされると綺麗にメモリ上から消えますか?
public static void run(URL jarFile, String className) throws Exception {
Class clazz = new URLClassLoader(new URL[]{jarFile}).loadClass(className);
MyInterface obj = (MyInterface) clazz.newInstance();
obj.run();
}
803:デフォルトの名無しさん
09/11/15 15:35:26
>>802
一緒にGCされると思うけど、仕様によって保証はされない。
あと、java.lang.Class や java.lang.reflect.Method なんかの
リフレクション用のオブジェクト握りっぱなしにしてると、
そもそもクラスローダがGCされない
804:デフォルトの名無しさん
09/11/15 17:05:11
JNIでCを呼び出すとき、System.loadLibraryでネイティブライブラリをロードしますが、
System.loadLibraryを書くのはコンストラクタがよいのか、staticイニシャライザが良いのかわかりません。
どちらの方がよいのでしょうか?
805:デフォルトの名無しさん
09/11/15 17:10:50
インスタンスをnewするまでstaticなネイティブメソッドが呼べないよ
806:デフォルトの名無しさん
09/11/15 18:21:36
携帯でMP3再生したい
オープンアプリでいっちょやってみるか
ハフマン符号????
File decode(File mp3File) {
// 誰かサンプル書いてみて
return decodeFile;
}
807:806
09/11/15 18:24:48
だめだ
メモリ足りなくなりそうなので
いちいち展開なんてしてられん・・・
void playMp3(File mp3File) {
//一時停止機能とかいらないから誰かサンプル書いて
}
808:デフォルトの名無しさん
09/11/15 19:28:40
別スレッドがSystem.out.print..などで、標準出力にメッセージを出すようになっていて、
それをInputStreamなどで拾いたいのだけど、どうしたら良いですか?
809:デフォルトの名無しさん
09/11/15 19:54:06
java mediaとかかな
特許がらみが多い分野だからほとんどの形式がクローズドだけど。
810:デフォルトの名無しさん
09/11/15 20:01:17
>>808
System.setOutで出力先をPipedOutputStreamか何かに変え、PipedInputStreamか何かで読み出す
811:デフォルトの名無しさん
09/11/15 22:24:08
>>810
ありがとう!解決した!
812:デフォルトの名無しさん
09/11/15 22:35:18
どうしてクラスローダが1つのVMに複数あるのでしょうか?
813:デフォルトの名無しさん
09/11/15 22:49:06
URLから取ってくるクラスローダとか色々あるから。で回答としてはいいのかな?
814:デフォルトの名無しさん
09/11/15 22:49:48
たとえば同一の外部ライブラリで複数バージョンを使い分けたい場合などがあったとする。
唯一のクラスローダしか存在しない場合、FQNが同一のクラスは、一つしか存在することができない。
815:デフォルトの名無しさん
09/11/15 23:08:02
まて、FQNが同一のクラスが同時に複数存在できたりするのか?
ウィザードじゃないから知らないだけかもしれないけど、static変数とか矛盾
してしまうと思うんだが。
816:デフォルトの名無しさん
09/11/15 23:28:29
できる。そもそも同じFQNであれ、ロードされているクラスローダが違えば同じクラスと扱われない。
J2EEやっていれば同一のコンテナ(単一JavaVM)に複数のWebアプリケーションをデプロイして、
それぞれのWebアプリが独自のライブラリ(WEB-INF/lib)を利用する状況を考えて欲しい。
たとえばAアプリはlog4j1.2で、Bアプリはlog4j1.1というのは普通に可能。
それらはThreadに割りつくContextClassLoaderが入れ替わることで(実装者が意識しないかたちで)実現されている。
817:デフォルトの名無しさん
09/11/15 23:29:07
>>815
できるよ
異なるクラスローダがロードしたクラスは、同じFQNであっても別々
static変数も別々
Classオブジェクトを比較しても一致しない
818:デフォルトの名無しさん
09/11/15 23:31:11
あとたしかinstanceofもキャストも失敗するっけか
あらゆる意味で異なるクラス扱いだったはず
819:デフォルトの名無しさん
09/11/15 23:36:33
Seasarという有名な国産DIコンテナがあって、
それはsmart deployという仕組みで、開発時にhot deployが可能なんだけど、
そのやり方は結構単純で、クラスローダをRequestを受け取るごとに生成・廃棄して、
新規にコンパイルされたClassを都度読み込みさせている。
そのようなやり方をすれば、一度読み込まれたClassでも即時反映が実現できる。
820:デフォルトの名無しさん
09/11/15 23:40:34
なるほど。
URLリンク(d.hatena.ne.jp)
とそのリンク先を見てみた。
システムクラスローダは差し替え可能なわけか。知らなかった。
821:デフォルトの名無しさん
09/11/16 00:06:47
複雑な管理処理を行うベースウェアにはGUIや集中管理する画面って必須かな?
それとも管理するためのAPIだけを提供すれば皆安心?
822:デフォルトの名無しさん
09/11/16 00:20:52
せめて参考GUI実装をソースつきで。凝る必要は一切無し。
あれば使ってもらえるし、出来が気に入らなかったら改造するだろうし。
ソース無くてもjadで見ちゃうけど。
823:デフォルトの名無しさん
09/11/16 00:58:42
なるほどruby的なのか
そりゃそうか
824:デフォルトの名無しさん
09/11/16 02:05:38
初めましてm(_ _)m
JAVA初心者なのですが
JAVA2のSEとMEをインストールしようと思い一通りダウンロードしたんですが、
java_ee_sdk-5_08-jdk-6u17-windows-ml.exe
これ以外はインストール出来ませんでした。
EEに当たるようなんですが、サイトを見直すとSEに該当しているようにもみえます。
しかし次にMEをインストールしようとすると「SEがインストールされていない」とでてMEがインストールされません。
MEがSE1.4?のみに対応している可能性もあるのでダウンロードしようとしたんですが見当たりません。
ですがそれ以前から教則本の付録でついてたj2sdk1.4.1_01(ランタイム?)を使用してます。
パソコンは2000年発売VAIOのXPです。SPをインストールしていません。
(すでにSP1がダウンロード不可のため)
どなたかアドバイス下さい。よろしくお願いします。m(_ _)m
825:デフォルトの名無しさん
09/11/16 02:46:23
こっから落とせば?
URLリンク(java.sun.com)
J2ME時代で環境作りたい場合はこっちから落とす
URLリンク(java.sun.com)
826:デフォルトの名無しさん
09/11/16 02:55:54
>>825解答ありがとうございます。後日、ダウンロード試みてみます。
827:デフォルトの名無しさん
09/11/16 15:12:06
SaxParser#parse(File, dh)は内部でファイルのロック取ってるんでしょうかね?
プロセス間のは(共有ロック)取ってくれてると思って使ってるけど。
スレッド間の排他はユーザがやる必要があるのでしょうか?
828:デフォルトの名無しさん
09/11/16 16:20:57
基本的な質問ですいません。
C言語ソースの移植作業しているのですが・・・。
int a(short b)
{
return b+5;
}
を
a(50);のように定数を引数にしてコンパイルすると
「a(short) は (int) に適用できません」
とエラーが出てしまいます。
a(50);をa((short)50);のようにキャストすればエラーは無くなりますが、
定数をいちいちキャストするのが面倒です。
キャスト以外に良い方法は無いでしょうか?
829:デフォルトの名無しさん
09/11/16 17:38:52
int型の引数を受け取れる同名のメソッドを作ればよい
int a(int b) { return a((short)b); }
みたいな
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4924日前に更新/235 KB
担当:undef