class“Scanx”与同一包中其他类的信任级别不匹配

时间:2014-05-20 21:08:40

标签: java security applet signing

我试图使用其他一些具有我想要访问的功能的jar文件。这是公开的,我有一些示例代码,我构建了我的测试应用程序。它似乎是签署相关的(即他们签署,我的签名)。

当我尝试在网页中加载小程序时,系统会询问我是否要阻止或取消阻止。如果我告诉它取消阻止,我会收到以下错误:

class" Scanx"与同一包中其他类的信任级别不匹配。

我已经阅读了至少十几篇不同的文章,但他们要么不能应用,要么超出我理解当前Java编码知识水平的能力。

我真的很感激任何关于如何通过这个的想法,所以我可以测试&完成我的java小程序?代码如下:

<html><body>
<applet id=scanx name=scanx code="Scanx.class" height="600" width="600" archive="./Scanx.jar,./ij.jar,./plugin.jar,./twain.jar"></applet>
<script type="text/javascript">
function scanit()
 {
   document.scanx.getScan();
 }
</script> 
 <input type=button onclick="scanit();">
 </body></html>

这是我的java代码,我使用&#34; jar cvf Scanx.jar Scanx.java编译成一个jar&#34; ...

package uk.co.mmscomputing.device.twain.applet; 
import javax.swing.JApplet;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import java.awt.image.BufferedImage;
import java.awt.image.RasterFormatException;

import javax.imageio.ImageIO;
import netscape.javascript.*;
import java.io.File;

import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerListener;
import uk.co.mmscomputing.device.scanner.ScannerDevice;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;

public class xScanx extends JApplet implements ActionListener, ScannerListener{

  int     index = 0;

  String  filename;

  Scanner scanner;

  public Scanx(){
  }

  public Scanx(String title, String[] argv){    
    init();
  }

  public void init(){

    scanner=Scanner.getDevice();
    scanner.addListener(this);

//    scanner.select("TWAIN_32 Sample Source");
  }

 public void getScan()
  {
    try{
          scanner.acquire();
        }catch(ScannerIOException se){
          se.printStackTrace();
       }
  }  

  public void actionPerformed(ActionEvent evt){
/*
  try{
      if(evt.getSource()==acquireButton){
        scanner.acquire();
      }else if(evt.getSource()==selectButton){
        scanner.select();
      }else if(evt.getSource()==cancelButton){
        scanner.setCancel(true);
      }
    }catch(ScannerIOException se){
      se.printStackTrace();
    }
    */
  }

  public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){

    if(type.equals(ScannerIOMetadata.ACQUIRED)){
      BufferedImage image=metadata.getImage();
      System.out.println("Have an image now!");
      try{
        ImageIO.write(image, "jpg", new File(filename+index+".jpg"));
        index++;

//        new uk.co.mmscomputing.concurrent.Semaphore(0,true).tryAcquire(2000,null);

      }catch(Exception e){
        e.printStackTrace();
      }
    }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){
      ScannerDevice device=metadata.getDevice();
    }else if(type.equals(ScannerIOMetadata.STATECHANGE)){
      System.err.println(metadata.getStateStr());
    }else if(type.equals(ScannerIOMetadata.EXCEPTION)){
      metadata.getException().printStackTrace();
    }
  }

  public static void main(String[] argv){
    try{
      new Scanx("Twain Applet Example [2007-11-02]", argv);
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}

1 个答案:

答案 0 :(得分:0)

当在具有不同签名的同一包中具有两个类时,报告的错误消息看起来类似于错误。这是自九十年代以来的非法行为。其中一个区别是应该报告完全限定的类名(它与包有关)。可能是这个类实际上是一个默认包,从来不是一个好主意。这通常是因为稍后添加了包名,但是正在使用挂起的旧类文件。

applet标签看起来有点不对劲。 code="Scanx.class"应该包含包名,这进一步暗示了陈旧的类文件。 plugin.jar似乎是PlugIN的一部分,因此在插件中运行时不应包括(但在编译代码时将是必要的)。

然后你说&#39;我使用&#34; jar cvf Scanx.jar Scanx.java&#34;&#39;编译成一个罐子。有点混乱。您应该将.java文件编译为带有javac的.class。然后使用jar创建jar。您想要的文件应该是.class而不是.java,并且应该包含软件包名称。如果你把jar视为一个zip,它应该有一个类,里面有与包名匹配的目录路径(IIRC,jar tf Scanx.jar应列出文件)。