Java “类”;Scanx";与同一包中其他类的信任级别不匹配
我正在尝试使用其他一些jar文件,它们具有我想要访问的函数。这些都是公开的,我有构建测试应用程序的示例代码。它似乎与签名有关(即它们是签名的,我的是自签名的) 当我尝试在网页中加载小程序时,系统会询问我是否要阻止或取消阻止。如果我告诉它取消阻止,我会得到以下错误: 类“Scanx”与同一包中其他类的信任级别不匹配 我读过至少十几篇不同的文章,但它们要么不适用,要么超出了我目前对Java编码知识的理解能力 我真的很感激您能给我一些想法,让我能够测试并完成我的java小程序?代码如下:Java “类”;Scanx";与同一包中其他类的信任级别不匹配,java,security,applet,signing,Java,Security,Applet,Signing,我正在尝试使用其他一些jar文件,它们具有我想要访问的函数。这些都是公开的,我有构建测试应用程序的示例代码。它似乎与签名有关(即它们是签名的,我的是自签名的) 当我尝试在网页中加载小程序时,系统会询问我是否要阻止或取消阻止。如果我告诉它取消阻止,我会得到以下错误: 类“Scanx”与同一包中其他类的信任级别不匹配 我读过至少十几篇不同的文章,但它们要么不适用,要么超出了我目前对Java编码知识的理解能力 我真的很感激您能给我一些想法,让我能够测试并完成我的java小程序?代码如下: <ht
<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>
报告的错误消息与在同一个包中有两个具有不同签名的类时的错误类似。这在九十年代就已经是非法的了。区别之一是应该报告完全限定类名(它是关于包的)。在这种情况下,该类实际上是在一个默认包中,这绝不是一个好主意。这通常是因为包名是在稍后添加的,但是正在使用一个挂起的旧类文件 小程序标记看起来有点错误
code=“Scanx.class”
中应该有包名,这进一步表明类文件过时plugin.jar
似乎是插件的一部分,因此在插件中运行时不应包括在内(但在编译代码时是必需的)
然后您说‘我使用“jar cvf Scanx.jar Scanx.java”编译成一个jar’。有点困惑。您应该使用
javac
将.java文件编译成.class。然后使用jar
创建jar。您需要的文件应该是.class而不是.java,并且应该包含包名。如果你把jar看作一个zip,它里面应该有与包名匹配的目录路径的类(IIRC,jar tf Scanx.jar
应该列出文件)。我正在处理一个有输入错误的例子,甚至想知道为什么一个系统会有两个编译器,一个用于.class,一个用于.jar——这就是我的印象。现在它更有意义了。显然,我有点不知所措,但我正试图找到足够的答案,以便使用一些现有代码来满足通过web浏览器访问扫描仪并将文件FTP到服务器的需要。在这一点上,学习曲线陡峭。
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();
}
}
}