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

★★Java質問・相談スレッド135★★

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/01/03(日) 22:36:21
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    ttp://pc11.2ch.net/hp/
Webプログラミング ttp://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
★★Java質問・相談スレッド134★★
http://pc12.2ch.net/test/read.cgi/tech/1258793926/

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
ttp://www.wikiroom.com/java/
0153デフォルトの名無しさん2010/01/14(木) 22:51:08
>>152
簡単なプログラムを組んでテストしてみるとか
0154デフォルトの名無しさん2010/01/14(木) 23:06:25
>>150
解析ツール側での正規表現。
0155デフォルトの名無しさん2010/01/14(木) 23:19:39
String[] args → 「文字列型の、配列の、args」

String args[] → 「文字列型の、args、は配列要素でしたプギャー」
0156デフォルトの名無しさん2010/01/15(金) 00:11:31
自前実装したPaintインスタンスをGraphics2D#setPaint()で与えると極端に重くなるようです。
何か解決策はあるのでしょうか?自分で書いたことがある人などいらっしゃいましたらよろしくお願いします。
よくわかりませんが、アンチエイリアスOFFと組み合わせると遅くなるようです。(ONだと速かった)
コードは下記になります。sdk 6

ttp://codepad.org/exP0Y1C3
0157デフォルトの名無しさん2010/01/15(金) 00:12:38
※グロ注意です
0158デフォルトの名無しさん2010/01/15(金) 00:50:51
>>155
同じもので初期から許されてはいたんですけどね

結局グループで作ることを前提にしてるかどうかの違いですよね
0159デフォルトの名無しさん2010/01/15(金) 01:27:05
>>146-148
なにこの煽り?笑ってしまった 
機会があったら使ってみたい
0160デフォルトの名無しさん2010/01/15(金) 03:00:50
>>145
迷惑です。
0161デフォルトの名無しさん2010/01/15(金) 08:22:56
楽しいか?
0162デフォルトの名無しさん2010/01/15(金) 09:07:53
これでfalseって出るんだけどどういう可能性が考えられる?
ソースファイルはutf-8

Pattern pattern = Pattern.compile("H");//UNICODE_CASE指定してもfalse
Matcher matcher = pattern.matcher("Hello World.");
System.out.println(matcher.matches());
01631622010/01/15(金) 09:18:34
自己解決
0164デフォルトの名無しさん2010/01/15(金) 10:52:30
>>156
そういうものです
元々Java2Dは遅かったのですが、特定の状態 (特定のStroke、特定のPaint、特定のComposite等) の場合は
本来のJava2Dパイプライン (Stroke#createStrokedShape, Paint#createContext, PaintContext#getRaster, Composite#createContext, CompositeContext#composite等)
をすっとばして直接描画を行う最適化がなされ、ハードウェアアクセラレーションも効いて速くなります
自作のクラスに対してはそのような裏技を使えないので、従来通りの処理が必要になり、遅いままです
別のBufferedImageに描いてからそれをTexturePaintするとか、円形のクリッピング領域を設定してdrawImageするとか、
自作のクラスを使わずに済む方向を模索した方がよいです
0165デフォルトの名無しさん2010/01/15(金) 10:55:10
解決経緯を書けやゴルァ!
0166デフォルトの名無しさん2010/01/15(金) 11:15:02
>>162-163
自己解決してるがfindを使えと
01671622010/01/15(金) 12:00:35
".*H.*"
にしたら見つかりました
いくつかの解説サイトでは"H"だけで見つけれるみたいに書かれてますが
解決手段が見つかったのでこれ以上考えても仕方ありません。
0168デフォルトの名無しさん2010/01/15(金) 12:08:09
interfaceでメンバ変数作ると、static finalだからinterfaceですぐ代入しないといけませんよね?
つまり、実装クラスでinterfaceで定義されたメンバ変数に代入する事は出来ませんよね?
あと、interfaceでstaticなメソッドを宣言(staticなアクセサを作りたい)する事は出来ませんよね?

要するに、interfaceにstaticなフィールドを作りたいんだけど、
値は実装クラスによって異なる。(一度定義すれば変わらない)
interfaceにstaticなアクセサか実装クラスから代入出来るstaticなフィールドを宣言したい。

これが可能なのかどうか、代わりにどんな手段があるのか教えて下さい。
0169デフォルトの名無しさん2010/01/15(金) 12:09:15
>>167
だから、findを使えと
01701682010/01/15(金) 12:12:07
追加で状況説明。

絶対に変わることの無い定数が各実装クラス全てにあって、
定数だからstaticなアクセサ(あるいはフィールド直)で参照したいんですが、
同時に各実装クラスにあるんだからinterfaceにまとめたいんです。
staticにしなければ可能ですが、その定数を取得するためだけに実体化はめんどくさい。
0171sage2010/01/15(金) 12:13:22
>>156
例えば、createBufferStrategy(3)とか、
createBufferStrategy()の引数を変更してみては?

それにカスタムPaintをテストしたいだけなら、
Paintのテスト自体には不要なBufferStrategy等の
余計な処理をしないで、paint系メソッドをオーバーライドした
JComponentを使用してみては?

paint系メソッドをオーバーライドしたJComponentで
同等のコードを試したら、さくさく動きましたよ。
0172デフォルトの名無しさん2010/01/15(金) 12:25:24
>>168
もうちょっと詳しく。
interface A {}
class B implements A { static final int X = 10; }
class C implements A { static final int X = 20; }
のようにAの各実装クラスごとに値の異なる定数があって、この2つのXをなんとかしてAにまとめて
class D {
public static void main(String[] args) {
System.out.println(A.X);
}
}
のようにstaticにアクセスしたいってこと?
01731682010/01/15(金) 12:31:10
>>172
YES!

今試してるんですが、interfaceで定義したstatic変数は、
実装クラスの同名static変数と同一で、
片方の値を変えればもう片方も変わります。
staticだから当然ですが。

実装クラス毎に異なる値で、でも全ての実装クラスが同じ名前でアクセス出来るstatic変数を持ちたい。
interfaceにまとめないのなら話は簡単ですが、
まとめれないとなると、interface型で実体化して参照したコードでそのstatic変数は使えない事になります。

ちなみに出来ればアクセサを介したい。
0174デフォルトの名無しさん2010/01/15(金) 12:32:18
質問です。
今、ミニゲーム集のタイトル画面のようなものを作成しているのですがゲームの選択のところで悩んでいます。
「タイトル画面内のゲーム名の書かれたボタンを押す」→「そのゲームを起動する」のような処理を行いたいのですが、どういった方法があるでしょうか?
理想としてはボタンのアクションにjarファイルの起動を関連付けられれば一番良いのですが・・・。

もし、これらの方法を知っている方がいらしたら教えていただけないでしょうか?
よろしくお願いします。
01751682010/01/15(金) 12:36:48
>>172
あ、1箇所訂正があります。
参照するコードは、
A.Xだけではなく、B.X 、 C.X もありえます。
0176デフォルトの名無しさん2010/01/15(金) 12:52:13
なんでstaticでアクセスしたいんだ?
0177デフォルトの名無しさん2010/01/15(金) 12:52:55
>>168
staticってことは、何も実体化してなくてもアクセスできるわけだけど
その場合、何が得られることを期待しているのでしょうか
つまり、何もnewせずにmainでいきなり
public static void main(String[] args) {
System.out.println(A.X);
}
ってやると、何が出力されることを期待しているのでしょうか
10? 20? それとももっと何か別のもの?
あるいは、何もnewしないうちは0で、BかCをnewした時点で値が確定してほしいとか?
0178デフォルトの名無しさん2010/01/15(金) 12:54:24
static finalなフィールドって実装クラスで上書きできねんだっけ?
0179デフォルトの名無しさん2010/01/15(金) 13:06:56
オブジェクト型ならfinalって参照先の固定でしょ?
初期値がnullなら一回だけnewやらを許可しないんだっけ?
今試せないから知らないけど。

プリミティブ型なら無理そうだけど。
01801682010/01/15(金) 13:10:03
>>177
class B,Cでstatic finalな変数Xをそれぞれ定義します。
class B,Cをインスタンス化して参照するクラスがあります。
class Aを期待して参照するメソッド(以下RefAメソッド)もあります。

RefAに対しては、RefAの該当メソッドを利用するクラスが、
BとCどちらのオブジェクトを渡すか選べる事になります。

もしmain()からいきなり呼ぶとすれば、
B.XかC.Xになります。(mainは他からメソッドとして呼び出されないため)
このときB.XとC.Xは同時に利用する可能性がありますが、
異なる値を設定出来ない問題が発生します。

同じ名前で実装クラス毎に異なる値を持ちたいと言う事です。
そうすれば、BでもCでもどちらでも渡せるメソッドを書く事が出来ます。
そういう値をstaticにする事は可能なのかな、ということです。

現状のアイデアとしては、
Aにはstaticなフィールドを作らずに非staticなアクセサだけを定義しておいて、
B,Cにstaticなフィールドを定義し、同時に非staticなアクセサも実装する事です。
こうすればA型を期待したコードもかけるし、
B,Cに対してstaticな参照も出来ます。

と言うかこれが答えで良いかもしれません。
0181デフォルトの名無しさん2010/01/15(金) 13:27:55
public interface I {

public static final int a = 100;
}

public class C1 implements I {

public static final int a = 200;

}

public class C2 implements I {

public static void main(String[] args) {
System.out.println(C1.a);
System.out.println(C2.a);
}
}

実行結果
200
100

これでええんかな?
0182デフォルトの名無しさん2010/01/15(金) 13:33:45
interfaceのstaticフィールドとかenumが無かった頃の遺産でしょ
0183デフォルトの名無しさん2010/01/15(金) 13:42:21
>>181
同じ a でも C1 経由でアクセスするとオーバーライドされた値を参照する。
01841682010/01/15(金) 14:03:42
>>181
それは実行結果が両方200になるはずです
0185デフォルトの名無しさん2010/01/15(金) 14:04:29
>>184
なんないよ、試してごらん
01861682010/01/15(金) 14:11:11
すみません勘違いしてました、異なる値持てますね。
interfaceにだけstaticな変数が宣言されてると
実装クラスもinterfaceのを指すけど、
実装クラスで改めて宣言されると個別の値をもてるようです。
0187デフォルトの名無しさん2010/01/15(金) 14:41:36
static final な 配列ってどうすれば内部データ変更されずにすみますか?
ArrayListとかHashMapと同じで中身は変えられてしまうんですよね。
0188デフォルトの名無しさん2010/01/15(金) 15:15:49
ArrayList<StaticFieldClass>
でいいんじゃないの?
class StaticFieldClass{
static final int a = 1;
}
とかやっとけば
0189デフォルトの名無しさん2010/01/15(金) 15:22:34
とかやっとけば
0190デフォルトの名無しさん2010/01/15(金) 15:28:45
>>187
配列の中身を直接見せないようにし、必ずgetXxxメソッド経由でアクセスさせる
0191デフォルトの名無しさん2010/01/15(金) 15:36:49
>>188でFAだろ
>>190とか要素を直接見せない手段を示して無いし
0192デフォルトの名無しさん2010/01/15(金) 15:40:04
示して無いね
0193デフォルトの名無しさん2010/01/15(金) 15:57:41
finalとかの言語的な規制が働かないって話なのに
参照する側に性善説期待して終了か
0194デフォルトの名無しさん2010/01/15(金) 16:05:13
188をどうやって使うのかがわからん…
0195デフォルトの名無しさん2010/01/15(金) 16:07:47
swingのJTableでテーブルつくたんだけど、
そのテーブルの上にテキストフィールドって作れますか?
0196デフォルトの名無しさん2010/01/15(金) 16:07:50
>>194 俺もわからん・・・
0197デフォルトの名無しさん2010/01/15(金) 16:10:08
class StaticFieldClass{
final int a = 1;
}
こうだなやるなら
0198デフォルトの名無しさん2010/01/15(金) 16:20:29
>>197
Integerで良いんじゃね?
0199デフォルトの名無しさん2010/01/15(金) 16:27:02
回答者が無能すぎ…
0200デフォルトの名無しさん2010/01/15(金) 16:28:09
>>199が良回答をすればいいと思うよ
0201デフォルトの名無しさん2010/01/15(金) 16:30:26
無能なりにがんばって回答してみるスレでもあると思う
0202デフォルトの名無しさん2010/01/15(金) 16:33:11
配列なら
int[] getIntArray(){
return (int[])array.clone();
}

List なら
List<Data> getDataList(){
  return Collections.unmodifiableList(list);
}

バイト配列なら read only な ByteBuffer のみを見せるのでも良い。
0203デフォルトの名無しさん2010/01/15(金) 17:45:47
>>195
テーブルのセルに好きな部品を載せれるからそこにJTextFieldでも使えば良い
TableCellEditorとTableCellRendererについて要調査
0204デフォルトの名無しさん2010/01/15(金) 23:24:27
他のクラスからrepaintを呼び出すにはどうすればいいのでしょうか?
0205デフォルトの名無しさん2010/01/15(金) 23:48:01
へ?repaintはpublicメソッドでしょ?普通に呼べばいいと思うんだが。。。
0206デフォルトの名無しさん2010/01/16(土) 00:28:36
普通に、、、呼べば、、、いいと、、、思うんだが。。。
0207デフォルトの名無しさん2010/01/16(土) 02:22:50
>>164
ありがとうございます。PaintでなくColorを継承したときにcreateContext呼ばれずにコンストラクタで指定した色が
描画に使われてたので、もしやと思ってましたが、やはりそうでしたか。実装で回避してみたいと思います。
>>171
トリプルバッファにすると速いですね!なんででしょう?でもメモリ(ビデオメモリ?)を食いそうですね。
今作ってるのはベクタ画像編集ソフトみたいなやつなんで、速度も正確さも重要なんです。
0208デフォルトの名無しさん2010/01/16(土) 07:44:26
>>205
JDialogでダイアログを出して、別ソースで用意したパネルをのせています。
ダイアログ(パネル)上のボタン等で元のフレームのrepaintを行いたいのですが
「staticでないメソッドrepaint()をstaticコンテキストから参照することはできません」と出てしまいます。
0209デフォルトの名無しさん2010/01/16(土) 08:12:37
repaintを呼び出したいクラスのインスタンスが必要。
0210デフォルトの名無しさん2010/01/16(土) 10:15:20
アホばっか
0211デフォルトの名無しさん2010/01/16(土) 14:43:58
2ちゃんねるのdatをパースしたいのですが、高速にパースできる方法はありませんか?
0212デフォルトの名無しさん2010/01/16(土) 14:47:38
速いマシン使う。
0213デフォルトの名無しさん2010/01/16(土) 14:51:59
ワープする
0214デフォルトの名無しさん2010/01/16(土) 15:11:58
Listクラスを使って表を作りたいのですが教えて頂けませんか?
0215デフォルトの名無しさん2010/01/16(土) 15:26:55
>>214
tablemodelを拡張する
0216デフォルトの名無しさん2010/01/16(土) 15:28:05
ただ妙なこだわりで動作保障犠牲にするのはどうかとは思う
0217デフォルトの名無しさん2010/01/16(土) 15:28:24
だな
0218デフォルトの名無しさん2010/01/16(土) 15:29:24
当然速いマシン
0219デフォルトの名無しさん2010/01/16(土) 15:36:08
ミシンはダメだからなw
0220デフォルトの名無しさん2010/01/16(土) 15:36:17
>>211
Velocity
0221デフォルトの名無しさん2010/01/16(土) 15:37:24
>>220
kwsk
02222112010/01/16(土) 15:41:57
>>220
velocityは逆に遅くなる気がしますが
しかも、テンプレートエンジンはかなり面倒くさくないですか?

>>221
氏ねカス
0223デフォルトの名無しさん2010/01/16(土) 15:44:19
教えない
0224デフォルトの名無しさん2010/01/16(土) 15:52:31
寒いお(´・ω・`)
0225デフォルトの名無しさん2010/01/16(土) 16:11:01
Apache Commons IO
0226デフォルトの名無しさん2010/01/16(土) 16:20:28
>>210
0227デフォルトの名無しさん2010/01/16(土) 16:46:06
>>211
java.util.regexじゃだめなの?

CharSequenceでなくReaderにマッチできる正規表現ライブラリとか
どこかになかったっけなぁ…
0228デフォルトの名無しさん2010/01/16(土) 17:33:37
java.util.Scannerは?
0229デフォルトの名無しさん2010/01/16(土) 19:19:34
Effective Java まったくわからなくてわろた
0230デフォルトの名無しさん2010/01/16(土) 19:24:28
わろたわろた
0231デフォルトの名無しさん2010/01/16(土) 21:04:11
まだやるべき事があるってことがわかるのはいいこと
0232デフォルトの名無しさん2010/01/16(土) 21:10:12
中には全く分からない質問者も居ますからねえ
0233デフォルトの名無しさん2010/01/16(土) 21:30:58
へえ
0234デフォルトの名無しさん2010/01/16(土) 22:26:56
ぬおぉぉぉぉぉぉぉぉ!
0235デフォルトの名無しさん2010/01/16(土) 22:33:41
>>227
Jakartaのregexp?
0236デフォルトの名無しさん2010/01/16(土) 22:57:40
datのパースくらい自分でやれよと。
<>が来たらStringBuilderをStringにして、配列に突っ込むだけじゃん。
問題にしてるのはHTML文字参照のパースの方じゃないのか?
あれはトランプのスートのマークとか混じるから無理なんじゃね?
0237デフォルトの名無しさん2010/01/16(土) 22:59:39
( ̄ー ̄ )
0238デフォルトの名無しさん2010/01/16(土) 23:28:18
下の画像みたいな座標がある地図を作りたいのですが、
こういう方眼紙みたいなのは何を使えば表示できますか?
http://gazo6.com/0up1/src/gazo65097.png
0239デフォルトの名無しさん2010/01/16(土) 23:33:21
それくらい自分で描けよ。
0240デフォルトの名無しさん2010/01/16(土) 23:35:43
>>238
普通にGraphicsを作って、drawLine。
もしくは方眼紙イメージ作っておいて、drawImage。
0241デフォルトの名無しさん2010/01/16(土) 23:48:39
>>240
汎用性あるからクラス化しても良いかもね
02422402010/01/17(日) 00:18:01
すみません言葉が足りませんでした。
正確には、画像のように移動した軌跡の部分に色を付けたりしたいのですが、
マスの座標を指定して色を変えたりするにはどうすれば良いでしょうか?
02432382010/01/17(日) 00:18:42
↑>>240じゃなくて>>238です
0244デフォルトの名無しさん2010/01/17(日) 00:26:15
g.setColor(Color.RED);
g.fillRect(x * width, y * height, width, height);
02452382010/01/17(日) 00:38:42
>>244
ありがとうございます。
0246デフォルトの名無しさん2010/01/17(日) 00:44:03
ここアホしかいねぇ…さすがJava
0247デフォルトの名無しさん2010/01/17(日) 00:58:06
α値つき画像をクリップボードからJavaアプリケーションに貼り付けたいんですが、
Javaアプリケーション同士のやり取りでは普通にDataFlavor.imageFlavorを指定してα値も保持できますが
Java⇔その他のアプリケーションだとαが無視されます。やりようはないんでしょうか?
0248デフォルトの名無しさん2010/01/17(日) 01:10:25
>>246
あれ?
shape知らない?
0249デフォルトの名無しさん2010/01/17(日) 05:11:40
>>247
C#(.NET)で同じ問題に出くわして調べたけど、
Windowsクリップボードの仕様らしく(Linuxとかは未調査)、
解決策が見つからなかった。
0250デフォルトの名無しさん2010/01/17(日) 05:36:32
Photoshop とかα値付きでペーストできるからやりようはあるだろ。
0251デフォルトの名無しさん2010/01/17(日) 06:10:54
>>250
それって、Photoshopのデータをどのアプリにペーストするの?
0252デフォルトの名無しさん2010/01/17(日) 08:52:14
>>250
いや、おれは使ったことが無い。
■ このスレッドは過去ログ倉庫に格納されています