★★Java質問・相談スレッド184★★
プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 https://itest.5ch.net/subback/hp Webプログラミング https://itest.5ch.net/subback/php をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)ttp://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド183★★ https://mevius.5ch.net/test/read.cgi/tech/1588770728/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured ネットでググって完全に理解した気になってる痛い中高生っていつの時代にもいるよな バカ学生のくせに朝はちゃんと起きれるのかw バカだからメモリの見方もスレッドの仕組みもわからんから一生懸命馬鹿でもわかる本探してんだもんなw spring frameworkって他の言語でいうとrailsとかlaravelみたいなものでしょ? なのになんで難しく感じるんだろ 昨日から一生懸命携帯とPCで書き込んで忙しい低能バカ学生だなw 本が一番といいながらこんだけバカなんだからお前が本読む意味なんて微塵もねーわなw もうこいつの相手しない方がいいかも ただのレス乞食だろこれ まぁメモリもスレッドも網羅してるJava書籍があると思ってるバカ学生じゃ相手になるわけねーわなw 基本のキの字すら理解してないのに本読んで基本理解するとか書いてるホンモノのバカなんだからw 逃亡宣言なんかいちいちせんでええからとっとと消えろゴミ 知らないだけでしょ 知らないことを偉そうに言うなよ 意味不明w ほんとバカって何言ってるかわからんなw バカ「絶対に100億兆円稼げるアプリの実装方法が書かれた本を教えてください!!!」 賢者「は?ねーよバカw」 バカ「知らないことを偉そうに言うな!!!」 THE 糞バカ 取り敢えず上から目線のゴミ野郎はNGに入れといたわ 非建設的な持論を並べ立てるだけのバカほど見苦しいものはない まあ現実が上手くいってないんだろうねこの人 バカにとってはぼくちんの気に食わないレスは全部非建設的だもんなw 逃亡にしろNGにしろいちいち宣言しなくていいからとっとと消えろってゴミwww バカだから何言われてるのかわからないだけでしょ わからないことを偉そうに言うなよ まあ雑談なんだけど、独学でjavasilverはとって今オンラインスクールで勉強してるのね(独学でwebアプリ作ろうとかしだすとすごく効悪いと思ったから)、まだそんなレベルなんだけど、JAVAってオブジェクト指向が難しいっていうけど、何をやりだしたら難しいのかな。 他の言語知らないから比べられんのやけど。 独学でjavasilverまではとって、まだそのレベルなんだけど、JAVAで難しいって言われるオブジェクト指向って、どうゆうとこだと思います? クラス型の変数をつくってそこにオブジェクトをつっこむってところがいまいち納得いかないけど、そうゆうとこかな。 頭の中で理論立ててくいのが大変。わかる人はもう慣れで考える必要もなく、読んだり組んだりするのかな。 クラス型の変数にnewしたやつを代入して、その変数がメソッドの引数に使われてると、つどつど内容を追って考えるものですか? ライブラリやモジュール設計するつもりでなければ気にすんな Tomcat上で動作しているWebアプリがあるのですが、 テキストボックスを追加するとかの改造したいと思ってます ただ、フレームワークか何かを使っているようで、 正直、動作がよく分かりません Eclipseとかで、ソースのここに来たらブレーク、みたいに指定できますが、 似たような感じで、ブラウザのこのボタンが押されたらブレーク、みたいにして その時にどのソースのどこが動作していたかが分かるようにならないかと 思ってますが、そういうことってできますか それとも構造を読み解かないと無理でしょうか 知識不足 まず画面とトムと業務クラスがどういう連携してるか知るところから理解してないと話にならん そのレベルだと画面のサブミットの意味も理解してないだろうからHTMLの勉強からだから絶望的知識不足 画面にしてもwebアプリサーバーにサブミットする方法はformだったりスクリプトだったり非同期だったり テンプレエンジン使ってたりいろいろあるから読むのなんてあたりまえ Java は、Spring Boot, Groovy とか? 基本はRuby on Rails で、それ以外のフレームワークは劣化版 YouTube で有名な雑食系エンジニア・KENTA の初心者向けRailsサロンが有名 WSL2, Linux, AWS, Docker, VSCode, CircleCI, Github Actions Bootstrap, React, Vue.js, TypeScript 最近、Java のログ機能に重大なセキュリティーホールが見つかって、 Tomcat のサイトからパスワードが盗まれたとか、Edge から通知が来たw とある文字コードのバイト列を他の文字コードの文字列に変換するには 下記みたいに一旦tmpStr、tmpBytesに変換しないと駄目なのかな? byte[] bytes = {0x00, 0x01, 0x02, 0x03}; // 例えばShift_JISとする String tmpStr = new String(bytes, "Shift_JIS"); byte[] tmpBytes = tmpStr.getBytes("UTF-8"); String convStr = new String(tmpBytes, "UTF-8"); >>176 バイト列を new String(bytes, charsetName) で String のインスタンスにしたら内部では char[] に UTF-16 で保持されている。つまり Unicode になっている。 その String のインスタンスから何かのエンコードのバイト列にしたいなら getBytes(charsetName) 等を使う。 >>177 そうするとこのステップを踏まないと正しくエンコードされた 文字列が出力されないんですね > byte[] bytes = {0x00, 0x01, 0x02, 0x03}; // 例えばShift_JISとする Shift_JISでエンコードされたバイト列 > String tmpStr = new String(bytes, "Shift_JIS"); Shift_JISでデコードしてStringを得る > byte[] tmpBytes = tmpStr.getBytes("UTF-8"); UTF-8でエンコードされたバイト列 > String convStr = new String(tmpBytes, "UTF-8"); UTF-8でデコードしてStringを得る これらは同じものだよ ・Shift_JISでデコードしたString ・UTF-8でデコードしたString 文字コードはString→バイト列の変換規則であって String自体にはShift_JISもUTF-8もないよ >>179 バイト列そのものが文字コードであって 相互に変換するのが文字コードの変換になる感じですか その相互の変換はStringを介さないと出来ないのでしょうか? >>180 Shift_JISのバイト列をUTF-8のバイト列に直接変換する機能は標準ライブラリには用意されてない 自作するならShift_JISは8000文字くらいだからトライ木に詰め込んで変換するとかかな 自作しても処理が速くなるとは限らないしStringにデコードするのが正統派スタイルよ 英数字だけならShift_JISもUTF-8も同じバイトだから変換する必要ないけどね バカって基本的な原理を全く知ろうとしないで延々と質問するよな 原理を知ってればそれに頼らないでどう処理すればわかるのに 答えだけすぐ見る頭の悪い学生みたいに常に行き当たりばったりの行動しか取れないから永久に進歩しないし嫌われる 逝ってヨシ!!!!!!!! >>181 介するのが標準でマッピングするようなものはなく そう単純なものではないのですね ありがとうございます >>182 失礼しました ただスレの趣旨には沿ってるかと思うのでご容赦ください >>182 君なんでそんなに攻撃的なの? 更年期のババアなの? 基本的に、CP932(sjis)のようなWindows 専用日本語を知っている外人は、まずいない。 逆に日本人で、CP932以外のCPを知っている香具師がいないのと同じ 例えば、MySQL もいつも日本語のバグを修正しているから使えない。 Ruby では、iconv を非推奨にして、NKF に変わった CP932を変更しても、各モジュールがその変更に追随しないから使えない。 特に、Ruby, Java の2大バックエンドのウェブ開発では、 OSS を使うから、UTF-8 以外には対応しない これが基本中の基本 一応枝葉の部分を拾っておくと、java.nio.charset.Charset(やCharsetEncoder)あたりを使えば Stringを介さずにBuffer(バイト列)のままShift_JIS(あるいはWindows-31J) -> UTF-16 -> UTF-8と変換することは出来る 巨大なデータとかメモリマップファイルとかでもなければStringを介するほうが楽でよいと思うけど(どちらにせよUTF-16経由になるし) あとおそらくcharsetはShift_JISではなくWindows-31Jを使う方が望ましい結果が得られる可能性が高いかと 某マイクラのJava版の中身を見たりいじったりしたいのですが、 versions/1.19.4/1.19.4.jarというファイルがメインjarに見えるので直接java -jarしたら Error: Could not find or load main class net.minecraft.client.Main と言われてしまいます 実際マニフェストにはnet.minecraft.client.Mainだと書いてあるのだけど、jarを展開すると 上記クラスファイルはなく、代わりにnet/minecraft/client/main/Main.classというのがある 一方マイクラのlauncherから起動する分には何の問題もない これってどうなってるんでしょうかね。これは本当のメインjarではないとか? あるいはマニフェストの設定をランタイムで変更したりとかできるんでしょうか あ、もしかしてmainのあるクラスをjavaの引数に指定すればいいのかな? 久々にJava案件に関わる事になりそうなんだが 今ってJava8が主体っていう認識で良い? Java11やJava17とかも追加で勉強しておいた方が良い? >>190 そういうのってその案件次第じゃ? 古いJDKを使って欲しい案件だってあるでしょ ちなみに今Android Studioをチェックしたら17が入ってるようだ しかしこのスレは生きているのか フロントがJS、バックがSpringMVCという構成ではなく、 バックをWebFluxにして、R2DBCを使えば、単純なDBクエリだけれどリクエスト数は多い というサービスに効果あるかな。今後も、WebFluxのユーザは増えていくでしょ。 と思ったのですが…… JDK20以降でLoomが完全実装されたら仮想スレッドになって 実質、ノンブロッキングのコードを書いても書かなくても同じになって、 WebFluxやR2DBCの優位性は無くなります? ワシのところはJava11だ、Java8の知識があれば十分 冗長な糞コードしか書けない雑魚は別にバージョンなんて全く気にする必要もないし気にするだけ思考の無駄 8未満と8以降じゃ公文式使えなかったりストリップも使えないからオワコンだけど javaってjarを実行するよりclassファイルを実行したほうが速いですか? なんとなくjarは最初に圧縮の解凍があって遅そうなイメージがあるのですが そんなことはないですか? >>200 圧縮されていた方が(コンピュータからしたら)とても遅いディスク等からメモリへの読み込みが少なくて済むので速くなる。圧縮状態から元に戻すのはメモリ上でやるのであまり時間が掛からない。 もちろんこの逆の状態とか、圧縮状態から元に戻すのに物凄く時間が掛かるCPUだったりそのような圧縮だったりすればこの限りではない。 でもそんな環境は今は珍しいと思うよ。組み込み関係のマイコンとかならあるかも知れない。(ラズパイみたいなお前普通のPCだろとツッコミを入れたくなるようなやつは除く) その速度差を気にするのだったら そもそもJavaで書かないほうがいいと思う Javaって今時Union型も無いんですか どうして? 全部あったらプログラミング言語としての違いがなくなってしまいますね。 >>205 JavaはクラスのインスタンスはGCで管理するので共用体の必要が無いのでは? >>205 生のメモリとオブジェクトは概念として完全に分離されてるから さまざまな型システムにはメリデメのトレードオフが必ずある 共用体も節度を持って使えば便利だけど濫用すると惨劇を招く Javaはシンプルさと移植性を重視してデザインされたので、クラス定義や複数の変数で代用可能な共用体は用意されなかった Cの直系やBetter JavaScriptと違ってそんなに必要になるシーンも多くないのでSealed Classで事足りるだろう 世界中にある莫大なコードベースに対して破壊的変更が少なくなるように配慮せざるを得ない部分もある シンプルさが大量のプログラマを生んで成功したからこそ長い栄華を誇ったのだし、栄枯盛衰の落ち目を笑うのは浅はか Javaにも様々な新機能が追加されていってるけど頑なに実装を拒んでるものもあるよな その筆頭がasync/await 要望が多いのに「代わりにVirtual Thread使ってくれ」とか言ってるからな Virtual Thread とは使い処が違うんだよ!! 質問です。 pleiades 2023 で gradle のプロジェクトをインポートしようとしているのですが 以下エラーが出てビルド出来ません。 ------------------------------------------------------------------ FAILURE: Build failed with an exception. * What went wrong: org/gradle/api/plugins/MavenPlugin > org.gradle.api.plugins.MavenPlugin * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. CONFIGURE FAILED in 1s ---------------------------------------------------------- 結構頑張ってググっているのですが原因が分からないのですが、 どなたか助けていただけませんでしょうか。 環境は Mac Ventura, gradle 8.3, Java17 です。 文字数制限で連投になりすみません。 なお build.gradle の内容は以下です。 --------------------------------------------------------------------- plugins { id 'org.springframework.boot' version '2.3.5.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' id 'eclipse' id 'idea' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = 11 compileJava.options.encoding = "UTF-8" repositories { mavenCentral() } dependencies { implementation('org.springframework.boot:spring-boot-starter-jdbc') implementation('org.springframework.boot:spring-boot-starter-thymeleaf') implementation('org.springframework.boot:spring-boot-starter-validation') implementation('org.springframework.boot:spring-boot-starter-web') runtimeOnly('com.h2database:h2') runtimeOnly('org.springframework.boot:spring-boot-devtools') testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } } すみません、自己解決しました。 ビルドに使う Gradle を 7.2 にしたら何故か出来ました。 ググると maven プラグインは 8 から廃止なので maven-publish を使えみたいな記事はあったのですが、 maven-publish と build.gradle の plugins に書いてもダメだったんですよね……。 根本的には解決していないのですが、とりあえずご報告でした。 int[] a={1,2,3,4,5}; という入れる変数を作ったんですが、プログラムの途中で a={5,4,3,1,2};というふうにしたいんですができません。 いちいちa[0]~a[4]全部に代入しないといけないのでしょうか? >>217 参照って分かりにくいよな。 ぼーとしてると実体を見失うわ。 Cのポインター配列だとあり得ないけど。 >>216 a の参照先を変えてしまっていいなら a = new int[] { 5, 4, 3, 2, 1 }; と書けば良い。それまで a の参照していた先のメモリはgcが自動で解放してくれるので考える必要はない。 a の参照先をそのままにしたいなら一つづつ a[0], a[1], a[3], a[4] に代入するかループ使って代入すれば良い。 インプレースコピーで要素の入れ替え、みたいな話じゃないのか 設定ファイル(setting.config)があり、その中身が pathA="D:\\Download"; pathS="G:\\Download"; pathC="Z:\\Download"; と各行にあるものを読み込み、各Pathに設定されたディレクトリを指定した変数に代入するプログラムを書こうとしています。 その場合、一般的にはどのように読み込み処理を書かれるのでしょうか? >>222 java.util.Properties クラスのインスタンスを作って load() でそのファイルを読んで getProperty("pathA") みたいにして内容を取り出す。 intellij使ってメソッド定義する際に引数にOptionalを指定すると 「Optional<型>がパラメータ'変数名'の型として使用されています」って警告が出るけど 引数にOptional指定するのってよくない書き方なのかな? 背景が黒くならないのは何故でしょうか? public class ImageViewer extends JPanel implements Runnable { private static int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; private static int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; private Thread thread; public ImageViewer() { thread = new Thread(this); thread.start(); } @Override public void run() { while (true) { repaint(); } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setBackground(Color.BLACK); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.getContentPane().add(new ImageViewer()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(0, 0, screenWidth / 2, screenHeight / 2); frame.setLocationRelativeTo(null); frame.setVisible(true); }});}} >>227 paintComponentの中で塗りつぶししてないからじゃない? 今スマホだからメソッド名が分からないけど fillXXとかいう名前のメソッドがGraphicクラスになかった? >>228 ありがとうございます。 g2.clearRect(0, 0, getWidth(), getHeight()); を追記したらできました。 ちなみに、エクスプローラーの左側にフォルダ構成が表示できる「ナビゲーションウインドウ」はどのような方法で実装されいますでしょうか? >>226 基本的にOptionalは戻り値として使うために作られたもので、引数として使うことを想定してない 一般的にも引数には使わないことが推奨されている(いろいろ議論はあるけど) 「引数がnullの時にデフォルト値を与える」みたいな使い方をしたくなるけど、それやると呼び出す側にOptionalで包むことを強制することになるので、かえって煩雑になったりするんだよね ttps://pastebin.com/tM0VgmHA 左側に表示されるフォルダをクリックすると、右側にそのクリックされたフォルダの中身を表示したいのですが、どうすればいいのでしょうか? >>232 クリックを感知するリスナー作って 表示するようにするだけ 非プログラム民です Javaの一番初歩的なスレがここっぽいので失礼します Win11にJavaってあんまり要らないんでしょうか? 8年ぶりぐらいに新調したんですがそういや入れてないけど何も要求されてないなと気付きました PCの使用用途としてはネットサーフィンやゲーム程度 Office(Excel)はLibre使ってて今のところマイクラもやってない… プログラムなどPCの根っこ部分を弄るような人以外はもう特に入れる必要がない時代なんでしょうか? ちょっとふわっとした質問ですが教えていただけると助かります >>234 Javaのデスクトップアプリというジャンルがほぼ死に体なのでPCにJavaを入れる機会は大幅に減った 下手に入れて放置とかしてるとセキュリティホールになりかねないので必要になるまで入れない方がいいよ そうなのか それじゃあしばらくお別れになりそうだな 回答ありがとうございます Oracle公式のJava Runtime Environment自体が廃止されたし Javaは開発者が使うもの、ユーザーはアプリにバンドルされたJavaを使うことになったから ユーザーがJavaをインストールする必要はなくなった インベーダーゲームを作成していて、敵の左右移動についての質問になります。 敵の最初配置は以下のようになっており、最初は右方向に移動します。 ■■■■ ■■■■ → ■■■■ 右端へ行く途中に、いくつか敵が倒された後(倒された敵は□で非表示) □■■□ □□■□ □□□■ 一番端で生き残っている者(※ここでは一番下の右側の敵)が右端に着くと、全体が移動方向を反転したいと思います。 どのように実装されているでしょうか? 現在は以下の通りに敵を作り、それぞれに移動方向をセットしています。 Alien[][] aliens; for (int i = 0; i < col; i++) { for (int j = 0; j < row; j++) { aliens[j][i] = new Alien(x, y, this); aliens[j][i].setDirection(RIGHT);//右に移動する }} Alienのコンストラクタにthisを渡さないほうがいいよ thisを渡してるってことはAlienクラスが外側のクラスを参照してるってこと このような相互参照する設計は結合が密になって後々不都合が出ることが多い Alienインスタンスそれぞれが x, y 座標を持ってるんだからaliensを二次元(画面座標)にする必要はない ScopedValueの説明記事読んでたら思ったんだけど あれって同じ変数名なのに違う型になってるよね? Object x=; ScopedValue.where(x,,); これが対象スコープ内では ScopedValue x; として呼び出せてしまってる、ということだよね xが場所によって型が違う なかなか嫌な構文だね。可読性低下しない?勘違いしそう >>240 自分も説明読んだだけだけど、whereの第一引数はScopedValueじゃないか? >>239 ありがとうございます。疎結合やList<Alien>にできるよう見直します。 スペースインベーダーの敵の移動について、一番端にいる敵が画面の端まで移動した場合、方向を反転するという動きを実装しようとしております。 現在、敵が端まで行った際に反転するところまでは実装できたのですが、敵が画面外に少し出た状態で反転します。 画面の端できっちりと反転する方法はありますでしょうか? ttps://pastebin.com/2KFpUcpc あるんじゃない?てか、そんなの少し手前を画面の端とみなすように作れば良いだけでは? エラーチェックをする関数を作るとき、 エラーがあれば、エラーあるよーんってメッセージをつけた例外を呼び出し元に投げる。 ということをしたいとき。 エラーの詳細はどうでもいいとき、 throw Exception(“エラーあるよーん“) はだめなの? わざわざExceptionを継承したクラス作らないとだめなの? >>247 そのコードを呼び出す側が全ての例外をcatchするもしくは全ての例外をcatchしないという使い方しか絶対にしないのならいいんじゃね 例外クラスの自作はあまりやらないよな? 既存のヤツでだいたいは間に合う 作るとすれば エラー情報を盛込みたいとか しっくりくる名前の例外クラスが無い場合とか 後で拡張を考えてるとか そんくらいだよな なんでも質問スレからきました VScodeでjavaを勉強する初心者です プログラムが完成したのでjarファイルをビルドしたのですが jarファイルをクリックしてもコマンドプロンプトで起動しても デバッグでの動作を全くせずに終了してしまいます javaを入れなおして再起動などもしてみましたが起動しません どうすれば動くjarファイルを作成できるのでしょうか よろしくお願いします >>252 コマンドから実行したら何かメッセージ出力されるんじゃないかな それをここに貼り付けてくれ read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる