Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java永远不能;查找或加载“;主课_Java_Windows_Jar_Classpath - Fatal编程技术网

Java永远不能;查找或加载“;主课

Java永远不能;查找或加载“;主课,java,windows,jar,classpath,Java,Windows,Jar,Classpath,我试图运行一些java代码,但遇到了一些我无法理解的问题。java类加载器并不“查找或加载”我直接指向的文件 目录是这样的 (project dir)\uwu_bot\target\classes\com\alejandro\uwu_bot\Bot.class 我把“类”作为我的工作目录并调用 java com.alejandro.uwu_bot.Bot 但我明白了 Error: Could not find or load main class com.alejandro.uwu_bot.

我试图运行一些java代码,但遇到了一些我无法理解的问题。java类加载器并不“查找或加载”我直接指向的文件

目录是这样的

(project dir)\uwu_bot\target\classes\com\alejandro\uwu_bot\Bot.class
我把“类”作为我的工作目录并调用

java com.alejandro.uwu_bot.Bot
但我明白了

Error: Could not find or load main class com.alejandro.uwu_bot.Bot
我甚至直接去“alejandro\uwu_bot”做

没有骰子

会发生什么事

问题的首要答案指向了一些Oracle文章,这些文章记录了命令行工具和查找类文件的过程。它没有给我任何其他的想法。这篇文章还向我保证问题不在于类名,而是更深层次的技术问题

代码不是很重要,它只是我管理的Discord bot的主要类

Bot.java:

公共类Bot扩展ListenerAdapter{
/**
*主JDA的全局实例
*/
公共静态JDA-JDA;
public static final ScheduledExecutorService SCHEDULER=Executors.newScheduledThreadPool(1);
公共静态最终SerialPort端口=SerialPort.getCommPort(“COM3”);
public static final ThreadLocalRandom RAND=ThreadLocalRandom.current();
公共静态void main(字符串[]args)引发异常{
System.setProperty(“http.agent”、“Chrome”);
//打开引用中声明的串行端口
如果(!PORT.openPort())
System.err.println(“(警告):端口忙!!”;
jda=newjdabuilder(AccountType.BOT).setToken(TOKEN.build().awaitReady();
addEventListener(newcommandListener());
addEventListener(新的GeneralPurposeListener());
addEventListener(新Bot());
...
正如问题告诉我的那样,我添加了-Xdiag选项以查看更详细的输出

Error: Could not find or load main class Bot
java.lang.NoClassDefFoundError: Bot (wrong name: com/alejandro/uwu_bot/Bot)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
它直接声明找不到该文件

然后我进一步转到“classes”目录并运行

java -Xdiag com.alejandro.uwu_bot.Bot
得到

java.lang.ClassNotFoundException: com.alejandro.uwu_bot.Bot
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
这说明这个类根本不存在

编辑:这已经被宣布为重复,但我不同意。我特别说过我在那篇文章中尝试了解决方案,但没有成功,这是其他原因。我遗漏了一些东西,或者这个问题没有解释我需要的具体细节。请记住,我不是Java方面最有经验的人

文件的源代码树如下所示:

src
    ├───main
    │   └───java
    │       └───com
    │           └───alejandro
    │               └───uwu_bot
    │                   └───Bot.class
    └───test

省略了多个文件,但现在这些都很重要

您应该设置类路径

java -cp (project dir)\uwu_bot\target\classes com.alejandro.uwu_bot.Bot
或者,如果您已经在classes目录中,只需

java -cp . com.alejandro.uwu_bot.Bot

您从哪个目录调用该命令?不相关,您的程序包名称不应包含下划线。@Michael,为什么?@Michael,1)
唯一程序包名称的前缀始终以所有小写ASCII字母书写,并且应该是顶级域名之一,如com、edu、gov、mil、net、org。
-prefix!2)
t包名称的组成部分根据组织自身的内部命名约定而有所不同
-包名称的下一部分可以是任意的。您的类中是否有
语句?当前目录是否在类路径中?这是错误的。如果您要运行
com.alejandro.uwu\u bot.bot
,则类路径应为指向
(项目目录)\uwu\u bot\target\classes
。哦,你是对的。修复了你的第二部分也需要重新措辞
java -cp . com.alejandro.uwu_bot.Bot