★★Java質問・相談スレッド183★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語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質問・相談スレッド182★★
https://mevius.5ch.net/test/read.cgi/tech/1542595026/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured JUnitでテストクラス作って実行すると、ClassNotFoundが出る時はどうしたらいいですか?
Eclipseのプロジェクトをすべて消してイチから作り直したけど、原因が分からないから再発しそうで怖い 賢い質問のしかた
ttp://www.ranvis.com/articles/smart-questions.ja.html >>754
ありがとうごさいます
参考になりました! JavaからAccessデータベース起動したいのだが
Runtime execだと起動ぐらいしか出来ない
データベース操作するにはCOMブリッジ使えば良いのかUcanAccess使う方が良いのかよく分からない
Apache PoiではAccess操作出来ないよね? mdbを操作したいのではなくてAccessを動かしたいってこと? >>761
両方
mdbにJavaからテーブルへ数値書き込みしてから起動
Accessは起動時の設定でクエリー動くマクロやVBAを動かしてデータを整えてレポートを出力させる やっぱりJavaからAccess帳票出力するって特殊なのかな
ほとんど事例無いからググっても出て来ない 自分ならUcanAccessでDBを読み書きして
JavaからVBScriptのプロセスを起動して
VBScriptでAccessを操作する
MS OfficeのAPIはCOMでCOMのGCは参照カウントでJavaや.NETのGCは世代別GC
オブジェクトのライフサイクルが違うので動作が不安定になる
PowerShellでOutlookを操作してみてそう思った >>764
RuntimeでVBScript起動してVBScriptからmdb操作するって方法か、、
テーブル書き込みはUcanAccessか
なるほどね
それぐらいしか簡単な方法無いね ああAccess起動だけならRuntimeから直接Access起動は出来るね
操作までやるのはVBScriptとか利用せにゃならんけど >>767
PoiでAccess扱えるclassが用意されていない >>767
よってExcelとかはPoiで操作出来るのが一般的
Apache Poi使うな、と言われたらRuntimeでゴリゴリコード書く事になるけど ODBCブリッジはJava8で消されたから小細工しないと無理 今はJava8のLTSで運用してる所多いからAccessはUcanAccess使うぐらいしか方法無いと思うけどな
>>771
小細工ってどんな方法? >>771
調べました、確かにそうですね
しかし、ODBC-JDBC ブリッジ(TypeI) を削除してしまうなんて私には悪手(の典型)に見えるのですがどうしてそんなことをしたのでしょうか? 主要なRDBMSはJDBC Type4ドライバーあるからね
もはやODBC-JDBCの役目は終わったってことでしょう
ODBC-JDBCで助かるのはほぼWindowsだけだし(わずかだけどLinuxにもODBCある)
マルチプラットフォーム目指すJavaにとってはODBCは邪魔になったってことよ >>775
でも、腫瘍じゃない RDBMS とかが新たに出現したとか、マイナーなものがまだまだあるとか、今回のように access に access したいとか、そういうレガシーのために残して置いて「あげよう」とかいうのをバッサリ切るのは、さてどうなんでしょうか?
java は文法は OO としてはかなり保守的なのに、そういうところは荒っぽいのはチグハグな印象を持ちました とにかくUcanAccessが有って良かった
これでmdb横から更新して後は起動すれば起動時の設定でクエリー動かしてレポートまで出力出来る
JDBC-ODBCブリッジは有った方が良いとは思うけどね マイクロソフトだってmdb捨てたいんだよ
10年以上前からAccessの内部データベースはSQL Serverになっただろ
mdbじゃなければJDBCで読み書きできる >>778
>>マイクロソフトだってmdb捨てたいんだよ
それは理解出来るが帳票ツールとして捨てられないのよ accessの帳票機能だけ取り出せんもんかと
昔思っとったね。 >>778
>>10年以上前からAccessの内部データベースはSQL Serverになっただろ
詳しく! JavaならJasperReportsで良いじゃん >>782
GPLライセンスで常にフリーで使えるなら良いけどね
難しいでしょ >>784
Jackcessは制限有るからダメだよ ジェネリクスのワイルドカードについての解説を見ても、どういうことができるのかは分かるんですが、どんなときに使うのかイメージできません。
追加か取り出しのどちらかしかできなかったりするのもそうです。
参考例など教えてもらえませんか? >>786
? extends X はメソッドの引数に使う
? super X はメソッドの戻り値に使う
それだけのこと
C#だとそのままズバリinとoutと書くので圧倒的に分かりやすいんだけどね 引数戻り値というより、メソッドの中でどういう使い方するか、ってこと。
List<? extends X> list であれば、このlistから取り出して何かする。
for(X x: list) { x.x_method();}
List<? super X> list であれば、このlistに突っ込む処理をする。
list.append(x) // xはXかその派生クラスでなければならない。 こういうスレって>787みたいな知ったかの阿呆が回答側にいるからダメなんだよな > List<? super X> list
これ、メソッドの中だとList<Object>と実質変わらんわけで、何の意味もないんだよ
他の総称型を使ったクラスやメソッドに渡るときに初めて意味があって、それは>>787の通り 「実質」ってなんだ?
少なくともコンパイルの時点では違うだろ。
バイトコードの話なら、そもそもワイルドカード以前の問題だし。 OSはLINUXの64ビットで、JAVAプログラムを32ビットで作成する場合、
JDK、JREは32ビットを使わないとだめ? Javaプログラム(jar)には32ビット/64ビットという違いはないよ >>793
jarファイルについては>>794の通りだけど、
JRE・JDKについては、32ビットはメモリの制限がきついから
64ビットを使った方がいいよ >>793
Javaのプログラムを32bitで作成するという意味がよくわからない。
32bitのOSが動いている別のマシンで開発して64bitのLinux側で動かすという意味? >>796
いまでも32ビットのコンピュータやOSはたくさんあるだろうが。 32ビット環境で動かすつもりなのに64ビット環境で作っているのはミスを誘引する。 >>798
なるほど
どういう流れで誘発されるミスなのだろうか
CだとBSD系・Windows系のLLP64かSystem V系統のLP64か、とかある気がするが 細かい点としてlong/doubleの上下位ビットのスレッド分離問題はでてくるかもしれない。
もっとも、32bit版JVMでも分離するような実装が存在するかどうか知らんが、仕様上は何も規定されてなかったはずなので。 >>799
緩い型を使っていたり、メモリのアドレスに依存しているものを使っていた場合、32ビット環境で動かすとやはり想定外のことが起きる。JavaのVM仕様の解釈によっても異なる。 緩い型ってなに?
JNIならともかくJavaは型のサイズ明確に決まってるよ
intは32ビット、longは64ビットといった具合にね
型サイズまで処理系依存のC/C++とは違うのだよ >>801
なるほど
「緩い型」とか「メモリのアドレスに依存」というと、それはつまり何なのでしょう
JNIでCプログラムを呼び出す場合、の話なのでしょうかね
あとVM仕様の解釈の違いの差異というと、何があるのでしょう JavaはJNIを必ず経由するわけではありません。 JavaGoldって紫本を読んで黒本を解いていく地道な勉強ルートしかないですか?
なかなかモチベがあがらないし過去問の正解率も思うように上がらないので
もっと手軽な動画講座とかないかなと思ってるんだけども
勉強のためなのでお金はある程度出せます >>806
黒本解いて、間違えた問題の解説に書いてある理屈を、自分の言葉で別にまとめる。
再度、問題を解くときは、問題を忘れる程度に間隔を開ける。
連続で間違える問題は理解ができていないか、間違って理解している。
正解と不正解が混じる問題は、理解が不完全。
連続で正解する問題は、理解できている。
正解不正解にかかわらず、解説を読んで仕様の理解が重要。
あと再受験無料キャンペーンを利用して、初回を緊張せずに受ける。
落ちても、追加費用が掛からないのは、精神的にかなり楽。
試験に合格するだけならSilver取れてれば、追加の学習時間は100時間未満でも十分可能だと思う。
モチベーションの維持は個人で異なるので、試験を申し込んで締め切りを設定して、自分を追い込む。
自分はSE8Goldは上記のように学習して合格した。
動画で見てインプットだけしても、記憶に定着しづらい。
動画見る時間でアウトプットしたほうが、トータルの学習時間は短く済むと思う。 >>808
やっぱり、コツコツと過去問説かなきゃ駄目ね
学問に王道なし
ノートを取ることにするわ…
サンクス IntelliJ と Eclipse はどちらがおすすめですか? 有料版を買うまたはWeb開発しないならIntelliJ IDEA
無料でWeb開発したいならEclipseで我慢 >>810
ラムダ式とかStreamとか書きまくるならIntelliJがおすすめ
Eclipseは補完ができないことがたびたびある
自分は使い慣れてるからEclipse使ってるけど >>811-813
ありがとうございました。
IntelliJを使おうと思います。
Sedgewick & Wayne『Algorithms 4th Edition』の公式ページではIntelliJが推薦されていて、
今まで使ったことがあるのは、Eclipseだったので迷いました。 https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Graph.java.html
「public Graph(In in)」というコンストラクターの中に以下の例外処理のコードがあります。
catch (NoSuchElementException e) {
throw new IllegalArgumentException("invalid input format in Graph constructor", e);
}
「NoSuchElementException」という例外をキャッチしていますが、この例外はどこで投げられるのでしょうか? >>815
In.readIntのソース見ればわかるよね、ここで聞かなくても え? IntelliJ?
Kotlin もよろしく。 質問させていただきます。
「A=1を何倍ずつしていくと5回目に10000を超えるか」
という問いに対するプログラムを作りたいのですが、以下の様に書いたら「5」と表示されてしまい、上手く行きませんでした。
まず考え方としては、nの5乗が10000を超える時のnの値を出力する為に、for分の方ではiが1〜5までnのべき乗を繰り返すプログラムを作成し、それにwhile文で「Aが10000以下の条件」をつけ、nの値を+1ずつ増やして判定し続け、最終的にAが10000を超えた時点でのnを出力するプログラム書いたつもりです。
どこが間違っていて何を訂正すれば良いのかヒントやアドバイスなどをご教授いただければ幸いです。
お願いいたします。
public static void main(String[] args) {
int n=1 ;
int A=1;
while(A<=10000) {
for(int i=1;i<=5; i++) {
A=A*n;
}
n++;
}
System.out.println(n);
}} 2箇所間違ってる
デバッガの使い方がわからないならprintlnをたくさん挿入してnやAがどう変遷しているか画面に表示してみればいい Java勉強しようと思うんだけど、とりあえずSilverやGoldの勉強したほうがいいですかね(実際に受けるかはともかく)
何か作るというのも考えたのですが、体系的な知識を積むのには向いてないかな、と思ったり。
言語はC#やPHP、VB.netなら業務で使ったことがあります。 SilverやGoldは
当たり前だけどJavaの試験なので
実際には使わない機能や書き方も試験に出てくる
つまり実務とはちょっと方向性が違う
「体系的」というのが何を意味するのかに寄るけど
比較的新しいバージョンの機能の問題もでない OracleのJava資格の勉強は、我流で趣味プログラムを書いたり
仕事で誰かのコードを加工させられているだけでは身につかないような
Javaの細かい仕様や機能を浅く広く知識として身につくって感じだな
Java8以降に登場した新しい書き方、ラムダ式や関数型インターフェースなんて
下手にレガシーな現場に放り込まれるよりは
Goldの自習でもしてた方が手っ取り早く身につくんじゃないかという気はするし 資格はあくまで言語仕様と標準ライブラリの知識にとどまるから
どんなフレームワークが栄えているのぞやとか
Javaでよく使われるデザインパターンだとか
おすすめのIDEやウェブコンテナはなんぞやとか
lombokとかjunitみたいな便利ツールとか
Javaで必要ないろんな周辺知識が抜け落ちるみたいなところはある ClassCastExceptionについて教えてください。
AのサブクラスBが定義されていて、
AインスタンスをBにキャストすると、実行時にこの例外が発生すると思うのですが、どういった仕組みなのでしょうか。
B b = (B) new A();
b.method();
一行目で、bに代入されるアドレス先のインスタンスの型をなぜみにいってるんでしょうか?多相性を考えたときに二行目ではなく一行目で例外が発生することに違和感を覚えます! 多態性の向きを勘違いしてるんじゃない?
子Bは親Aとして振る舞えるけど、親Aは子Bとして振る舞えないよ >>827
よく考えたら、二行目の間違いが発生してから例外処理しようとしたらぶっ壊れますね。
解決しました。 >>828
それは理解してます。
変数bからしたら実体が何かというのはBという型情報だけ知ってればよくて、メッセージ送信先で問題があれば例外が発生すればいいのにと思いました。
すみません、ダウンキャストって多相性とはちょっと違いますね。 メソッド呼び出しとかするたびに毎回型チェック発生って効率悪いでしょ、動的型言語なら仕方ないけど。 >>830
早め早めにエラーが出ることの有用性を全く理解できないなら、Java使うのやめた方がいいよ。 ダックタイピングに慣れてる人なんだね
Javaのような強い静的型付け言語では早期に型を確定させる
これはミスの早期発見が主目的だと思う 代入時にエラーになるとしても実行しないと型の違いによるエラーがわからないのがつらいよね
ダウンキャストは禁止するべきだと思う、Javaはもっとハードボイルドになって欲しい >>832
そもそも多相性の話とは違うという誤りがあったけど、この質問自体に有用性が理解できないって話はしてないだろ、文盲バカか?
もとになっているオブジェクト指向のモデルと、それを実現する言語設計の関係の話で、何を考えそのようにしているのか、どうバランスをとってるのかって話だろ。
みんなは有用性からそうしてるって教えてくれているけど、お前のは質が違うぞ。
日本語読めない人はプログラミングやめたほうがいいよ。 >>830
いや理解してないでしょ
親Aは子Bとして振る舞えないんだから B にキャストしないでよ
実行時クラスまでしかダウンキャストできないです >>836
振る舞えないのでキャストできないということは、承知の上で、例外が発生する時機の疑問でした。
でも、例外はメッセージを受ける側で発生するので、無理なキャスト命令がきたら例外を発生するのは当たり前でした。
自分のアホな質問でした!という結論です。ごめんなさい。 >>837
すみません、結論が違ってました!
振る舞えないのにメッセージを送ったら壊れるので、送られる前のキャスト時に例外が発生するのは当たり前って話でした!
とにかくアホな質問をしました。ごめんなさい。 すみません、先に例外を出さないといけないことはわかったのですが、
参照型のキャストは実際にはなにが行われているのか仕組みを誰か教えていただけないでしょうか。 >>839
参照先のオブジェクトのヘッダを見て型をチェックし、キャスト先の型と互換性がなければ例外をスローする
実質的には何もしていない >>840
やっぱり何もしてないんですね!ありがとうございます!
すっきりしました! struts2.3からstruts2.5にバージョンアップ(jar交換)したところ、Tomcat起動時に以下のエラーが発生しました。
何のエラーなんでしょうか?
org.apache.catalina.core.StandardContext filterStart
重大:フィルタ�[struts2]�フ起動中の例外です
java.lang.RuntimeException: Unable to load bean org.apache.struts2.views.velocity.VelocityManager(org.apache.struts2.osgi.VelocityBundleResourceLoader) - [unknown location] - Class: com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector
File:ContainerImpl.java
Method: inject >>843
レスありがとうございます。
パッケージ名も変更しましたし、springのバージョンもアップデートしました。
velocitymanagerは移動してないですよね。 エラー内容はVelocityManagerが場所がわからず、ロードできないという事でしょうか?
org.apache.catalina.core.StandardContext filterStart
重大:フィルタ[struts2]�フ起動中の例外です
java.lang.RuntimeException: Unable to load bean org.apache.struts2.views.velocity.VelocityManager(org.apache.struts2.osgi.VelocityBundleResourceLoader) - [unknown location] - Class: com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector
File:ContainerImpl.java
Method: inject それっぽいけど何が原因かわからない
スタックトレース出てない? >>846
文字制限で一部ですが。
14:54:13.365 [localhost-startStop-1] ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed
java.lang.RuntimeException:java.lang.RuntimeException: Unable to load bean org.apache.struts2.views.velocity.VelocityManager (org.apache.struts2.osgi.VelocityBundleResourceLoader) - [unknown location]
at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:286) ~[struts2-core-2.5.26.jar:2.5.26]
:
at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:73) [struts2-core-2.5.26.jar:2.5.26]
at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:61) [struts2-core-2.5.26.jar:2.5.26]
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285) [catalina.jar:8.5.28]
�F
at�java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_161]
at�java.lang.Thread.run(Unknown Source) [?:1.8.0_161] 省略されたところに原因があると思うんだよねー
jarが足りないとかDTDが違うとか
こことかにスタックトレース全部貼って欲しい
https://friendpaste.com/ RuntimeExceptionは本当の原因をCaused byでラッピングしてて
真相はCaused byを見ないとわからないことが多々あるんです ■ このスレッドは過去ログ倉庫に格納されています