# 观察受限制的应用程序

> 原文： [https://docs.oracle.com/javase/tutorial/security/toolsign/rstep1.html](https://docs.oracle.com/javase/tutorial/security/toolsign/rstep1.html)

[控制应用程序快速浏览](../tour2/index.html)课程的最后一部分显示了如何通过使用新的`-Djava.security.manager`命令行参数调用解释器在安全管理器下运行应用程序。但是如果要调用的应用程序驻留在 JAR 文件中呢？

其中一个解释器选项是`-cp`（用于类路径）选项，它允许您为应用程序类和资源指定搜索路径。因此，要在`sCount.jar` JAR 文件中执行`Count`应用程序，指定文件`C:\TestData\data`作为其参数，可以在包含`sCount.jar`的目录中键入以下命令：

```
java -cp sCount.jar Count C:\TestData\data

```

要使用安全管理器执行应用程序，请添加`-Djava.security.manager`，如下所示：

```
java -Djava.security.manager -cp sCount.jar Count C:\TestData\data

```

* * *

**重要：**运行此命令时，Java 解释器将抛出如下所示的异常：

```
Exception in thread "main" java.security.AccessControlException:
access denied (java.io.FilePermission C:\TestData\data read)
    at java.security.AccessControlContext.checkPermission(Compiled Code)
    at java.security.AccessController.checkPermission(Compiled Code)
    at java.lang.SecurityManager.checkPermission(Compiled Code)
    at java.lang.SecurityManager.checkRead(Compiled Code)
    at java.io.FileInputStream.<init>(Compiled Code)
    at Count.main(Compiled Code)

```

在此示例中，`AccessControlException`报告`count`应用程序无权读取文件`C:\TestData\data`。您的解释器引发了此异常，因为它不允许在安全管理器下运行的任何应用程序读取文件或访问其他资源，除非它有明确的权限这样做 - 通常在`policy`中包含的`grant`语句中指定文件。

* * *