各位前辈:系统是ubuntu 12.04,jdk-1.7.0_21。Applet的功能是执行本地的一个hello程序,获取hello程序的输出字符串,然后将字符串用g.drawString()画到窗口上。在eclipse里可以正常运行,将AppletHello.class嵌到html后,用appletviewer也可以运行.html文件。但是用浏览器打开.html文件,applet会运行,但是不能在窗口打印出"hello"字符串——就是Runtime.getRuntime().exec(command); 这句话的输出结果。
将AppletHello.class打包签名,修改java.policy,这些方法都试了。都没效果。代码:
AppletHello.java程序 1 import java.applet.Applet;
2 import java.awt.Graphics;
3 import java.io.*;
4
5 public class AppletHello extends Applet {
6 private static final long serialVersionUID = 1L;
7 String cmd;
8 String key;
9
10 public void init() {
11 System.out.println("init");
12 cmd = "sudo ./hello";
13 key = null;
14 }
15
16 public void start() {
17 System.out.println("start");
18 execCommand(cmd);
19 }
20
21 public void stop() {
22 System.out.println("stop");
23 }
24
25 public void destroy() {
26 System.out.println("destroy");
27 }
28
29 public int execCommand(String command) {
30 int execRes = -1;
31 try {
32 Process p = null;
33 InputStream is = null;
34 InputStreamReader isr = null;
35 BufferedReader br = null;
36
37 p = Runtime.getRuntime().exec(command);
38 is = p.getInputStream();
39 isr = new InputStreamReader(is);
40 br = new BufferedReader(isr);
41 String str = null;
42 if ((str = br.readLine()) != null) {
43 key = str;
44 System.out.println(str);
45 System.out.flush();
46 }
47
48 try {
49 int intWaitFor = p.waitFor();
50 System.out.println("intWaitFor:" + intWaitFor);
51 } catch (InterruptedException e) {
52 System.out.println("Error waitfor.\n");
53 e.printStackTrace();
54 }
55
56 int exitVal = p.exitValue();
57 execRes = exitVal; // when execRes == 0, success; execRes == 1, fail
58 System.out.println("exitVal:" + exitVal);
59 is.close();
60 isr.close();
61 br.close();
62
63 // p.destroy();
64
65 } catch (IOException e) {
66 System.out.println("Error exec.\n");
67 }
68
69 return execRes;
70 }
71
72 @Override
73 public void paint(Graphics g) {
74 g.drawString("key:" + key, 25, 25);
75 }
76 }linux applet签名打包浏览器
将AppletHello.class打包签名,修改java.policy,这些方法都试了。都没效果。代码:
AppletHello.java程序 1 import java.applet.Applet;
2 import java.awt.Graphics;
3 import java.io.*;
4
5 public class AppletHello extends Applet {
6 private static final long serialVersionUID = 1L;
7 String cmd;
8 String key;
9
10 public void init() {
11 System.out.println("init");
12 cmd = "sudo ./hello";
13 key = null;
14 }
15
16 public void start() {
17 System.out.println("start");
18 execCommand(cmd);
19 }
20
21 public void stop() {
22 System.out.println("stop");
23 }
24
25 public void destroy() {
26 System.out.println("destroy");
27 }
28
29 public int execCommand(String command) {
30 int execRes = -1;
31 try {
32 Process p = null;
33 InputStream is = null;
34 InputStreamReader isr = null;
35 BufferedReader br = null;
36
37 p = Runtime.getRuntime().exec(command);
38 is = p.getInputStream();
39 isr = new InputStreamReader(is);
40 br = new BufferedReader(isr);
41 String str = null;
42 if ((str = br.readLine()) != null) {
43 key = str;
44 System.out.println(str);
45 System.out.flush();
46 }
47
48 try {
49 int intWaitFor = p.waitFor();
50 System.out.println("intWaitFor:" + intWaitFor);
51 } catch (InterruptedException e) {
52 System.out.println("Error waitfor.\n");
53 e.printStackTrace();
54 }
55
56 int exitVal = p.exitValue();
57 execRes = exitVal; // when execRes == 0, success; execRes == 1, fail
58 System.out.println("exitVal:" + exitVal);
59 is.close();
60 isr.close();
61 br.close();
62
63 // p.destroy();
64
65 } catch (IOException e) {
66 System.out.println("Error exec.\n");
67 }
68
69 return execRes;
70 }
71
72 @Override
73 public void paint(Graphics g) {
74 g.drawString("key:" + key, 25, 25);
75 }
76 }linux applet签名打包浏览器
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货