2015-12-24 2 views
1

Мне нужно распечатать некоторую информацию с помощью апплета. Мой апплет из подписанного QDS-client.jar:Вызов метода апплета из JavaScript

public class PrintText extends Applet implements Printable { 

private ClientAccount clientAccount; 

public ClientAccount getClientAccount() { 
    return clientAccount; 
} 

public void setClientAccount (ClientAccount clientAccount) { 
    this.clientAccount = clientAccount; 
} 

public void setClientAccountFromJSON(String json) { 
    this.clientAccount = toClientAccountFromJSON(json); 
    System.out.println("------------------------------SetClient"); 
} 

public int print(Graphics g, PageFormat format, int page) throws 
     ... 
} 

public void printText() throws PrinterException { 
    ... 
} 

private String getTextToPrint(ClientAccount clientAccount) throws PrinterException { 
    ... 
} 

private ClientAccount toClientAccountFromJSON(String json) { 
    return JsonUtils.fromJson(ClientAccount.class, json); 
} 

public void startPrint() { 
    System.out.println("------------------------------------------Start"); 
} 
} 

Accordinng JNLP:

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.5+" codebase="http://localhost:10099/partials/" href="print.jnlp"> 
    <information> 
     .... 
    </information> 

<resources> 
    <jar href="/partials/qds-client.jar"/> 
    <jar href="/partials/core-3.2.1.jar"/> 
    <jar href="/partials/gson-2.3.1.jar"/> 
</resources> 

<applet-desc name="printText" main-class="com.qdsrest.utils.printer.PrintText" width="500" height="200"></applet-desc> 

<update check="background"/> 
<security> 
    <all-permissions/> 
</security> 

и HTML тег:

<applet name="printApplet" jnlp_href="/partials/print.jnlp" width="10" height="10"> 
<param name="permissions" value="all-permissions"/> 
</applet> 

Когда я вызываю метод апплета из JS-файла, как это :

document.printApplet.setClientAccountFromJSON({/not empty/}); 

я

Error: Error calling method on NPObject! 

в Mozilla и

basic: JNLP2ClassLoader.findClass: com.google.gson.internal.bind.CollectionTypeAdapterFactory: try again .. 
basic: JNLP2ClassLoader.findClass: com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter: try again .. 
basic: JNLP2ClassLoader.findClass: com.google.gson.internal.bind.MapTypeAdapterFactory: try again .. 
basic: JNLP2ClassLoader.findClass: com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter: try again .. 
basic: JNLP2ClassLoader.findClass: com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory: try again .. 

в Java Console и метод не работает. Почему я «попробую еще раз ...»? Что это значит? Метод toClientAccountFromJSON использует GSON lib gson-2.3.1.jar, который отлично десериализует объект JSON в объект Java. Что я делал неправильно? Скажите, пожалуйста, правильный способ мышления.

ответ

0

Я не помню текущие детали, но давно в эпоху первых войн браузера, когда-то был атрибут mayscript, необходимый вашему апплетам, чтобы поговорить с javascript.

О и параметр должен быть строкой:

setClientAccountFromJSON("somestring or stringvar"); 
+0

К сожалению, это не работает. – Uranium

+0

Какое изменение вы сделали? Какой результат? – Jan

+0

Первое: добавлено attr mayscript = "true" на Uranium