Applet的打印问题
各位高手,我在APPLET中(IE下)要打印APPLET自己,但总是出现如下ERROR
java.security.AccessControlException: access denied (java.lang.RuntimePermission queuePrintJob )
at java.security.AccessControlContext.checkPermission(AccessControlContext.java, Compiled Code)
at java.security.AccessController.checkPermission(AccessController.java, Compiled Code)
at java.lang.SecurityManager.checkPermission(SecurityManager.java, Compiled Code)
at java.lang.SecurityManager.checkPrintJobAccess(SecurityManager.java:1314)
at java.awt.print.PrinterJob.getPrinterJob(PrinterJob.java:40)
at teethDiagram.printTeethDiagram(teethDig.java:1824)
at BtnColor.actionPerformed(BtnColor.java:218)
at java.awt.Button.processActionEvent(Button.java:308)
at java.awt.Button.processEvent(Button.java:281)
at java.awt.Component.dispatchEventImpl(Component.java, Compiled Code)
at java.awt.Component.dispatchEvent(Component.java, Compiled Code)
at java.awt.EventQueue.dispatchEvent(EventQueue.java, Compiled Code)
at java.awt.EventDispatchThread.pumpOneEventForComponent(EventDispatchThread.java, Compiled Code)
at java.awt.EventDispatchThread.pumpEventsForComponent(EventDispatchThread.java:95)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:90)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exit code: 0
原因是在调用 getPrinterJob() 方法时没有权限,如何是好?
在JAVA2图形设计一书中的例子也不行。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.Properties;
public class PrintApplet extends Applet {
Button printButton = new Button("print ...");
static Frame getFrame(Component c) {
while((c = c.getParent()) != null) {
if(c instanceof Frame)
return (Frame)c;
}
return null;
}
static void printComponents(Component c) {
Toolkit tk = Toolkit.getDefaultToolkit();
Frame frame = getFrame(c);
Properties props = new Properties();
props.put("awt.print.printer", "durango");
props.put("awt.print.numCopies", "2");
if(tk != null) {
String name = c.getName() + " print job";
PrintJob pj = tk.getPrintJob(frame, name, props);//没有权限
if(pj != null) {
Graphics pg = pj.getGraphics();
if(pg != null) {
try {
c.printAll(pg);
}
finally {
pg.dispose();
}
}
pj.end();
}
System.out.println(props);
}
}
public void init() {
add(printButton);
add(new Label("print this label"));
add(new TextField("print this textfield"));
add(new TextArea(10,20));
printButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
printComponents(PrintApplet.this);
}
});
}
}