拜托,帮我找个错误。 我有一个类文件。我拿了这个类的字节代码并用Caesar cipher对它进行加密。我有几个命令提示符的参数:
我想简单地用零键加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)。
我编译:
javac Caesar.java
执行命令
java Caesar HelloWorld.class Hello1.class 0
(注意 - 我使用零键,因此,不应更改文件)
运行第二个文件,我看到了这样的错误:
julia @ julia-Aspire-5680~ / zagruzchik $ java Hello1 Exception in thread“main”java.lang.NoClassDefFoundError:Hello1(错误的名字: HelloWorld)at java.lang.ClassLoader.defineClass1(Native Method) 在java.lang.ClassLoader.defineClass(ClassLoader.java:800)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在java.net.URLClassLoader.access $ 100(URLClassLoader.java:71)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:361)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:354)at java.lang.ClassLoader.loadClass(ClassLoader.java:425)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at at java.lang.ClassLoader.loadClass(ClassLoader.java:358)at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
我的源代码:
import java.io.*;
import static java.lang.System.out;
/**
encript by caesar chipher
*/
public class Caesar {
public static void main(String[]args) {
if (args.length == 3)
{
}
else {
System.out.println("USAGE: java Caesar in out key");
return;
}
try ( //class which will be ciphered
FileInputStream in = new FileInputStream(args[0])) {
//in output will go encripted byte code of file
FileOutputStream out = new FileOutputStream(args[1]);
//this is key
int key = Integer.parseInt(args[2]);
int ch;
//in cycle encript byte code
while ((ch = in.read()) != -1) {
byte c = (byte)(ch + key);
out.write(c);
}
}
catch(IOException exception)
{
}
out.close();
}
}
答案 0 :(得分:0)
除了您想要加密文件的方式之外,还有一个更基本的问题。
我想简单地用零键加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)。
在此异常中表现出来
$ java Hello1
Exception in thread "main"
java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld)
class
名称必须等于*.class
文件名。如果您的班级名称为HelloWorld
,则只有在其名称存储在名为HelloWorld.class
的类文件中时才能使用。
如果您将文件重命名为Hello1.class
,则它将无效,因为您指示Java虚拟机执行类Hello1
,但此类未存储在文件Hello1.class
中。