2011-08-05 35 views
0

我正在使用JTwain庫進行一些測試。我需要將掃描功能附加到Django應用程序。我有一些將在本地運行的代碼,但我無法使它在一個小程序中工作。在Eclipse中創建JTwain小程序

我回來了,試圖讓演示小程序運行。我創建了一個eclipse的「可運行jar」(我不得不爲其中一個類添加一個dummy Main)。當我在瀏覽器中加載頁面時,我從插件控制檯得到以下輸出 -

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 

下面是我創建的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 

而這裏的代碼爲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(); 
    } 

} 

最後我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> 

任何建議將greatfully收到。這讓我瘋狂。

+2

明顯的問題,但你簽了你的JAR嗎? – Perception

+1

是的,你需要一個簽名的jar - 完全簽名的,不僅是com.asprise類。此外,JTwain嘗試加載的庫必須包含在jar文件中(不是,AFAIKS),或者已經安裝在system/JRE中。 –

+0

是的,這是我沒有簽署所有罐子的問題。最後,我創建(並簽名)了一個只有我寫過的類的jar,然後使用jnpl提供了另一個jar(其中一個需要簽名)。感謝您的意見。 –

回答

1

好吧,這是我如何得到它的工作。我在eclipse中停止使用'create runnable jar'選項,並使用'create jar'選項。然後我使用manifest來引用其他jar(JTwain等)(而不是讓eclipse試圖將它們包含在我的jar中)。

MANIFEST.MF

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

我加入了其他罐子我的媒體文件夾,並使用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> 

最後,我簽署了所有未簽名的jar文件(包括礦山和AspriseJavaPDF.jar)。我在Eclipse之外做了這個。見http://download.oracle.com/javase/tutorial/deployment/jar/signindex.html

沒有簽名的瓶子是問題,所以感謝上述評論感知& Paulo Ebermann。希望這有助於某人。

相關問題