★★Java質問・相談スレッド181★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 http://pc11.2ch.net/hp/ Webプログラミング http://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)ttp://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド180★★ https://mevius.5ch.net/test/read.cgi/tech/1492780397/ 強度の強い暗号化は輸出制限あるから気を付けてね。 うっかりノートPCにセットしたまま他国へ持って行こうとするとバレた時に大変まずいことになるかも知れない。 jre1.8の最近のバージョンでデフォルトで強度無制限になったようです。 とはいえ、java8の仕様上、2048までしかサポートする必要は無いようです。 実装によってサポートしているかもしれません。 このようなコードがあった場合、tは生存しますか? tはどこからも参照されてないとします。 //in some method Thread t = new Thread(){...}; t.start(); return; >>699 試してみた https://paiza.io/projects/PxoO2-fLSd_KfpwF5B3prA 結果からわかることは ・メソッドを抜けてもスレッドが終了するわけではない ・スレッドが終了しないならばプロセスは終了しない ・ローカル変数がなくてもスレッドを取得できる 作成したスレッドのオブジェクトはどこかに保持されるみたいね tは生存します、が答えっす threadは、main thread同様garbage collectionのrootとして扱われるそうなので、生存しまする Eclipseとかいう汚物にJavaFXを入れたく思いマーケットプレースでjavafxで出てくるe(fx)clipseをインストールしようとしたところ長時間待たされた挙句にエラーが出ました どうすればいいでしょうか? >>704 JavaFXは廃止されたから使っちゃダメ 厳密には廃止ではなく分離とされてる。 あとJava8が2020年までサポートだから、2020年までは1.8系のjreがあれば使える。 そもそもJavaの未来はどうなるのか。JREが有償化される。 OpenJDKはインストーラや自動アップデータが提供されるのか。 JavaFXは単体のライブラリとして独立できるはずだが、誰かがやるのかどうか。 現状だと、何やら面倒なインストール手順が必要なようで、 デスクトップアプリに使われるであろうJavaFXにとって致命的なはず。 mavenとかを使ってアプリに気軽に同梱できるものになればいいのだが。 JavaFX will continue to be supported in the future by the company Gluon as a downloadable module in addition to the JDK. このスレではJavaFXをオヌヌメします JavaFXをオヌヌメしないのはoracleのコウサクイン JavaでデスクトップのGUI環境自体どうなんだ? downloadable moduleってなんだろうな。 そもそも後方互換性を捨てて高速リリースとか言ってるのが怖くて仕方ない。 開発者が最新版に対応したって、エンドユーザーが最新版を持ってるか分からない。 どのバージョンに向けて作ればいいんだ? いやクロスプラットフォームGUIという概念は重要でしょ。 Java8+JavaFXは2022年までサポートされるってかいてあるな だからもう少し先の話ではあるし、人気のある環境だからそれまでに整備されるだろう。 AndroidでもJavaFX動くみたいだし、クロスプラットフォーム性という面で やはり一番優れてるよJavaは ちなみにJavaやKotlinのコードをネイティブコードにするコンパイラがあって iPhoneでもJavaやKotlinのソースコードで動かせるみたいだぞ ちょっと前までiPhone用のJVMもあったんだけどな https://www.oracle.com/technetwork/jp/java/eol-135779-ja.html Java8 個人ユーザーの公式アップデート終了日 2020-12 このときまでにOpenJDKやGluonのインストーラが登場していなければ困る。 そしてそれが自動アップデータを搭載していなければ。 ところが自動アップデータ搭載されてても、後方互換性を捨てたアップデートを勝手にされると困るw 困りまくりだ OpenJDKに自動アップデータが提供されたとする。 OpenJDKのアップデートがアプリのアップデートを先行する →勝手に互換性を捨てたアップデートが来てアプリが動かなくなる。 アプリを最新版に対応してリリースしてもアプリのアップデータは動かないw アプリのアップデートが先行する →エンドユーザーのOpenJDKが古くて動作しない だから、互換性を捨てて高速リリースとかいってるのはほとんど意図的なJava界隈への攻撃。 一番欲しいのは、Java8のサポート継続&自動アップデート継続&互換性の維持。 APIを変更するならdeprecatedの期間をある程度とってくれないと無理。 高速リリースがうれしい人が居るのか? .netと同じ道を歩んでるようにみえて microsoftの.netはMITライセンス OpenJDKのリンク例外つきGPLは十分だろ。 OpenJDKにおいて、互換性を考慮したアップデートが行われ、自動アップデータが提供されるか。 GPLだから誰でもそのプロジェクトをやれる。 >>720 の解決法はこうだ OpenJDKの次期バージョンで現在のアプリが問題を起こすかチェックする。 →問題があるならOpenJDKがアップデートされる前にアプリをアップデートしておく。 そのアプリの修正は、現在のOpenJDKと次のOpenJDK両方で動作する事を確認する。 もうJavaで書いたアプリがあるし、Javaに慣れてるから。 それに、.NETに移ったとして、同じ事が起こらない保証があるのか? 実は俺はこの問題に対する根本的解決策を知ってる。うまくいくかは知らないが それも含めて考えると、やはりJavaを続けようと思える。 リリース前でもビルドが公開されてるだろうと思ったけど。 プラットフォーム系でプレビューリリースとかアーリーアクセス的なものを提供して 予め対応してもらおうというアイデアは一般的なもので、オラクルがOpenJDKをサポートするなら たぶんやるだろう、というか既にやってると思うけど。 JDK 11 Early-Access Builds http://jdk.java.net/11/ 大前提の認識が間違ってるぞ。 Java11以降においては無償のスタンドアロンなJREは無くなるんだよ。 デスクトップ用途なら開発者自身がアプリにJavaランタイムを組み込んで配布することが推奨される。 そして、OpenJDKはエンドユーザーが自分で個人端末にインストールするようなことを想定したものではない。 開発者がシステムに元々入っているのOpenJDKに依存してよいのは、業務システムなどで 開発者が完全に実行環境のOpenJDKディストリビューションのバージョンや構成を制御できる場合のみだ。 https://docs.oracle.com/javase/jp/8/docs/technotes/guides/deploy/self-contained-packaging.html#A1307236 >自己完結型アプリケーション・パッケージは、プラットフォーム固有で、ビルドしたシステムと同じシステムにのみ作成できます。 各プラットフォーム向けにビルドしなきゃいけないようだ >自己完結型アプリケーションには、自動更新の組込みサポートがありません。 アプリのアップデータで簡単にアップデートできるなら問題ではない。 アプリへのJREの組み込み手段がサポートされて、 そこでJavaFXがサポートされるなら、問題無い気がする。 JavaFXはそこでサポートされなきゃ意味が無いし。 >Java SE 8は、デスクトップ展開を対象とした最後のJava SEリリースです(Java Web StartやスタンドアロンシステムJREなど)。 こういう文言もあるから、Java11以降、OpenJDKでJavaFXみたいな デスクトップ展開がサポートされるのかどうか。Java8最終版を組み込んで使い続けるか Gluonに期待するか。 初心者だけどJavaFXでFTPサーバーとやりとりして追加したり一覧表示してダウンロードしたりするwindows用アプリを作りたいんだ apache commons netというライブラリを使ってやろうと思うけどviewにファイルを入れるにはどうすれば良いんだろう? 入れた後はjavaからviewをインスタンス化してその中の変数の値(ファイルのパスかな?)を取り出してって感じでなんとかなりそうだけど... 本当に何も分からない状態で、何か良い勉強方法は無いかな? FTPサーバーについても素人に近いよ そういや今はJavaは標準のライブラリでFTP接続してアップロードとか楽にできるクラスあるのかな? ダウンロードだけはURLクラスでできるの知ってるが。 viewにファイルを入れるってなに? TableViewとかTreeViewクラスにアイテムを表示する方法ならチュートリアルあるでしょ ああ解読できたかも 要するにGUIにアプリから値を設定、ないし アプリからGUIに値を設定するにはってことでしょ? てかGUIってそういう使い方しかないし。 そんなのぐぐればいくらでも出てくるのでは。 https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/table-view.htm 訂正 人→GUI→アプリ アプリ→GUI→人 この流れがやりたいってことだとおもわれる >>739 そうそんな感じ 全然イメージ出来ん どうやって起動させるの? でも公式ドキュメント見やすそうだねありがとう Project Loomを急ぐんだ! はやく第一級継続を書かせるんだ。 どうか限定じゃありませんように イメージできんってもなあ・・・ GUI部品クラスが提供されてて、何らかの値の設定方法、取得方法があるだけじゃん。 StageやSceneクラスという、GUI全体を意味するクラスも提供されてる。 そこにGUI部品を積み上げてくだけだぞ。 起動って・・・IDEのプロジェクトアーキテクチャの選択でfx系選べば何もしなくても GUI立ち上がるでしょ >>743 webアプリならサーバー起動させてコントローラにある接続用のurlをブラウザに入れれば始めれるじゃん これはメイン関数なくても行けるんでしょ?起動ボタンあるの? 何かの障害持ちだと理解の過程が通常と違う 彼らにネットは不向きだと思う なんというか、Windowsならftpアプリなんかわざわざ作らんでもWebブラウザやエクスプローラでURL指定して開いちゃえばいいような気がするが・・・ あ、とにかく作ってみたいのか。 >>747 ピュアな ftp ならプロトコルも対して難しくもないからネットワークの練習にはちょうどいい gluonとopenjfxが両方javafx11ビルドしてるけどこれ同じバイナリだろうか? >>5 8のreplaceは正規表現を使ってて馬鹿みたいに遅いから気をつけろ >>749 JavaFXはもうJavaの一部ではないのでこのスレのスコープ外だよ 専用スレか公式フォーラムで聞きなさい >>750 それはreplaceFirst()だろ 調べてみた @since 1.5 replace(CharSequence target, CharSequence replacement) @since 1.4 replaceAll(String regex, String replacement) @since 1.4 replaceFirst(String regex, String replacement) replaceは正規表現使ってなかった 資格に関する質問ってしてもOK? Oracleの「Java SE 8 Silver」の試験勉強をしようと思うんだけど、参考書に迷ってる 4月からjavaを学習してる程度の人が「徹底攻略 Java SE 8 Silver 問題集」をやるのは難易度高い? 書いてて宣伝っぽい文章になったのはごめん 有料だから注意しろよ 無料で落とせるやつはちゃんとLAに「評価と開発以外の目的に使うな」と書かれてる そんな大事なことをダウンロードページに明記してなくてLA読まないと分からないようにしてるのは流石天下のオラクル様ですわ OpenJDK11があるじゃん。そのうちAdapt OpenJDK11もでるだろ。 だいたいダウンロードページにOTN開発者ライセンスに変わったって書いてあるし JavaでJson読ませるの、どのライブラリが使い勝手いい? なんかいろいろありすぎて困る >>762 JSR 374がjaxpに似せてるから学習コスト低いよ。 ttps://javaee.github.io/jsonp/ 質問です。 下記のコードで、 https://ideone.com/0RbRo7 出力が0と0の間で2行開いてしまっているのですが、これはなぜでしょうか? System.out.printlnをSystem.out.printにすると空白は出ないのですが…。 区切り文字を{},の3文字にしてsplitしたからでしょ。 >>765 >>766 >>767 返信ありがとうございました。 また質問させて頂くかもしれませんが、よろしければその時もまたお願いします。 http://acro-engineer.hatenablog.com/entry/2013/10/17/113216 >MyProtocolClientHandler extends ChannelInboundHandlerAdapter Inbound 受信時に使用される処理 Outbound 送信時に使用される処理 という理解なんだけど、クライアント側のInboundはレスポンスを受信するときに動くということ? でも送信時のコードが書かれてるようで、分からない。 NettyのInbound, Outboundとは? Inbound:中国人の観光客 Outbound:日本人の海外旅行 ああわかりました channelActiveは返信等を受け付けれるような状態になった時に呼び出されて、 それはinbound,outbound関係無いってことですね パイプラインのハンドラーというより、メッセージ送信の コントローラー的なものがそこに書かれてるということですね たまたまハンドラのイベントにそういう処理が書かれてる https://netty.io/4.0/api/io/netty/channel/ChannelDuplexHandler.html > intercept operations and also state updates この部分どういう意味ですか?intercept operationとは? DuplexHandlerはパイプライン上でどういう順序で実行されますか? 受信時と送信時で実行して欲しい順番が異なる場合どうすれば? bronzeの問題集やっててイライラしてきたんだけど、問題になるようなコードは基本的に書くなってことでいいんですよね? &&||の右側にインクリメント演算子書いたから場合によって評価されないとかif文の中身1行しかないからカッコ省略したら読みづらくなってるとか 問題として出されるくらいヒューマンエラーを産みかねないってことでOK? 読めるようになれってことじゃないの? >&&||の右側にインクリメント演算子書いたから場合によって評価されない 例えばこれは、 if(a != null && a.get()>1) こんな行があった時に2つ目の演算でNPE起きない事が保証されると分かれ、ということだろう 書くな、じゃないよ。こんなコードたくさんあるし、こう書かないと冗長になる >>775 演算子のほうはちゃんと意味考えて書けよってことですよね?って聞いたつもりだったんです、言葉足らずでした 評価されない場合使って簡潔に書くのはよくあることなんですかね 中身1文ブロックのカッコ省略のメリットがさっぱりわからないんですが見た目がすっきりするだけですかね……? どこ読んでもあえて推奨されてることがなくて、ブログのコメント欄とかはだいたいケンカになってるんでこれはあまり触れてはいけないアレなんでしょうか まあそれは簡単に言うと 開発時のソースコードはデバッグ出力の行があったりするんだけど リリース時はデバッグ出力の行を文字列置換で一掃したりする。で、もし if(...) debugLog(...); こういう行があったとして、debugLog(...);を置換で削除したら、エラーになる。 if(...){ debugLog(...); } これは置換しても大丈夫。 だから、括弧無しは処理部分を置換する事があるか、による 経験上置換するのはデバッグ系コードだけ 書き換えるつもりがない1行のはカッコ省略で書くと読みやすい、あとあと置換するdebugLog(…)とかは消したときに空のブロックになるように{}書いとく、ってことでしょうか? >>777 嘘をついてはいけない デバッグ出力を置換で消す場合は ";" に置き換えれば良いので {} の有無など関係ない >>779 それは気付いてなかったw じゃあ括弧無しのデメリットは特に思いつかない >>774-776 &&・||の右側に、副作用があったら危険! 副作用とは、何かの状態を変えること ぱっと見ただけでは、副作用が実行されるかされないのかが、わかりにくい。 右側に、副作用が無ければよいけど if-else 文なんかより可読性が低いから、誤解しやすい すべての言語で、言われている。 MISRA-C とか、C言語のルールでも、決められている 副作用があるかもしれないから、という理由なら条件分岐関係無くない? if(a == null) return; if(a.get()<=1) return; これでget()呼ぶのも副作用あるかもしれないよね? >>783 別スレッドによって a が null にされてしまう可能性はあるな。だいたいの場合はそういうスレッドがないか、 またはあると分かっているならロックしてからアクセスするように作るから問題にならないんだろうけど。 ん?こういう理解だけど。参照が渡されてるだけだから 別スレッドが参照を破棄しても関係ないぞ func1(Object a){ if(a == null) return; a.get();//絶対にNPEが起きないマルチスレッド無関係 } func2(Object a){ a = null; } そもそも式の中で副作用のある関数を呼び出すのは危険 &&や||は評価順序が決まってるからまだマシな方でそれ以外の演算子だと評価順序もどうなるかわからんし でも副作用がある関数はset,write,update,createとか大体それっぽい名前ついてるし 分かるでしょ? というか情報処理はCRUDだからcreate,update,delete的な名前が必ずついてる 副作用を広くとらえればログ出力も副作用だけど、そういうのは問題無い getは副作用無しか問題無い副作用のみ、CRUDのRに相当するものだから だからコーディング規約を作るなら、CRUDを意識させるようなものであるべきで、 真理式でメソッドを呼び出すなとかいうわけわからん規約を作るべきではない CRUDのうちRのみ呼び出していい、とすべき ぶっちゃけCUDでも呼び出していい 結局、意味を捉えて間違えないように書けということでしかない コーディング規約をどういじくってもそこから逃げれるわけじゃない if (a == 0 || b++ < 1) { } こういう書き方をすると一見bが常にインクリメントされるように誤解されやすいからやめとけよって言ってるだけでしょ。 真理式に複数の演算があって、かつ一部に副作用があるとまずい、ってことか 副作用・副作用完了点 評価順序・マクロ MISRA-C でも、こういう間違いやすい所の、ルールは厳しい >>785 それならないな。 残るは get() して 1 以下なのを検査した直後に別スレッドによって a の状態が変化して get() が返す値が変わるとかかな。 (そんなの想定の範囲内なら問題ないが)。 adopt openjdkのjdk11リリースされたじゃん。 ttps://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot LTSだぞ。 ttps://adoptopenjdk.net/support.html?variant=openjdk11&jvmVariant=hotspot クライアントJREは廃止された 今現在、要JREとして世に出ているアプリをエンドユーザーが実行する公式な方法は存在しない(自己責任で開発環境を入れるしかない) 今後のクライアントサイドJavaアプリの唯一の配布方法は、JDKに含まれるコマンドラインツールを使用して プラットフォーム毎に実行環境とアプリを同梱した実行可能なパッケージを作ることである クライアントサイドに関しては、もはやJavaはバイナリ互換ではない OracleはクライアントサイドJavaを段階的に廃止しようとしており、新規には決して使ってはならない >>793 当てにならんよこんなの こいつらはただのビルド屋で、自分達でソースに手を入れる体制はない 次のバージョンのOpenJDKがリリースされた後もOpenJDK公式リポジトリの旧バージョンのソースに対してLTS向けのパッチが提供されるかどうかは、 オラクル様の温情次第 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる