TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
【マウスだけで】Scratch【プログラミング】その1
(´・ω・`)人間はプログラムやがな
HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net
Java Web Application Framework総合 ver2
【PHP】下らねぇ質問はここに 9
Git 13
【コボル】COBOL不要論【ただのDSLだよね?】
プログラミングのお題スレ Part14
MFC vs .NET
C言語なら俺に聞け 151

☆★Java質問・相談スレッド182★★


1 :2018/11/19 〜 最終レス :2020/04/19

プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.sc/hp/
Webプログラミング http://pc11.2ch.sc/php/
をご利用下さい。

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

質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。

前スレ
★★Java質問・相談スレッド181★★
https://mevius.2ch.sc/test/read.cgi/tech/1518252580/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured

2 :
カキコ

3 :
Threadが完了しているかはどうやって調べるんですか?
isInterrupted()とisAliveはあスレッド終了時falseでした。

4 :
>>3
http://pppurple.hatenablog.com/entry/2017/05/12/234030

5 :
どうやらisAlive()はstart()前はfalse,start()後実行中はtrue,完了したらfalseのようです。
start前と完了後を区別するにはgetStateが良いようですね

6 :
スレッド1がメンバー変数Aを更新、そのあとメンバー変数Bを更新
スレッド2から見て、Bの更新が見えるのにAが見えない、ということはありえますか?

7 :
マルチスレッドは前後関係が決まらないから、確実なものはない。
待ち合わせでもしていれば、できるかも

デッドロックもあるし、10年以上開発していないなら無理。
資源が共有されるから、素人がプログラミングできるはずがない!

8 :
スレッドは最初から並列、同期を考えてプログラムするだろう。初心者には無理

9 :
>>6
その変数Aが volatile でなければ読む側のスレッドで動いているコードによっては起こり得ると思う。
(もっと他順に更新順序と読む順序の問題でそうなる事もあるが)。

かといって volatile にしただけで安心してはいけない。更にロック掛けた上で読み出した方が良い。
Java なら synchronized 使うとかだな。

10 :
volatileはそのAとBの間に制約があるなら使えないし、A、Bが自身の制約になるときもか。あと他の変数の不変条件になってるなら使えないよ。
ていうかvolatile変数の変更が外から見えないならロックいらんだろ。

11 :
何を言ってるのかわからん。

12 :
>>10
制約って?具体的にどういう状態?

privateにして外からgetするメソッドを呼ぶだけのいわゆるプロパティにしてしまえばマシにはなるかもな。
しかしそれだけだとA,Bを個別に読んだら一方しか更新されてない事は起こりうるのでは?
更新する側がロックせずに一つづつ更新している最中に一つづつ読んでしまえば起こりうるよね?

13 :
1スレッド書き込み、マルチスレッド読み込みの場合、
並行処理による問題が発生する可能性はありますか?
例えばHashMapにアクセスするとして。

14 :
1. スレッドA には、Xが存在しない

2. ここで書き込みスレッドが、X を書き込むと、

3. スレッドB には、Xが存在する

15 :
>>13
あります。

16 :
ありまぁ〜す

17 :
>>13
HashMap のドキュメントに Collections.synchronizedMap() を使う方法が書いてある。
それ使った方が自分でゴチャゴチャ考えるより楽だ。

18 :
排他ロックが無駄だからいちいち同期するなよ。
concurrent collectionつかえ。その用途ならConcurrentHashMapがあるだろ。

19 :
ラムダの中でローカル変数のオブジェクトを参照している場合、
そのメソッドを抜けた後そのローカル変数を参照する事は安全ですか?

//in some method
Obj local = new Obj();
GuiPart gui = new GuiPart((event)->local.method(event));
return;//この後ラムダがイベント処理で呼ばれた場合、localは参照可能か?

20 :
>>19
安全に参照可能だよ
自動生成されたクラスのインスタンスフィールドに保持される

21 :
逆に気を付けなければならないのは、
非同期処理などで、外側のオブジェクト(エンクロージングインスタンス)がいつまでも破棄されなくなる可能性があること。

22 :
匿名クラス(無名クラス)の型について質問です。
ArrayListに格納した後、get()で取り出して使いたいのですが
型名が分からずキャストできません。
どなたか回答をお願いします。

23 :
>>22
List にキャストすればいいのでは?

24 :
>>22
クラスを定義するときに継承してるはずなので
instanceofで継承元の型かチェックして
型のクラスにキャストすればいいのじゃないかな

継承先のクラスへのキャストはわからん

25 :
>>23
>>24
ありがとうございました。

ちょっと俺の説明も分かりにくかったと思いますので、
コードを下に書きますね。
List<Object> al = new ArrayList<>();
al.add(new Object {
__int anonymousField = 5;
__void anonymousMethod() {
____System.out.println(anonymousField);
__}
});
al.get(0).anonymousMethod();

こう書くと、匿名クラスはObject型にキャストされているので、
anonymousMethod()を呼べずコンパイルエラーになります。
そこで最終行でキャスト演算子を使おうと思ったのですが、
匿名クラスの型が分からずキャスト出来なかったんです…。

26 :
言語の限界に挑む系のチャレンジかなんかしてるのかそれ。

27 :
interface Hoge {
__void anonymousMethod();
}
...
List<Object> al = new ArrayList<>();
al.add(new Hoge {
__int anonymousField = 5;
__void anonymousMethod() {
____System.out.println(anonymousField);
__}
});
((Hoge) al.get(0)).anonymousMethod();

普通はList<Hoge>として、下のキャストを要らないようにする分けだが。

28 :
他で呼ぶことを目的とするなら匿名クラスにしてはだめでは?

29 :
>>26
そんな大層なことではありませんが…。

>>27
>>28
ありがとうございました。

では匿名クラス内のメンバ(特にメソッド)の存在意義って何なのでしょうか?

30 :
>>29
そのクラス内で処理を分けて起きたい時に作る。
呼び出されるメソッド一つに全て書くとわかりづらくなる時とかね。

31 :
渡した先で処理させるのにitemを厳密にしなくてすむ

>>25の例で言うなら自分で作ったcollectionクラスにanonymousMethodをなんか処理する機能をつけてやれば
渡すitemはanonymousMethodを持ってれば匿名でも実体があっても良くなる

32 :
>>30
>>31
ありがとうございました。

33 :
総称型の派生的な定義を一元化したいです。
class ClassA<T1>{}
とあるとき、T2 extends T1とか、T3 extends ClassB<T1>とかを定義したい。
しかしT1の横に並べるとClassAの子クラスにおいて指定する必要が生じます。
ClassA<T1, T2 extends T1> こうしたくない。
ClassAChild extends ClassA<T1Concrete, T2Concrete>みたいにT2Concreteの指定が生じるから。
しかしクラスに定義しないとメソッド毎に総称型の定義が必要になります。
T1だけを指定するという状況を保ったまま、T1に依存した他の派生的な総称型をクラス内で定義したい。
これは可能ですか?

34 :
>>33
こういうこと?
class A<T> {
 class B<U extends T> {
 }
}

35 :
class ClassA<T1>{
 public <T2 extends T1> T2 method1();
 public <T2 extends T1> T2 method2();
 public <T2 extends T1> T2 method3();
}

このようにメソッド毎に総称型を定義するのが嫌なので、クラスのところで指定したいのですが、
そうすると子クラスでT1から自動的に決定するものをわざわざ指定しないといけません。
class ClassA<T1, T2 extends T1>{//子クラスでT2を指定する必要が発生
 public T2 method1();
 public T2 method2();
 public T2 method3();
}

36 :
別の方法で解決できそうです。ありがとうございました

37 :
>>36
どんな方法ですか?

38 :
以下のコードでifの中が実行されない理由がわかりません
条件がtrueなので実行されると思うのですがなんででしょうか
class Sample{
static double total;

int a = 2, b= 3;

public static void main (String[] args){

double x, a, b;

if (total == 0){

a = 3;

b = 4;

x = 0.5;

}
total = x * a * b;
System.out.println(total);
}
}

39 :
>>38
なぜtrueだと思うのか説明しなさい

40 :
>>39
System.out.print(total == 0)がtrueだったからです

41 :
新たにビルドしなおしたものを実行していたつもりがエラーになってて古いやつをずっと実行し続けてた的なやつだな。

とりあえずこれ10回詠唱しとけ
「コンパイラの出力は御経じゃない」

42 :
>>41
内容はJavaSE8Silverの問題集に出ていたものです
解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり、
そのことは実際にideoneとかで実行し理解してるのですが
なぜtrueにならないのかがわからないということです

43 :
>>42
えっと、実行時には条件はtrueになるよ

コンパイル時にはtrueになることがわからんので
コンパイラが初期化されないかもってエラー投げるだけっすよ

44 :
↓これでもエラーになるんで変数が条件式にあるとダメみたいね、リテラルならおk

public static void main(String[] args) {
 boolean a = true;
 int b;

 if (a) {
  b = 2;
 }

 System.out.println(b);
}

45 :
>>42
そもそもコンパイル通らなくね?
条件が true になるかどうか以前の問題
>解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり
これが本当なら説明がおかしいな
if文云々というより単に宣言された x, a, b が初期化されてないからコンパイルエラーになる
if文の中身がtrueになって{}の中が実行されて値が初期化されるかどうかは保証されない

46 :
JavaSilverはコンパイル通らないコードについても出題されるからね

初期化によるエラー云々はコンパイラーが吐くエラーメッセージの事を指していると思われ

47 :
>>43-44
ありがとうございます!助かりました
>>45
本ではif文の条件に合致せず初期化せずにtotal=x*a*bを計算するのでエラーになる
って書いてたのですが…解説がおかしいかどうかはjava初心者なのでよくわかりません

48 :
コンパイラとしては実行されるまで if の条件が成立するかどうかわからないため、成立する場合と成立しない場合の両方を考慮しているだけではないかな?
で、今回のプログラムの場合は条件が成立しないと初期化されない変数が出てくるためコンパイルエラーになる。

49 :
HDDバースト事件知ってますか?
https://wikiwiki.jp/vipdepso2/09.04%E8%BF%BD%E6%86%B6%E3%81%AEHDD%E3%83%90%E3%83%BC%E3%82%B9%E3%83%88%E4%BA%8B%E4%BB%B6

この手の、ファイル削除系の処理で一歩間違えれば大惨事、というのを防ぐ良い方法はありますか?

50 :
なんだ物理的にバーストした話じゃないのか

51 :
>>49
健常者に開発させる

52 :
質問です
柴田望洋Javaアルゴリズム本の演習の模範解答に

( (n+1) * (n/2) + (n%2 == 1 ? (n+1)/2 : 0) )

というコードがありました。これを数学っぽく自分が翻訳すると

(1)n/2の余りが1のとき
(n+1)*(n/2) + (n+1)/2
(2)n/2の余りが1でないとき
(n+1)*(n/2) + 0

だと思ったのですが、実際にn=3やn=7を代入して実行してみると(1)と同じ答えになりません。
1からnまでの公差1の等差数列の和ということで手作業で計算してみても実際に(1)はどこかおかしいみたいです。

どなたか(1)の何が変なのか教えてください。

53 :
>>52
int型だと例えばn=7のときにn/2は3になるってだけでは
そのせいで手計算とズレるんでしょ

54 :
>>52
整数同士の割り算は切り捨て

55 :
>>53-54
ありがとうございます。それで解答だと場合分けしてたんですね
場合分けしたくない場合はdoubleで計算して小数点以下が邪魔に感じられたら計算終えてからintにキャストすればいいんでしょうか。遅くなるのかな

56 :
>>55
doubleからintにキャストするときも0.9999は0に切り捨てられてしまうから、Math.roundを使ったほうがいいよ。
計算途中で絶対に小数にならない保証があるなら、おそらく52bitまでならそのままdoubleを整数にキャストできるけども

57 :
>>56
なるほどなるほど。ありがとうございます。

58 :
syncronizedMapとConcurrentHashMapってConcurrentHashMapの方がいいのかな

59 :
せやな

60 :
マルチプラットフォームなデスクトップアプリを作るのにJavaを愛用していましたがJavaFXはオプションになるしそもそもJDK/JREもいつまで使えるかわからないので乗換先の言語を探しています。
- GUIアプリを標準で作れる
- マルチプラットフォーム
- できればコンパイラ言語
- 学習コストが低い
でおすすめは何でしょうか?

ご教示方よろしくお願いいたします。

61 :
JavaからならC#だけど
どこまでやるかだな
Macを入れるか入れないかとか
何系作ってるの?

62 :
c#だとGUIのコード共通化厳しいのでは。

Win+Macなら今さらだけどAdobeAirとか。証券会社のアプリとかで生き残っている。

LinuxもGUI共通化必要なら、現実的なのはjavaくらいしか知らない。

63 :
条件がGUI共通化だけならElectronとかWeb系かな
PWAはどうなってるか知らんけどその内流行るんだろう

64 :
これがb=aのとこでコンパイルエラーになる理由は何ですか?
AはTestIを継承したもの、TestClassはTestIを実装している。
総称型の限定において継承と実装は区別されてるんですか?
public static interface TestI {}
public static class TestClass implements TestI {}
private <A extends TestI> void f(TestClass a) {
A b = a;
}

65 :
>>64
TestI <- A
TestI <- TestClass
でTestClassをAに変換できないって出てるんでしょ

AはTestIを実装する任意のクラスだから
TestClassから変換できないのは当然のような

66 :
あーそうか
わかりました。ありがとう

67 :
interfaceでthisの型をメソッドの引数に使う方法はありますか?総称型を使わずに
これができないとequals的な自クラスの他オブジェクトを受け取るタイプのインターフェースのために
総称型を指定しなきゃいけないので面倒です

public interface TestI{
void method(ThisClass o);
}

68 :
面倒も何もそれが総称型の意義です
要はComparableみたいなもんでしょ

69 :
public interface TestI<T extends ThisClass >{
void method(T o);
}

70 :
別に面倒でも何でもないよ。
methodの引数でThisClassの子クラスを受け取ったとしても、
intanceofとかする必要は全くない。

71 :
void method(Testl t)じゃあかんの?

72 :
>>71
それ毎回キャストが要るやん

73 :
でも"thisの型"をデフォルトで使えても良いと思いませんか?
オブジェクトが使用される時常に明らかになっているはずです。
つまり記述を省略できても良い

74 :
equals()については、互換性維持。
できないものはできない。
自分で定義するものについては、ジェネリクス使えばよい。

75 :
public interface TestI<T extends TestI>{
void method(T o);
}

こう書くと警告でます。extends TestIのところで
TestI<?>と書くんですか?

76 :
待って、それを知らずに面倒とか言ってたの
Testl<T>でいいんだよ……

77 :
それでも出来るのは最初から分かってるんですが、
意味的にTestIを実装したものしかそこに書かないでしょう?
だからその前提を記述しておきたいという話です。

78 :
あと面倒と言ってるのはそのインターフェースを実装しているクラス、
さらにそのクラスを継承したクラス、さらにそれを継承したクラスと
記述箇所が一斉に増えるからです。
抽象クラスが実装しているインターフェースにこういう要件が発生すると実際かなり面倒であることは想像できるはずです。

79 :
public abstract class AbClass<T extends AbClass> implements TestI<T>{
}

public abstract class AbClass2<T extends AbClass2> extends AbClass<T>{}

このように次々と続いていくことになります。
そしてこれらすべてで警告が出ます。

80 :
上にもありましたがComparable的なインターフェースという事になりますが
このようなインターフェースを継承ツリーの上の方で実装すると問題になります。
通常のインターフェースや、通常の総称型インターフェースでは問題無いんですが、
このようなインターフェースはたびたび継承ツリーの各クラスでそのクラスについての実装を記述する事になります。
だから、thisの型が予約語として扱えると非常に便利だろうと。

81 :
再帰ジェネリクスの話ししてる?
違ったらごめん
interface TestI<T extends TestI<T>>{
T method(T o);
}

abstract class AbClass<T extends AbClass<T>> implements TestI<T>{ }
abstract class AbClass2<T extends AbClass2<T>> extends AbClass<T>{}
abstract class AbClass3<T extends AbClass3<T>> extends AbClass2<T>{}

82 :
>>81
できました。

83 :
>>82
良かったです

84 :
AbClass<T extends AbClass<T>>
こういうのってどういうのを想定してるの?
シングルトンではないenumみたいなもの?

85 :
継承ツリーの各クラスでTが連鎖的に定義されるような状況があるとき
extends AbClass1<T>の意味は、末端の具象クラスで総称型に指定されたTが
一番上の抽象クラスまで連鎖的に指定されている事を要求しているような意味がある。

86 :
AbClass<T extends AbClass<T>>これの
extends AbClass<T>この部分の意味は、って話

87 :
>>84
抽象クラスで定義したメソッドで自分の未知のサブクラス返すときとか

88 :
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11204388166?fr=ios_other

Javaプログラム(MIDI)TransmitterとReceiverと標準Synthesizer

下記のプログラムで音がなります

Sequencer sequencer = MidiSystem.getSequencer();
File myMidiFile = new File("d:/tw008.m
id");

Sequence mySeq = MidiSystem.getSequence(myMidiFile);
sequencer.setSequence(mySeq);
sequencer.open();

System.out.println("start");
sequencer.start();

Thread.sleep(60000);

ところが、SynthesizerをCloseしても、Receiverを指定しても、
標準のMIDI音源がなりつづけています。この音をけして、
自作アプリのルーチンだけにMIDIを流す手法をご存知の方いらっしゃいますか?
Windows10+JDK1.8を使用しています。

89 :
解決しました

90 :
解決した方法ぐらい書けよクソが

91 :
getSequencer(true)
または
getSequencer(false)

オブジェクト思考じゃないシンセサイザーが
くっつくかどうか決まる

https://osdn.net/projects/midicrossport/howto/usage



https://osdn.net/projects/midicrossport/scm/svn/blobs/head/V-0.2%20AddPlayer/src/net/sourceforge/midicrossport/swing/MXPortMIDIPlayer.java

で早速使いました

92 :
javaは隠してるメソッド多いよね
今回のは過去のソースの動作などの
整合性のためだと思うけどさ

肝に銘じて作りこんでいきます

4時間悩んでjavadocみたら5秒で解決したわ

93 :
>>92
そういうのは非推奨になってないか?

94 :
交差型キャストの使い道、ある?

95 :
ついでにListの要素をEnumしか取れなくしたEnumListみたいなのある?(ググり済み)

96 :
>>95
List<Enum>じゃあかんのか?

97 :
>>96
EnumSetとかEnumMapみたいな省メモリな実装があったらいいなーと思って

98 :
>>97
ないよ♪

99 :
重複がないからこそ連番の配列として扱えてるのに、重複が許されるリストじゃやりようがない

100 :
べき乗の計算式を作りたいのですがうまくいきません

(例)
a=5;
a=a^2;

上記の例のようにしても、結果が25になりません
Javaではべき乗計算はサポートしていないのでしょうか?


100〜のスレッドの続きを読む
OpenGL 2.0 専用スレ
文字コード総合スレ Part12
表計算ソフトは人類の生産性を大きく下げている
Java入門・初心者質問スレ Part.10
【.NET】WCF〜Windows通信基盤技術【通信】
おまいらのプログラムの勉強の仕方を教えろください
Excel VBA 質問スレ Part56
サウンドプログラミング6
ふらっと C#,C♯,C#(初心者用) Part139
自動巡回ソフトというものを作ってみたい
--------------------
【今日は】セントラル六甲道【風呂だけ】
【MHFZ】ラヴィエンテ上手くなりたい奴ら集合【ID無し】
【オン会】メンヘラ同士酒飲もうぜ!191次会
【名探偵コナン】毛利蘭&信者アンチスレ22
鳩山由紀夫 麻生首相に庶民の気持ちは分からない
ハムスターの名前を考えるスレ
【茨城県】茗溪学園中学校・高等学校【Part4】
【韓国SBS】日本がフッ化水素の輸出を許可・・・「WTO紛争に備えた小細工か?」[11/18]
【朝鮮半島】 日本による韓国への輸出規制に、なぜか北も反発 [07/18]
ラビッツ&ラッツ
吉祥寺でうまいラーメンは?part46
駿河健康ランド part8
【地震】災害時に役立つラジオ 27台目【台風】
かまいたちの夜 総合199
レアのハンバーグをテーブル上で焼くスタイルに専門家が注意「重篤な食中毒を引き起こす可能性がある」
DEEP JEWELS (ときどき他団体女子) 5
【AFP】 韓国の新型ウイルス感染者数、中国以外では群を抜いて最多
ダブルバッファおさーんと遊ぼう!
任天堂っていつになったらソニーみたいに大人向けのゲームを作れるようになるの?
【アルペン】サウスフィールド part3【デポ】
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼