【问题标题】:Limitations of Java desktop applications?Java 桌面应用程序的局限性?
【发布时间】:2009-06-10 16:22:40
【问题描述】:

我来自 C/C++ 背景,现在做了很多 C# 工作。

最近我开始对用 Java 做一些项目感兴趣,因为我在玩 Android SDK。

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

在桌面/服务器应用环境中,有哪些限制?

【问题讨论】:

    标签: java security desktop-application sandbox restriction


    【解决方案1】:

    Java 应用程序位于沙盒中,就像 .NET 应用程序位于沙盒中一样。它们都在各自的虚拟机上运行,​​并且对于它们的功能确实有一些限制,但在大多数情况下,它们对系统有很多访问权限,包括通过某些调用访问本机代码。

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

    这里有一个关于Security Restrictions 的部分,用于来自The Java Tutorials 的小程序,其中包括对小程序的限制列表。

    【讨论】:

      【解决方案2】:

      通常桌面和服务器应用程序在禁用安全性的情况下运行。但是,Java 和 JVM 仍然有一个健壮的类型系统,因此您不能例如强制转换为不是创建对象时使用的类型,不能访问已释放的内存,也不能在缓冲区末尾运行。

      【讨论】:

        【解决方案3】:

        对于普通的桌面和服务器应用程序,这些限制与沙盒概念无关(尽管您可以使用它对例如用户提交的代码应用非常细粒度的限制),而是与 Java 的平台无关性有关。基本上,操作系统特定的东西和硬件访问通常不能在纯 JAVA 中完成,除非 API 库特别处理。

        例如:

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

        【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-28
          • 1970-01-01
          相关资源
          最近更新 更多