
初めて投稿させていただきます。
私は、EXEを作れる、DLLに触れるというメリットでMicrosoft SDK for Java 4.0を使っていたのですが、2007年にMicrosoftが完全にサポートを打ち切ってしまうことからSunのJDKに開発環境を移行しようと考えています。
そこで、MSが提供していた独自クラスをSunのJavaで使えないかと思って調べています。
具体的にはまず、MS Javaで使われているクラスファイルを吐き出すためにコマンドプロンプトで
> clspack /auto
として、classes.zipを作成しました。これをSunのJavaをコンパイルするときに
> javac -cp C:?WINDOWS?Java?Classes?classes.zip hoge.java
> javac -Xbootclasspath C:?WINDOWS?Java?Classes?classes.zip hoge.java
とすると、コンパイルは通るのですが、
> java hoge
> java -cp C:?WINDOWS?Java?Classes?classes.zip hoge
> java -Xbootclasspath C:?WINDOWS?Java?Classes?classes.zip hoge
等として、実行しようとすると次のようなエラーが表示されてしまいます。
Exception in thread "main" java.lang.NoClassDefFoundError: com/ms/win32/User32 at hoge.main(hoge.java:4)
Exception in thread "main" java.lang.NoClassDefFoundError: hoge
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/security/ProtectionDomain
ちなみに、hoge.javaはMSのクラスが使えるかを確認するために作ったサンプルです。ソースコードは以下のような内容です。
import com.ms.win32.*;
class hoge{
public static void main(String[] args){
User32.MessageBox(0,"Hello.","Java!!",0);
}
}
MSの提供しているクラスを使うことは出来ないのでしょうか?また、MS以外のものでデバイスにアクセスすることを可能にするクラスは提供されていないでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
すみません。
私は Sun の JDK で Microsoft のクラスを呼ぶソースコードをとりあえずコンパイルができる(それを Microsoft VM で実行できる)ということだけ書きたかったのです。
Sun の環境での実行については、No.1 の回答の、
> あとは、実行環境の移行ですが、これが難しくて分かりません。
のとおり分かりません。
No.2
- 回答日時:
Microsoft の Java (Microsoft VM) は JDK のバージョン 1.1.4 相当のものです(と聞きます)。
したがって Microsoft VM 上で NoSuchMethodError を回避するためならば、1.1.4 までのクラスやメソッドだけを使ってコーディングすれば大丈夫です。ただ、どのクラスやメソッドが 1.1.4 に含まれていないかが分からないので、これは慣れしかないでしょう。簡単には Sun から JDK 1.1.4 相当の環境をダウンロードして使えば良いでしょう。たいていは 1.1 の最新である 1.1.8 で間に合うと思います。しかし、こんどは Sun が JDK バージョン 1.1 をサポートし続けているのかどうか、ということになり、本末転倒かもしれませんが。
参考URL:http://java.sun.com/products/archive/index.html
この回答への補足
> Microsoft の Java (Microsoft VM) は JDK のバージョン 1.1.4 相当の
> ものです(と聞きます)。したがって Microsoft VM 上で
> NoSuchMethodError を回避するためならば、1.1.4 までのクラスやメ
> ソッドだけを使ってコーディングすれば大丈夫です。
それはそうなんですが、私がやりたいのはMSが独自で作ったクラスを使いつつ、Sunのjdk1.2以降のクラスやメソッドも使えるようにすると言うことなんですよね。
やっぱ、無理なんですかね~。
SwingはJ2SE 5.0のものを使うことができたんですが、他のMSとSunが共に持っているクラスやメソッドに関してがどうしてもうまく行かないんです。
No.1
- 回答日時:
Microsoft のサポート云々を気にされるのでしたら、開発環境(コンパイラー)だけでなく、ライブラリー(com.ms.win32 パッケージなど)も結局サポートされないことになるので、Microsoft のライブラリーだけは使い続けるというのはそれほど意義がないような気もします。
(お勧めするソリューションは .NET(C#) へ移行するか、Sun の Java から JNI 経由で native に DLL にアクセスするかのいずれかです。)
ともあれ、とりあえず、以下、中途半端な回答ですが、Sun の環境でコンパイルはできたことだけ書きます。
試した環境は、
・Microsoft SDK for Java 4.0 なし。
・Microsoft VM(Microsoft の Java のランタイム) あり。
・Sun の JDK 1.4.2 あり。
です。
コンパイル時につぎの引数を指定してコンパイルします。
C:\j2sdk1.4.2\bin\javac -target 1.1 -classpath C:\WINDOWS\JAVA\Packages\Wg2zl39v.zip Hoge.java
これでできた Hoge.class を使って
jview Hoge
とやって Microsoft VM(jview.exe) 上では動きます(メッセージボックスが表示される)。
以上で、コンパイル環境は移行できたことになります。
要は、Sun JDK の 1.4 あたりのバージョンを使って -target 1.1 を指定するだけです(1.5 でもできるのかもしれませんが良く知りません)。
あとは、実行環境の移行ですが、これが難しくて分かりません。
なお、余談ですが上記の Wg2zl39v.zip のようなファイル名は環境依存するのかもしれません。
ちなみに、
> 具体的にはまず、MS Javaで使われているクラスファイルを吐き出すためにコマンドプロンプトで
>
> > clspack /auto
>
> として、classes.zipを作成しました。
こういうツールがあることを私は知りませんでしたが、おそらく同じことでしょう。
この回答への補足
お答えありがとうございます。
> コンパイル時につぎの引数を指定してコンパイルしま> す。
> C:\j2sdk1.4.2\bin\javac -target 1.1 -classpath > C:\WINDOWS\JAVA\Packages\Wg2zl39v.zip Hoge.java
>
> これでできた Hoge.class を使って
> jview Hoge
> とやって Microsoft VM(jview.exe) 上では動きます
> (メッセージボックスが表示される)。
確かに、-targetオプションを付けるとコンパイルはhoge.javaのコンパイルと実行はできるようになるのですが、targetで1.1を指定するとSunのJavaで1.2以降に追加された関数が見つからない(java.lang.NoSuchMethodError)となってしまうんですよね。例えば、StringBufferのsubstringはver 1.2から追加されたメソッドなんですが、このメソッドをhoge.java内に記述しておくと、コンパイルは通るのですが実行時にエラーがはかれてしまうんです。
こちらをたてればあちらがたたずと言った状況になってしまいます。これが何とか回避できればと思っているのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GAMESSのエラー
-
.jarファイルの中身って書き換...
-
javax.servlet は存在しません...
-
C言語について。
-
マイクラjavaでForgeを入れたい...
-
プログラム実行の際に、「ソー...
-
Access VBAよりシート名を取得...
-
「%CATALINA_HOME%」とはどこの...
-
EclipseでHTTP404エラーが出る。
-
ResourceBundleクラスの使い方
-
Eclipse・プロジェクトで、フォ...
-
VisualStudioでC++クラスを追加...
-
PowerShellにてZipFileクラス利...
-
eclipse でclassesフォルダーが...
-
The requested resource is no...
-
SVFの設定について:クラスパス...
-
javascriptで、style undefined...
-
javaクラスファイルをEclipseで...
-
JFreeChartの使い方について
-
サーバから落としてきたWebアプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.jarファイルの中身って書き換...
-
javaが文字コードの影響でコン...
-
IIS環境でJAVAを使用したい
-
javax.servlet は存在しません...
-
Javaのコンパイル結果が表示さ...
-
「シンボルを見つけられません...
-
JAVAでC/C++の条件コンパイルの...
-
コンパイルができないのですが...
-
eclipseの構文エラーについて
-
LaTeXでのアンダーバーの入力
-
jadによるclassファイルの逆コ...
-
javaの簡単なソースがコンパイ...
-
eclipseについて
-
jspとサーブレット
-
シンボルを解決できません(初...
-
TeXで図を挿入できません.助け...
-
Eclipse3.5EEでJavaのコンパイ...
-
c++Builder ver6.0のパッケー...
-
JSP使用によるスタイルシート読...
-
サクラエディタでjavaのプログ...
おすすめ情報