我试图使用其他一些具有我想要访问的功能的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();
}
}
}
答案 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
应列出文件)。