2009-06-10 7 views
4

私はC/C++の背景から来て、今はC#のものをたくさんしています。Javaデスクトップアプリケーションの制限?

最近、私はAndroid SDKを使いこなして以来、Javaでいくつかのプロジェクトをやりたいと思っています。

Javaアプリケーションは、システムへのアクセスを制限するサンドボックス内で実行されることがわかりました。

デスクトップ/サーバーアプリケーション環境では、どのような制限がありますか?

答えて

2

通常のデスクトップアプリケーションやサーバーアプリケーションの場合、制限はサンドボックスのコンセプトとは無関係です(ただし、ユーザーが提出したコードなどに非常にきめ細かな制限を適用できます)が、Javaのプラットフォームに依存しない性質です。基本的には、OS固有のものやハードウェアアクセスは、APIライブラリが特別なことをしない限り、通常は純粋なJAVAで実行できません。

例は次のとおりです。

  • Windowsレジストリ
  • Windowsシステムトレイ
  • ブルートゥース
  • WLAN構成
+1

だけnitpickし、Java 6の中にあなたが実際にシステムトレイにアクセスすることができます。 http://java.sun。com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray /しかし、あなたの基本的なポイントは立っています。 – sleske

4

通常、デスクトップおよびサーバーアプリケーションは、セキュリティを無効にして実行されます。ただし、JavaとJVMには堅牢なタイプのシステムがあります。したがって、オブジェクトが作成されていないタイプ、解放されたメモリにアクセスできないタイプ、およびバッファの最後から実行できないタイプにキャストすることはできません。

9

.NETアプリケーションはサンドボックス内にあるため、Javaアプリケーションは多くの場合サンドボックス内にあります。彼らはそれぞれの仮想マシン上で動作し、できることについていくつかの制限がありますが、ほとんどの場合、特定の呼び出しによってネイティブコードにアクセスするなど、システムへのアクセスが豊富です。

ブラウザ内で動作するJava appletsについて考えているかもしれません。通常、ローカルファイルなどのシステムリソースへのアクセスを禁止するセキュリティサンドボックス内にあります。

ここでは、アプレットに適用される制限事項のリストを含む、The Java Tutorialsのアプレットのセクションがあります(Security Restrictionsを参照してください)。

0

私はあなたが見るかもしれない主な制限は、簡単ににできることだと思うあなたが必要な場合は、JavaからUSER32またはkernel32のAPIを使用するために必要な場合、私はそれが可能だと思う例えば、ネイティブシステムのAPIのを使用しますしかし、それは簡単な作業ではありませんが、C#ではそれはかなり簡単です。

また、従来のC/C++のDLLを使用している場合でも、C#アプリケーションで使用することはできますが、Javaでは依然として最悪の場合、ネイティブコードapiでポインタを使用する必要があります。 C#アプリケーションで安全ではないモードを使用してポインタを渡し、スタック上に固定メモリを割り当てます。

上記のようにJava & C#は一般的に、特に独立したプラットフォームをターゲットにしている場合は非常に同じ制限があります。