Апплет и библиотеки - PullRequest
       20

Апплет и библиотеки

0 голосов
/ 04 января 2011

Мой апплет не видит внешние библиотеки.Все работает, используя appletviewer, но не используя браузер.Я поместил в папку «test_applet» jar (TreC-Vis.jar), содержащий классы апплета, четыре библиотеки jar, используемые TreC-Vis, и html-файл со следующим тегом апплета:

<applet code="gui.Gui" archive="TreC-Vis.jar,postgresql-8.4-701.jdbc4.jar,postgis_1.5.0.jar,jfreechart-1.0.13.jar,jcommon-1.0.16.jar" width="1024" height="768"> </applet>

Консоль Java дает мне исключение java.io.FileNotFoundException для каждой из четырех библиотек jar.Я указываю, что я экспортировал TreC-Vis.jar из соответствующего проекта Eclipse, в котором я поместил эти библиотеки в папку «lib» на том же уровне пакета «src».

Что не так с апплетомтег я написал?Читая учебное пособие здесь

http://download.oracle.com/javase/tutorial/deployment/jar/downman.html

Я рассматривал возможность поместить все, апплет и библиотеки, в одну банку в качестве решения, но мне понадобится пример «Пользовательский код », упомянутый в примечании.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 января 2011
jar cfm MyApplet.jar MyManifest.txt MyPackage1 MyPackage2 MyPackage3 

Это была строка, которую я искал. Таким образом, я указал в своем манифесте путь к классам внешних библиотек.

0 голосов
/ 01 июля 2013

Вот мой код и как я использовал нативные библиотеки в этом.Он работает в Windowes, но не работает в Linux, и я получаю

доступ запрещен ("java.lang.RuntimePermission" "loadLibrary.hello")

Вот мой JNLP:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">

    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+"
              href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="applet.jar" main="true" />
        <nativelib download="eager" href="libhello.jar"/>
    </resources>
    <applet-desc 
         name="Math Applet"
         main-class="NativeHelloApplet"
         width="10"
         height="1">
     </applet-desc>
     <update check="background"/>
</jnlp>

Мой апплет:

import java.security.*;
import javax.swing.*;

public class NativeHelloApplet extends JApplet
{
    public native String displayHelloWorld();
    public native int initPKE (int[] retVal); 

    public NativeHelloApplet() {   
    }

    public void init()
    {
        // privileged code goes here, for example:
        System.loadLibrary("hello");
        getContentPane().add(new JLabel("Test"));
        getContentPane().add(new JLabel(displayHelloWorld()));
    }
}

Мой собственный .c код:

#include <jni.h>
#include "NativeHelloApplet.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL
Java_NativeHelloApplet_displayHelloWorld(JNIEnv *env, jobject obj)
{
    return (*env)->NewStringUTF(env,"Hello world!\n");
}

Моя HTML-страница:

<Html>
<Head>
<Title>Java Example</Title>
</Head>
<Body>
This is my page<br>
Below you see an applet<br>
<br>
<script language="javascript" type="text/javascript" src="deployJava.js"></script>
 <script>
            var attributes = {
                id:         "sswSignApplet",
                code:       "NativeHelloApplet",
                width:      300,
                height:     60
            };
            var parameters = {jnlp_href:"launch.jnlp"}; <!-- Applet Parameters -->
            var version = "1.6"; <!-- Required Java Version -->
            deployJava.runApplet(attributes, parameters, version);
        </script>
</Body>
</Html> 

libhello.jar содержит общий объект моего собственного кода и находится в той же папке, что и html и jnlp.

Он работает в Windows, когда я помещаю hello.jar (содержащий hello.dll) в раздел ресурсов, но в Linux яполучил указанную ошибку.

0 голосов
/ 04 января 2011

Мой апплет не видит внешние библиотеки...Это просто нативные библиотеки, .. .class файлы ..

ОК.Если в этом случае вы имеете в виду «нативы», как в файлах типа .dll, .so и т. Д., То это проблематично для апплета, поскольку они не могут использовать нативы, если они уже не установлены в соответствующем каталоге пользовательской системы.

Сказав это, последние разработки позволяют нам развертывать встроенный апплет с использованием веб-запуска Java (JWS).JWS позволяет легко использовать туземцев.Просто поместите их в корень файла Jar и добавьте их в элемент nativelib в файле запуска (на основе XML) (тип файла .jnlp).

Более того, JWS может разделять загрузки на ресурсы для различныхоперационные системы, поэтому Windows получает файлы с расширением .dll, а * nix - файлы с расширением .so.

JWS предлагает гораздо больше полезных функций, но здесь важно то, что они могут сделать нативы доступными для апплетов.

Использование нативных библиотек в апплете требует доверия к апплету.1013 *

...