2015-05-27 7 views
2

Я пытаюсь получить Java-апплет для отображения в браузере - я знаю, что этот вопрос задан несколько раз, но я не могу похоже, нашли ответ, который работает специально для этого случая - за последние несколько дней я пробовал все: от перемещения HTML-файла до разных мест в структуре каталогов до использования <applet> против API deployJava().Как запустить Java-апплет в браузере: «Исключение класса не найдено»

Код работает нормально как автономный апплет в Eclipse, но когда я пытаюсь запустить его в браузере, я получаю исключение класса ClassNotFound или ClassDefNotFound. Я упаковал код в .jar и поместил .jar в той же папке, что и HTML-файл, с моей Java код следующим образом:

package myPackage; 
import java.awt.*; 
import java.applet.*; 

public class myClass extends java.applet.Applet{ 
    public void init(){ 
     String latLong = getParameter("unUsedParameter"); 
    } 

    public void paint(Graphics g){ 
     g.drawString("Hello World",50,25); 
    } 
} 

и код Javascript выглядит следующим образом:

<script src="https://www.java.com/js/deployJava.js"></script> 
<section id = "java"> 
    <script type="text/javascript"> 
     var attributes = { 
      code:'myClass.class', 
      archive: 'myApplet.jar', 
      width:500, height:500 
     }; 
     var parameters = {latLong: total_path}; 
     var version = '1.8'; 
     deployJava.runApplet(attributes, parameters, version); 
    </script> 
</section> 

Я также пробовал использовать codebase: 'myApplet.jar' вместо archive:, но это тоже не сработало - я получаю одно из двух исключений. ПОМОГИТЕ!

EDIT: Во-первых, в моем исходном сообщении атрибут был неправильным, он должен был читать 'myClass.class' (это исправлено выше). Ответ, который получил это, изменил атрибут code: на code: 'myApplet/myClass' - спасибо за помощь!

+1

У меня есть никогда не использовал апплет раньше, но разве вы не должны переходить к параметру 'code' имя класса? Вы передаете 'myApplet.class', когда класс называется' myClass'. –

+0

@EricMartinez Это должен быть ответ. Пожалуйста, дайте мне знать, если вы измените его на один. –

+0

@AndrewThompson Я не публиковал это как ответ, потому что я просто догадываюсь, как я уже сказал, я никогда не использовал и не писал апплет. –

ответ

1

Измените параметр 'code' на 'myPackage.myClass' вместо 'myApplet.class'.

У вас есть больше понимания о декларации в этом посте, который я показал путь, который работает Angular.js and Java Applet

т.е.

<script> 
    <!-- applet id can be used to get a reference to the applet object --> 
    var attributes = { id:'cdigApplet', code:'cdig.CDigApplet', archive:'cdig-applet-1.0.jar', width:1, height:1, classloader_cache:'false'} ; 
    var parameters = {persistState: false, cache_option:'no' } ; 
    deployJava.runApplet(attributes, parameters, '1.8'); 
</script> 

Мой Applet

package cdig; 

import java.applet.Applet; 
import java.security.AccessController; 
import java.security.PrivilegedAction; 
import java.util.Base64; 


/** 
* 
* @author Ulysses Marins 
*/ 
public class CDigApplet extends Applet 
{ 

    private static final long serialVersionUID = 1L; 

    String ret; 

    CDigApplet applet = this; 

    @SuppressWarnings({ "rawtypes", "unchecked" }) 
    public String signFile(String fileID, String pin, String token) 
    { 
     AccessController.doPrivileged(new PrivilegedAction() 
     { 
      @Override 
      public Object run() 
      { 
       try 
       { 
        File objFile = new File(token); 

        System.out.println("Iniciando processo de assinatura."); 

        objFile.sign("json", sig); 

         System.out.println(ret); 
        } else { 
         throw new IllegalArgumentException("Não foi possível iniciar processo de assinatura."); 
        } 

       } 
       catch (Exception e) 
       { 
        String sl = "{\"success\":false," + "\"message\":\"" + e.getMessage() + "\"}"; 
        ret = sl; 
        System.out.println(sl); 
       } 

       return null; 
      } 
     }); 

     return ret; 
    } 

    public void init(){ 
    } 

    public void destroy(){ 
    } 

} 
+0

Спасибо. Это исправлено! myPackage/myClass сделал трюк. Еще раз спасибо! –

0

Браузеры все больше и больше отказываются запускать апплеты. Chrome itself won't support the java plugin anymore very soon. Кроме того, Java сама требует более или более защищенных приложений. Ваша версия Java имеет большое значение. Versions >=7 require signed applications.

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

Совершенно очевидно, что вам необходимо хотя бы self-sign your applet и объявить некоторые свойства в манифесте баннера, например, тот факт, что вы хотите run the code in a sandbox (что немного ослабляет ограничения безопасности).

Смежные вопросы