web-dev-qa-db-ja.com

Javaクロスプラットフォームですか?

クロスプラットフォームアプリケーションを開発したい。

Javaクロスプラットフォームですか?つまり、JavaアプリケーションをWindowsで開発し、Mac OS XおよびLinuxで使用できますか?

はいの場合、どのように?

Javaで記述されたアプリケーションを見つけました。Windows用とMac用の2つのセットアップファイルがあります。これにより混乱します。

どんなイラストや提案も高く評価されます。

24
AMH

Is Java a cross platform?

Javaは、コンパイルされたJavaプログラムは、JVMが存在するすべてのプラットフォームで実行されるという意味で、クロスプラットフォームです。 Windows、Mac OS、Linuxなどのオペレーティングシステム)

つまり、Java Windowsでアプリケーションを開発し、MacおよびLinuxで使用できますか?

はい、これは可能です。

これ(およびセキュリティの側面)は、仮想マシンでプログラムを実行する主な利点の1つです。

はいの場合はいかがですか?

  • アプリケーションをJava(.Javaファイル内)に記述します
  • Eclipseまたはjavacを使用してアプリケーションをコンパイルします(.classファイルに)
  • (オプション).classファイルを実行可能ファイルにバンドルする(.jarファイル)

まったく同じ.jarファイルをWindowsシステム、Macシステムなどで配布および実行できます。

Javaで記述されたアプリケーションを見つけました。Windows用とMac用の2つのセットアップファイルがあります。これは私を混乱させます。

これは、一部のアプリケーションがプラットフォーム固有の機能に依存しているためです。その後、それらはさまざまなプラットフォーム固有のライブラリにバンドルされます。

それ自体がプラットフォーム固有の機能(低レベルのシステムコールなど)に依存するアプリケーションを開発しているのでない限り、通常のJavaで問題なく実行できるはずです。

重要なコメントby @ Peter Lawrey

アプリケーションがプラットフォームに依存しない場合でも、セットアッププログラムはそうではありません。例えばIntelliJには、Javaで記述されていない3つのプラットフォーム固有のインストーラーがありますが、任意のプラットフォームで解凍するだけで動作するZipがあります。

43
aioobe

Javaアプリケーションは、JVMが搭載されているすべてのデバイスで実行できます。そうでない場合は、運が悪いです。

Odedからのコメントは重要です。 CおよびC++は、多くのデバイスにコンパイラーを備えています。

プラットフォームを切り替えるときに、Javaバイトコードを再コンパイルする必要はありません。

CおよびC++では、ターゲットシステムに配布する前に開発者がアプリケーションを再コンパイルする必要がありますが、それが完了すると、クライアントは問題なく実行できるようになります。

プラットフォーム固有のカスタマイズと設定の問題は、選択する言語に関係なく対処する必要があります。アプリケーションがプラットフォーム固有の機能に依存するほど、移植性が低下します。

更新:

質問の元の単語をもう一度見てみましょう。

クロスプラットフォームのアプリケーションを開発したい。

ここに目的があります-直接の引用です。 Web、モバイル、またはデスクトップアプリに関する詳細はありません。

Javaクロスプラットフォームですか?つまり、JavaアプリケーションをWindowsで開発し、Mac OS XおよびLinuxで使用できますか?

「クロスプラットフォーム」を定義します。ここでのバイアスのように聞こえるのは「バイトコードの移植性」です。 C/C++ではそれができませんが、ANSI C/C++に固執し、ベンダー拡張を使用しない限り、「ソースコードの移植性」は確かに可能です。

Javaの最初からの名声は、常にバイトコードの移植性でした。それが、JVMがもたらすものです。他の依存関係をうまく管理できなかった可能性があるため、アプリケーション全体が移植可能になるわけではありません。

そのブロックの「Java」を「C/C++」に置き換えた場合、クロスプラットフォームは別の意味になります。あるプラットフォーム用にコンパイルされた.exeまたは.soを取得して別のプラットフォームで実行することはできませんが、。各プラットフォームでexeまたは.soを使用できるようにして、同じソースコードを複数のプラットフォームで実行できるようにすることは確かに可能です。

はいの場合、どのように?

JavaアプリをJARとしてパッケージ化した場合は、好きなプラットフォームに配置できます。

対象のプラットフォームに複数のC/C++ .exeがある場合は、必要なときに確実に実行できます。

3
duffymo

Java移植性に関して重要な注意があります。「ビジネスロジック」(UI以外のもの)は非常に移植可能ですが、少なくとも6種類の異なる(そして互換性のない)ユーザーインターフェイスがあります。 Java Android(Androidの互換性のないJVMを無視している場合でも)で実行されるように記述されたコード)はNokiaの電話では実行されません。どちらのコードもデスクトップPCでは実行されません。

しかし、私の知る限り、他に優れた言語はありません。

1
Hot Licks

Javaは単なる設計であるため、実際にはクロスプラットフォームではありません。一部のJava実装はクロスプラットフォームにすることができますが、実際にはJava実装者に依存しています。

Sun/Oracleは、Windows、MAC、およびLinuxのJava標準実装を作成します。JDKを使用してプログラムをビルドする場合は、JREでプログラムを実行する必要があります。他のJREで実行しようとすると、互換性がある場合があります問題。

これはモバイルでよく見られます。一部の電話メーカーはJavaの完全な実装を行いません。ハードウェアの制限のため、またはデバイスのソフトウェアを制御したいため、Javaを使用しているためですロゴは、独自のJDKを使用する必要があります。これらのプログラムは、JVM実装の外部では実行できません。

Javaのもう1つの問題は、一部の機能が非推奨になり、特定のバージョンのJREで実行されていたものが、新しいバージョンでは実行できなかったり、別の方法で実行できなかったりすることです。

0
user3658739

はい、JavaあるOSで作成およびコンパイルすると、別のOSで実行できます。多くの最新のオペレーティングシステムで利用できるJVMがあります。

0
Isaac Truett

Javaアプリは.jarファイルとしてパッケージ化されています。これらは、アプリケーションに適切なJavaランタイム環境を実装するすべてのオペレーティングシステムで実行できます。ただし、ユーザーがそのJREをインストールした場合(JREは無料でユーザーに提供されます)。

アプリを実行する正確な手順は、オペレーティングシステムごとに異なります。

Java開発キットは、どのOSでも動作するはずのシステム関数(ファイル操作、ユーザーインターフェイスなど)を呼び出すことができるライブラリを提供します。ただし、正確な動作は(また、Javaアプリには、そのOS用に特別に設計されたアプリケーションのルックアンドフィールと正確に一致しない「ルックアンドフィール」がある場合があります。

0
Jim Blackler

それは、「クロスプラットフォーム」が何を意味するかによって異なります。 Javaコードは、JDKをサポートする任意のOSでバイトコードバイナリクラスまたはjarファイルにコンパイルし、JREをサポートする任意のプラットフォームで実行できます。ただし、ほとんどのコンパイル済み言語は、提供される任意のプラットフォームでコンパイルできます。 Javaは、たとえばC++よりも移植性が高いですが、C++コードがどのプラットフォームでもコンパイルできないということではありません。

つまり、この1つの機能だけで言語を選択しないでください。アプリケーションに最適な言語を選択することは、それを行うためのより良い方法です。おそらく、スクリプト言語が最適です。多分あなたの特定の問題を解決するためにどの言語を使用するかを尋ねる別の質問を投稿してください。

0
alpian

Javaサウンド付きの小さなゲームを書きました。標準ライブラリ(AudioInputStreamとClipクラス)を使用しました。プログラムはWindows XPで非常にうまく機能しますが、サウンドがありません。 Windows 7またはLinux Ubuntu。

これらすべてのOSにJava 6がインストールされており、標準のコンパイラーJAVACを使用してプログラムをコンパイルしました。

つまり、Javaは「クロスプラットフォーム」ではありません。

0
Gugelhupf

大きな問題は、モバイルアプリについて話しているときです。デスクトップOSの場合、Javaは完全に実行できますが、モバイルデバイスの場合、開発者は事実上、Android用にしか作成できません。 Totalcross のようなツールが役立ちますJava iOSおよびAndroid向けのアプリを開発する開発者。焦点は、モバイルを含むすべてのプラットフォームでWORAの前提を維持することです。

0
Bruno Muniz