Я довольно новичок в Java. Я хочу создать Java-апплет, который позволит моему JavaScript передавать командную строку в Java-апплет. Это будет работать только на моей машине разработки - не нужно напоминать мне, что такое проблема безопасности. Вариант использования заключается в том, что у меня есть интроспектор моего приложения ExtJS, который позволяет мне отображать классы. Я хочу иметь возможность щелкнуть класс, передать соответствующее имя пути в апплет и открыть этот файл в Eclipse для редактирования.JavaScript для Java Applet с использованием DeployJava.js для запуска командной строки
Я использую Win7x64, JRE 1.7
Итак, чтобы получить Eclipse, чтобы открыть файл из командной строки команду:
D:\Eclipse\eclipse.exe --launcher.openFile C:\mytestfile.js
Это работает.
Я написал Апплет, сам подписал его и протестировал метод say(), используя приведенный ниже код. Это работает. Однако, когда я запускаю метод executecmd(), я не получаю никакого вывода. Если я прокомментирую весь блок try/catch, так что я просто возвращаю строку cmd, переданную, метод работает. Поэтому я подозреваю, что у меня неправильно установлена настройка try catch, и поскольку мои навыки Java и знание исключений примитивны, я теряюсь.
Может ли кто-нибудь мне помочь? По крайней мере, чтобы получить возвращаемый результат, если не как выполнить прогон командной строки?
И я передаю всю командную строку, потому что, когда у меня есть эта работа, я хотел бы поделиться ею (так как интроспектор Ext действительно полезен). Другие разработчики будут использовать разные редакторы, чтобы таким образом они могли использовать его, передав свою конкретную командную строку.
Спасибо! Мюррей
Мой HTML тестовой страницы:
<html>
<head>
<meta charset="UTF-8">
<title>Test Run</title>
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = { id:'testapp', code:'systemcmd.Runcmd', archive:'runcmd.jar', width:300, height:50} ;
var parameters = {} ;
deployJava.runApplet(attributes, parameters, '1.6');
</script>
</head>
<body>
<p>Hello</p>
<script type="text/javascript">
//alert(testapp.say("Hello test")); // This works
var command = "D:\Eclipse\eclipse.exe --launcher.openFile C:\mytestfile.js";
alert(testapp.executecmd(command)); // Nothing returned at all.
</script>
</body>
</html>
Мой класс:
package systemcmd;
import java.applet.Applet;
import java.io.IOException;
import java.security.AccessController;
//import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
public class Runcmd extends Applet {
private static final long serialVersionUID = -4370650602318597069L;
/**
* @param args
*/
public static void main(String[] args) {
}
public String say(String arg)
{
String msg[] = {null};
msg[0] = "In Say. You said: " + arg;
String output ="";
for(String str: msg)
output=output+str;
return output;
}
public String executecmd(final String cmd) throws IOException
{
final String msg[] = {null};
String output ="";
msg[0] = "In executecmd, cmd="+cmd;
try {
try {
AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws IOException { //RuntimeException,
msg[1] = " Pre exec()";
Runtime.getRuntime().exec(cmd);
msg[2] = " Post exec()";
return null;
}
}
);
} catch (PrivilegedActionException e) {
msg[3] = " Caught PrivilegedActionException:"+ e.toString();
throw (IOException) e.getException();
}
}
catch (Exception e) {
msg[4] = " Command:" + cmd + ". Exception:" + e.toString();
}
msg[5] = " End of executecmd.";
for(String str: msg)
output=output+str;
return output;
}
}
Я наконец получил эту работу. См [http://stackoverflow.com/questions/16313702/javascript-to-java-applet-working] [ 1] для рабочего примера [1]:... http://stackoverflow.com/questions/16313702/javascript-to-java-applet-working – Murrah