Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript到javaapplet-工作_Java_Javascript_Applet_Signed_Accesscontrolexception - Fatal编程技术网

JavaScript到javaapplet-工作

JavaScript到javaapplet-工作,java,javascript,applet,signed,accesscontrolexception,Java,Javascript,Applet,Signed,Accesscontrolexception,这是我原来的帖子的延续: 我对Java还很陌生。我想创建一个Java小程序,它允许我的JavaScript将命令行传递给Java小程序。这只会在我的开发机器上运行-不需要提醒我这是什么安全问题。用例是我有一个ExtJS应用程序的内省器,它允许我显示类。我希望能够单击一个类,将相关路径名传递给Applet,并在Eclipse中打开该文件进行编辑 经过多次失败的测试,我发现这是可行的。感谢下面提到的和其他人 似乎有两条路,我已经设法让它们都工作了。我把它们都包括在这里。路径1是执行带有参数的程序(例

这是我原来的帖子的延续:

我对Java还很陌生。我想创建一个Java小程序,它允许我的JavaScript将命令行传递给Java小程序。这只会在我的开发机器上运行-不需要提醒我这是什么安全问题。用例是我有一个ExtJS应用程序的内省器,它允许我显示类。我希望能够单击一个类,将相关路径名传递给Applet,并在Eclipse中打开该文件进行编辑

经过多次失败的测试,我发现这是可行的。感谢下面提到的和其他人

似乎有两条路,我已经设法让它们都工作了。我把它们都包括在这里。路径1是执行带有参数的程序(例如
D:/Eclipse/Eclipse.exe--launcher.openFile C:/sites/test.js
),路径2是将Win7设置为在打开*.js文件时打开Eclipse(即将*.js与Eclipse关联)

安全免责声明:请记住,路径1在公共服务器上是完全不安全的-通过JavaScript传递格式化、删除命令或任何其他有害行为相对容易

对于像我这样的Java新手,我将尽可能明确地介绍这些步骤

用于执行程序的类。多谢:

用于运行与文件关联的程序的类:

    package systemcmd;


import java.applet.Applet;
import java.awt.Desktop;
import java.io.*;

public class Launchapp extends Applet {

    private static final long serialVersionUID = 1L;

    public void init() {
        // It seems that even though this command is not executed when the
        // applet is run via JS we still need to refer to the exec command here,
        // I presume so it is linked? If I comment these out altogether, the
        // applet doesnt work. Either of the following will suffice.
        // FYI. Just betraying my Java newbie status! :-)

        //launch("notepad c:/sites/test.txt");
        launch("calc");
    }
        // From https://stackoverflow.com/questions/1068271/signed-applet-gives-accesscontrolexception-access-denied-when-calling-from-jav
        // Thank you !!!
    public void launch(String command) {

        try {

            Desktop.getDesktop().open(new File(getParameter("command")));

        } catch (Exception exception) {
            exception.printStackTrace();
        }

    }

}
使用Eclipse,我将这两个类导出到一个名为runcombo.jar的jar文件中,该文件与下面的HTML文件位于同一文件夹中。然后我对jar进行了自签名,这也是安全问题所必需的。我发现本教程对这个过程很有帮助

HTML和JavaScript测试页面:

    <html>
    <head>
<script type="text/javascript">

    function exec( command ) {                                                                                                  
            var applet = "<object type='application/x-java-applet' height='100' width='100' name='jsApplet'><param name='code' value='systemcmd.Runcmd'/><param name='archive' value='runcombo.jar' /><param name='mayscript' value='true'/><param name='command' value='" + command + "'/>Applet failed to run.  No Java plug-in was found.</object>";

            var body = document.getElementsByTagName("body")[0];
            var div = document.createElement("div");
            div.innerHTML = applet;
            body.appendChild(div);
    }

    function launch( command ) {                                                                                                    
            var applet = "<object type='application/x-java-applet' height='100' width='100' name='jsApplet'><param name='code' value='systemcmd.Launchapp'/><param name='archive' value='runcombo.jar' /><param name='mayscript' value='true'/><param name='command' value='" + command + "'/>Applet failed to run.  No Java plug-in was found.</object>";

            var body = document.getElementsByTagName("body")[0];
            var div = document.createElement("div");
            div.innerHTML = applet;
            body.appendChild(div);
    }
</script>

    </head>
    <body>
             <a href="#" onclick="exec('notepad c:/sites/test.txt');">Exec Notepad</a>
        <br> <a href="#" onclick="exec('calc');">Exec Calculator</a>
        <br> <a href="#" onclick="exec('D:/Eclipse/eclipse.exe  --launcher.openFile C:/sites/test.js');">Exec Eclipse with command line parms</a>
        <br> <a href="#" onclick="launch('C:/sites/test2.txt');">Launch Notepad via *.txt association</a>
        <br> <a href="#" onclick="launch('C:/sites/test2.js');">Launch Eclipse via *.js association</a>
    </body>
</html>

函数执行器(命令){
var applet=“applet无法运行。找不到Java插件。”;
var body=document.getElementsByTagName(“body”)[0];
var div=document.createElement(“div”);
div.innerHTML=applet;
附体儿童(div);
}
函数启动(命令){
var applet=“applet无法运行。找不到Java插件。”;
var body=document.getElementsByTagName(“body”)[0];
var div=document.createElement(“div”);
div.innerHTML=applet;
附体儿童(div);
}




注意,当调用JS函数时,小程序被添加到DOM中。这是使用Java安全性的一部分,可以避免前面提到的导致小程序无法运行的安全问题。还要注意,有两个JS函数调用来匹配不同的类

再次感谢所有帮助我工作的人。现在我可以回到最初的目的——完成我的Ext Interspector


Murray

您不需要每次都创建小程序的新实例,使用小程序的mayscript标记,您可以告诉浏览器允许java脚本与小程序通信

您还应该清理init方法

<head>
    <script type="text/javascript">
    //whatToDo can be from an input box
    //in applet check if its del or rmdir or move or delete at a minimum
        function callJavaCmd (whatToDo) {
                // call the MessageBox method of the applet
            var applet = document.getElementById ("myApplet");
            applet.command (whatToDo);
        }

    </script>
</head>
<body>
    <applet id="myApplet" code="Your.class" codebase="/base/"
            mayscript="mayscript" style="width:300px; height:50px;">
    </applet>

//可以从输入框中执行哪些操作
//在小程序中,至少检查其del或rmdir或move或delete
函数callJavaCmd(whatToDo){
//调用小程序的MessageBox方法
var applet=document.getElementById(“myApplet”);
applet.command(whatToDo);
}

旧的netscape类是每个JVM(netscape.javascript)的一部分。

请注意,答案不应该是问题的一部分。你可以重写这个问题,把剩下的大部分写在答案里。
<head>
    <script type="text/javascript">
    //whatToDo can be from an input box
    //in applet check if its del or rmdir or move or delete at a minimum
        function callJavaCmd (whatToDo) {
                // call the MessageBox method of the applet
            var applet = document.getElementById ("myApplet");
            applet.command (whatToDo);
        }

    </script>
</head>
<body>
    <applet id="myApplet" code="Your.class" codebase="/base/"
            mayscript="mayscript" style="width:300px; height:50px;">
    </applet>