小程序和库

时间:2011-01-04 00:07:06

标签: java deployment jar applet libraries

我的applet没有看到外部库。一切都可以使用appletviewer,但不能使用浏览器。我在我的“test_applet”文件夹中放入了包含applet类的jar(TreC-Vis.jar),TreC-Vis使用的四个jar库以及带有以下applet标记的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控制台为四个jar库中的每一个提供了java.io.FileNotFoundException。 我指定从相应的Eclipse项目导出TreC-Vis.jar,我将这些库放在“src”包的同一级别的“lib”文件夹中。

我写的applet标签有什么问题? 阅读这里的教程

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

我一直在考虑将所有东西,applet和库放在一个jar中作为解决方案的可能性,但我需要一些注释中提到的“自定义代码”的例子。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

  

我的applet没有看到外部库。 ..他们只是本地图书馆,.. .class文件..

行。如果那时,你的意思是“。native”,就像.dll,.so等类型的文件一样,这对applet来说是有问题的,因为除非它们已经安装在用户系统的相应目录中,否则它们不能使用本机。

话虽如此,最近的发展允许我们使用Java webstart(JWS)部署嵌入式applet。 JWS很容易使用原生代。只需将它们放在Jar文件的根目录中,然后将它们添加到(基于XML)启动文件(文件类型.jnlp)中的nativelib元素中。

更好的是,JWS可以将下载分成不同操作系统的资源,因此Windows获取.dll本机,而* nix获取.so本机。

JWS提供了许多更有用的功能,但重要的是它们可以使小程序可以使用本机。

在applet中使用本机库,需要信任小程序。

答案 1 :(得分:0)

jar cfm MyApplet.jar MyManifest.txt MyPackage1 MyPackage2 MyPackage3 

这是我正在寻找的那条线。这样我就把我的清单放在了外部库的类路径中。

答案 2 :(得分:0)

这是我的代码以及我如何使用本机库。它在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相同的文件夹中。

当我在资源部分放置hello.jar(包含hello.dll)时它在​​windows中工作但在Linux中我收到了上述错误。