繁体   English   中英

Java桌面应用程序的局限性?

[英]Limitations of Java desktop applications?

我来自C / C ++背景,现在做了很多C#的东西。

最近,我开始对使用Android SDK进行一些Java项目感兴趣。

我知道Java应用程序在沙箱中运行,可以限制他们对系统的访问。

在桌面/服务器应用程序环境中,哪种东西受到限制?

由于.NET应用程序位于沙箱中,因此Java应用程序位于沙箱中。 它们都在各自的虚拟机上运行,​​并且对它们可以做什么有一些限制,但是在大多数情况下,它们可以对系统进行大量访问,包括通过某些调用访问本机代码。

您可能正在考虑在浏览器中运行的Java applet ,并且通常位于安全沙箱中,该沙箱会阻止访问本地文件等系统资源。 (可以通过专门授予对某些小程序的系统访问权限来规避此限制。)

以下是“Java教程”中有关applet 安全限制的部分,其中包含对applet的限制列表。

通常桌面和服务器应用程序在禁用安全性的情 但是,Java和JVM仍然具有健壮的类型系统,因此您无法例如强制转换为未创建对象的类型,无法访问释放的内存并且无法在缓冲区末尾运行。

对于普通的桌面和服务器应用程序,这些限制与沙箱概念无关(尽管您可以使用它来对用户提交的代码应用非常细粒度的限制),但与Java的独立平台性质无关。 基本上,除非API库特别强调,否则通常无法在纯JAVA中完成特定于操作系统的内容和硬件访问。

例如:

  • Windows注册表
  • Windows系统托盘
  • 蓝牙
  • WLAN配置

我认为您可能会看到的主要限制是,如果您需要,可以轻松使用本机系统API,例如,如果您需要使用java中的user32或kernel32 API,我认为这是可能的,但这不是一件容易的事要做,但在C#中这是相当容易的事情。

此外,如果您有一些遗留的C / C ++ DLL,您仍然可以在C#应用程序中使用它们,而在Java中仍然很难做到,尤其是在最糟糕的情况下,当您的本机代码api必须使用指针时,您可以使用不安全模式C#应用程序传递指针并在堆栈上分配固定内存......等

但如上所述,Java&C#通常具有相同的局限性,特别是如果您的目标是独立平台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM