简体   繁体   English

在Eclipse中创建JTwain小程序

[英]Creating a JTwain applet in Eclipse

I'm doing a bit of testing with the JTwain Library. 我正在使用JTwain库进行一些测试。 I need to attach scanning functionality to a Django App. 我需要将扫描功能附加到Django应用。 I've got a bit of code that will run locally but I can't make it work in an applet. 我有一些将在本地运行的代码,但是我无法使其在applet中工作。

I'm back, trying to get the demo applet to run. 我回来了,试图让演示小程序运行。 I've created an eclipse 'runable jar' (I've had to add a dummy Main to one of the classes). 我创建了一个日食“可运行的jar”(我必须在其中一个类中添加一个虚拟Main)。 And I'm getting the following output from the plugin console when I load the page in a browser - 在浏览器中加载页面时,我从插件控制台获得以下输出-

    java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.AspriseJTwain)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkLink(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.asprise.util.jtwain.SourceManager.init(SourceManager.java:222)
    at com.asprise.util.jtwain.SourceManager.<init>(SourceManager.java:36)
    at com.asprise.util.jtwain.SourceManager.instance(SourceManager.java:28)
    at JTwainApplet.scan(JTwainApplet.java:39)
    at JTwainApplet.init(JTwainApplet.java:69)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
java.lang.UnsatisfiedLinkError: com.asprise.util.jtwain.lowlevel.Control.performAction(ILjava/lang/Object;)Z
    at com.asprise.util.jtwain.lowlevel.Control.performAction(Native Method)
    at com.asprise.util.jtwain.lowlevel.Control.unloadSourceManager(Control.java:93)
    at com.asprise.util.jtwain.SourceManager.closeSourceManager(SourceManager.java:120)
    at JTwainApplet.scan(JTwainApplet.java:57)
    at JTwainApplet.init(JTwainApplet.java:69)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Scan

Below is the structure of the Jar I've created. 下面是我创建的Jar的结构。

C:\PythonProjects\CacheProject\media\java>jar tf demo.jar
META-INF/MANIFEST.MF
JTwainApplet.class
ImageDisplayer$1.class
ImageDisplayer.class
META-INF/
META-INF/ASPRISE.DSA
com/
com/asprise/
com/asprise/util/
com/asprise/util/jtwain/
com/asprise/util/jtwain/ImageGenerator.class
com/asprise/util/jtwain/InvalidStateException.class
com/asprise/util/jtwain/JTwainConstants.class
com/asprise/util/jtwain/JTwainException.class
com/asprise/util/jtwain/OperationException.class
com/asprise/util/jtwain/Source.class
com/asprise/util/jtwain/SourceManager.class
com/asprise/util/jtwain/lowlevel/
com/asprise/util/jtwain/lowlevel/Capability.class
com/asprise/util/jtwain/lowlevel/Control.class
com/asprise/util/jtwain/lowlevel/DataType.class
com/asprise/util/jtwain/lowlevel/DataTypeIdentity.class
com/asprise/util/jtwain/lowlevel/DataTypeImageInfo.class
com/asprise/util/jtwain/lowlevel/DataTypeImageLayout.class
com/asprise/util/jtwain/lowlevel/DataTypeVersion.class
com/asprise/util/jtwain/lowlevel/ItemType.class
com/asprise/util/jtwain/lowlevel/ItemTypeFix32.class
com/asprise/util/jtwain/lowlevel/ItemTypeFrame.class
com/asprise/util/jtwain/lowlevel/ItemTypeInteger.class
com/asprise/util/jtwain/lowlevel/ItemTypeString.class
com/asprise/util/jtwain/lowlevel/OperationResult.class
com/asprise/util/jtwain/lowlevel/ValueContainer.class
com/asprise/util/jtwain/lowlevel/ValueContainerArray.class
com/asprise/util/jtwain/lowlevel/ValueContainerEnumeration.class
com/asprise/util/jtwain/lowlevel/ValueContainerOneValue.class
com/asprise/util/jtwain/lowlevel/ValueContainerRange.class
com/asprise/util/jtwain/web/
com/asprise/util/jtwain/web/FileUploader.class
com/asprise/util/jtwain/web/ImageDisplayPanel.class
com/asprise/util/jtwain/web/UploadApplet.class
com/asprise/util/jtwain/web/UploadApplet_buttonCheckJTwain_actionAdapter.class
com/asprise/util/jtwain/web/UploadApplet_buttonInstallJVM_actionAdapter.class
com/asprise/util/jtwain/web/UploadApplet_buttonScan_actionAdapter.class
com/asprise/util/jtwain/web/UploadApplet_buttonUpload_actionAdapter.class
com/asprise/util/jtwain/web/UploadApplet_labelURL_mouseAdapter.class
com/asprise/util/jtwain/web/UploadApplet_useProxy_actionAdapter.class

And here's the Code for the JTwainApplet 这是JTwainApplet的代码

    import java.applet.Applet;
import java.awt.HeadlessException;
import java.awt.Image;

import com.asprise.util.jtwain.Source;
import com.asprise.util.jtwain.SourceManager;

/*
 * $Id$
 * 
 */

/**
 * @author  JACK    (Jan 19, 2004)
 */
public class JTwainApplet extends Applet {

    /**
     * @throws java.awt.HeadlessException
     */
    public JTwainApplet() throws HeadlessException {
        super();
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
    }
    /* (non-Javadoc)
     * @see java.applet.Applet#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
    }

    public void scan() {
            try {
                // SourceManager.setLibraryPath("E:\\Twain\\Asprise\\JT\\Debug\\JT.dll");
                Source source = SourceManager.instance().getDefaultSource();

                if(source == null) {
                    System.err.println("There is no (default) source on the system!");
                    return;
                }

                source.open();

                Image image = source.acquireImage();

                new ImageDisplayer("DemoSimple", image);

                source.close();

            }catch(Exception e) {
                e.printStackTrace();
            }finally{
                SourceManager.closeSourceManager();
            }
    }

    /* (non-Javadoc)
     * @see java.applet.Applet#init()
     */
    public void init() {
        super.init();

        System.out.println("Init.");

        scan();

        System.out.println("Scan");
    }

    /* (non-Javadoc)
     * @see java.applet.Applet#start()
     */
    public void start() {
        // TODO Auto-generated method stub
        super.start();
    }

    /* (non-Javadoc)
     * @see java.applet.Applet#stop()
     */
    public void stop() {
        // TODO Auto-generated method stub
        super.stop();
    }

}

Lastly my jnpl and html source 最后,我的jnpl和html源

    <?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Cache Scanning</title>
        <vendor>Altcom</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+"
              href="http://java.sun.com/products/autodl/j2se" />
        <jar href="http://127.0.0.1:18123/media/java/demo.jar" main="true" />
    </resources>
    <applet-desc 
         name="JTwain Applet Demo"
         main-class="JTwainApplet"
         width="500"
         height="200">
     </applet-desc>
     <update check="background"/>
</jnlp> 



   **javascript** - 
 <script src="http://java.com/js/deployJava.js"></script>    
    <script> 
        var attributes = { code: "http://127.0.0.1:18123/media/java/demo.jar",  width:500, height:200} ; 
        var parameters = {jnlp_href: "http://127.0.0.1:18123/media/java/demo.jnlp"} ; 
        deployJava.runApplet(attributes, parameters, '1.6'); 
    </script>

Any suggestions would be greatfully recieved. 任何建议将不胜感激。 This is driving me nuts. 这让我发疯。

OK, this is how I got it working. 好的,这就是我的工作方式。 I stopped using the 'create runnable jar' option in eclipse and just used the 'create jar' option. 我停止在eclipse中使用“创建可运行jar”选项,而仅使用了“创建jar”选项。 I then referenced the other jars (JTwain etc), using the manifest (rather than having eclipse try to include them in my jar). 然后,我使用清单来引用其他jar(JTwain等)(而不是让日食尝试将它们包含在我的jar中)。

MANIFEST.MF 清单文件

Manifest-Version: 1.0
Class-Path: JTwain.jar plugin.jar AspriseJavaPDF.jar

I added the other jars to my media folder and served them up using the jnpl - 我将其他罐子添加到我的媒体文件夹中,并使用jnpl将它们放下-

<resources>
        <!-- Application Resources -->
        <j2se version="1.6+"
              href="http://java.sun.com/products/autodl/j2se" />
        <jar href="http://127.0.0.1:18123/media/java/CacheScan.jar" main="true" />
        <jar href="http://127.0.0.1:18123/media/java/JTwain.jar"  />
        <jar href="http://127.0.0.1:18123/media/java/AspriseJavaPDF.jar"  />
        <jar href="http://127.0.0.1:18123/media/java/plugin.jar" />
</resources>

Lastly I signed all the unsigned jars (both mine and the AspriseJavaPDF.jar). 最后,我签名了所有未签名的jar(包括我的和AspriseJavaPDF.jar)。 I did this outside of Eclipse. 我是在Eclipse之外进行的。 see http://download.oracle.com/javase/tutorial/deployment/jar/signindex.html 参见http://download.oracle.com/javase/tutorial/deployment/jar/signindex.html

Having unsigned Jars was the problem so thanks to Perception & Paulo Ebermann for the comments above. 未签名的Jars是问题所在,因此感谢Perception和Paulo Ebermann的上述评论。 Hope this is helpful for somebody. 希望这对某人有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM