Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > загрузка динамической библиотеки


Автор: MikeLP 15.5.2009, 23:40
Здравствуйте! Помогите пожалуйста!!!
У меня такая задача: 
У меня есть библиотека (.dll), сделаная через JNI, которая взаимодействует с USB-портом. Так вот, мне надо загрузить её через web-страницу, т.е. через java-апплет.

код, который работает через консоль:

Код

import java.io.*;
import java.lang.*;
public class a3
{
    static 
    {
        System.loadLibrary("cproga");
    }
   public native int enumdev();
   public native int checkPass(String pass);

   public static void main(String[] args) throws IOException
   {    
      a3 dev = new a3();
      dev.enumdev();

      System.out.print("Enter You Password : ");
      BufferedReader bReader = new BufferedReader (new InputStreamReader(System.in));
      String pin = bReader.readLine();

      dev.checkPass(pin);
   }

}


пытался реализовать в ява аплете следуя инструкциям http://www.xs4all.nl/~vkessels/articles/jnijarapplet.html

файл a3.java:
Код

import java.net.URL;
import java.io.InputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.*;
import java.lang.*;

public class a3 {
    /** The JNI method to the DLL */
    public native int enumdev();
    public native int checkPass(String pass);

    /** Load the library from the JAR file */
    static {
        try {
            /* Get DLL from JAR file */
            URL res = a3.class.getResource("cproga.dll");
            InputStream is = res.openStream();

            /* Define the destination file */
            File dll = File.createTempFile("cproga",".dll");

            /* Open the destination file */
            FileOutputStream fos = new FileOutputStream(dll);

            /* Copy the DLL fro the JAR to the filesystem */
            byte[] array = new byte[1024];
            for(int i=is.read(array);
                i!=-1;
                i=is.read(array)
            ) {
                fos.write(array,0,i);
            }

            /* Close all streams */
            fos.close();
            is.close();

            /* Load the DLL from the filesystem */
            System.load(dll.getAbsolutePath());
        }
        catch(Throwable e)
        {
            e.printStackTrace();
        }
    }

    /** Command-line main for testing */
    public static void main(String[] args) {
      a3 dev = new a3();
      dev.enumdev();
    }
}

файл a3Applet.java:
Код
import javax.swing.JApplet;
import javax.swing.JLabel;

public class a3Applet extends JApplet {
    public void init() {
        a3 dev = new a3();
        dev.enumdev();

        getContentPane().add(new JLabel("Hello Applet"));
    }
}


файл a3.html:
Код
<html>
  <head>
    <title>Hello Applet</title>
  </head>
  <body>
    <!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<OBJECT 
    classid = "clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA"
    codebase = "http://java.sun.com/update/1.4.2/jinstall-1_4_2_06-windows-i586.cab#Version=1,4,2,60"
    WIDTH = "100" HEIGHT = "50" >
    <PARAM NAME = CODE VALUE = "a3" >
    <PARAM NAME = ARCHIVE VALUE = "a3.jar" >
    <PARAM NAME = "type" VALUE = "application/x-java-applet;jpi-version=1.4.2_06">
    <PARAM NAME = "scriptable" VALUE = "false">

    <COMMENT>
    <EMBED 
            type = "application/x-java-applet;jpi-version=1.4.2_06" \
            CODE = "a3" \
            ARCHIVE = "a3.jar" \
            WIDTH = "100" \
            HEIGHT = "50" \
        scriptable = false \
        pluginspage = "http://java.sun.com/products/plugin/index.html#download">
        <NOEMBED>
            
            </NOEMBED>
    </EMBED>
    </COMMENT>
</OBJECT>

<!--
<APPLET CODE = "a3" ARCHIVE = "a3.jar" WIDTH = "100" HEIGHT = "50">


</APPLET>
-->


<!--"END_CONVERTED_APPLET"-->

  </body>
</html>


файлы .jar и .keystore созданы, всё подписано, единственное что не знаю, что насчет java.policy...

Выдаёт ошибку такого рода: Could not instantiate 

java.lang.ClassCastException: a3 cannot be cast to java.applet.Applet
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

ПОМОГИТЕ, ПОЖАЛУЙСТА !!!

Автор: LSD 18.5.2009, 16:07
Дык почему у тебя в HTML a3, а не a3Applet?

Автор: MikeLP 18.5.2009, 18:05
уже исправил, но не помогает

Автор: LSD 19.5.2009, 11:25
А какая там теперь ошибка, мы должны протелепатить?

Автор: MikeLP 19.5.2009, 18:51
спасибо, разобрался
теперь другой вопрос...

Как передать из библиотеки в java-файл строку...

Число передаю так:
Код

    cls = env->GetObjectClass(obj);
    fid = env->GetFieldID(cls,"java_num","I");
    env->SetIntField(obj,fid,dll_num);


как со строкой??? подскажите! плззз

Автор: LSD 20.5.2009, 17:27
Модератор: Пожалуйста, один топик - один вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)