错误:无法在intelliJ IDE中找到或加载主类


151

我是Java的初学者,正在尝试使用IntelliJ运行我的代码,而IntelliJ是作为我的IDE与JDK 1.7一起安装的。下面的代码keep甚至不会编译,并不断给我错误:

Error: Could not find or load main class libTest

import java.lang.Integer;
import java.lang.String;
import java.lang.System;
import java.util.*;

class book {

    private String name = "trial";
    private int bookCode=1;
    private int issued=0;

     public void Issue(){
         if(issued==0) {
             issued=1;
             System.out.println("You have succesfully issued the book");
         }
         else {
             System.out.println("The book is already issued. Please contact the librarian for further details");
         }
    }

    public int checkCode() {
        return bookCode;
    }

    String readName() {
        return name;
    }

    public void setName(String newName){
        name=newName;
    }

    public void setBookCode(int newCode){
        bookCode=newCode;
    }
}

class library {
    private ArrayList books=new ArrayList();

    public void getList(){
        for(int bk:books){
            String bName=books(bk).readName();
            System.out.println((bk+1)+")  "+bName);
        }
    }
}

public class libTest{
    public static void main(String[] args){
        library newLib= new library();
        System.out.println("code working");
   }
}

我必须在编译器设置中进行任何更改吗?还是代码。


2
源文件的名称是什么?是libTest.java
QuantumMechanic 2012年

import java.lang...lang包中的类会自动发生这种情况。
安德鲁·汤普森

正如QuantumMechanic所提到的,您的主类必须位于一个完全一样的文件中。因此,libTest必须位于名为libTest.java的Java文件中,否则Java编译器会抱怨。另外,您是通过IDEA创建源代码还是在现有源代码上创建了一个新的IDEA项目?
mcfinnigan 2012年

尝试导入java.lang没什么区别
困惑的邮递员2012年

他们是相同的。还有其他原因为什么要标记这样的错误?
困惑的邮递员2012年

Answers:


178

这可能会有所帮助:

1)“构建”菜单->“ Rebuild Project”。有时Intellij不会重写类,因为它们已经存在,因此您要求Intellij重写所有内容。

2)“运行”菜单->“ Edit configuration”->删除配置文件->重新添加配置文件(如果是Java应用程序,则添加回“应用程序”),然后从“主类”下拉菜单中选择您的主类。

3)“构建”菜单->“ Rebuild Project”。


9
我在IntelliJ中有一个全新的项目,它将无法运行。Rebuild Project为我工作!
丹尼·哈丁

第二个选择对我有用。但是删除配置文件,然后右键单击您的类->运行
NoName

2
"Build" menu -> "Rebuild Project-做完了!谢谢
Yan Khonski

1
第一种选择rebuild project解决了我的问题。谢谢!
khwilo

1
我删除了.idea,.mvn和其他目标目录,然后重新启动了IntelliJ。进入事件日志,将项目添加为Maven项目,然后按照@Kishore此处提到的步骤进行操作。现在正在工作。
Sunny Shekhar,

105

如果以上答案对您都不起作用,请关闭您的intelliJ IDE并从项目的根目录中删除intelliJ IDE文件和文件夹:

rm -rf .idea *.iml 

然后使用intelliJ打开项目。它现在必须工作。


1
这对我有用。我也将项目重新导入IntelliJ,但对于“组模块”选项,我使用了“使用限定名称”(而不是“使用显式模块组”。)
markhops

3
删除.idea文件夹总是可以解决JetBrains IDE的所有问题:)
shelll

这对我也很有效,我是Intellij的忠实拥护者,但是他们也必须学会做简单的事情。
Zwakele Mgabhi

浪费了30多分钟。最终,这就是我要做的事情
Vins

仅此页面上的此方法对我有效。
zionpi

81

对我来说,解决方案是在项目设置下修复输出目录。在我只将“目标”用于Project编译器输出之前。相反,我将其更新为具有完整路径,例如D:\ dev \ sigplusjava2_68 \ target 在此处输入图片说明


10
这并没有帮助我
Pavel

我的解决方案实际上可能是@Ehsan的答案的细微变化。也许通过指定目标目录,它可以给它提供一个新的位置,在其中编译所有与a基本上执行相同工作的对象Rebuild Project
Iroh叔叔

1
@UncleIroh如果执行相同的工作,则重新构建并读取配置。最初会解决此问题。没有,但是您的解决方案成功了。
hyperum '18 -10-23

这应该是公认的答案。总是再次烦我..:p
克里斯托弗·

37

我遇到了这个问题,在这个网站上尝试了所有可以想到的阳光。

从远程分支中拉出后,没有任何Java类被拾取。在“项目层次结构”中,所有类的名称都带有红色的J,而不是蓝色的C。

最后,我尝试按照本教程进行操作,并尝试了一些未描述的步骤并修复了该问题:https : //www.jetbrains.com/help/idea/creating-and-managing-modules.html

这是我所做的:

  1. 转到文件| 项目结构,或按Crtl + Shift + Alt + S
  2. 在“项目设置”部分下选择“模块”。
  3. 在“源”选项卡中,单击“标记为:”行上的“源”。
  4. 单击应用按钮。

由于某种原因,我所有的班级都使用了蓝色C。

更好地了解IntelliJ和/或IDE的人也许可以解释这种现象,但是我现在所知道的是,它可以看到所有类,更重要的是可以看到所有类,然后运行。


这仅在我关闭Intellij,删除.idea文件夹,然后重新打开Intellij并按照上述步骤操作后才起作用。
Shell_Leko

14

显式创建一个out文件夹,然后将输出路径设置为C:\Users\USERNAME\IdeaProjects\PROJECTNAME\out

像这样

似乎只对我out有用,并且期望IntelliJ无法创建该文件夹。


还可以尝试让IntelliJ为您提供新的运行配置:

通过单击找到上一个

![编辑配置

然后将其删除

在此处输入图片说明

然后打好

现在,(重要步骤)打开包含主方法的类。通过单击左侧“项目窗格”中的类名称,这可能最简单。

给“急诊室Alt+ Shift+ F10,你应该得到一个

这个

现在打Enter

塔达? (行吗?)


运行配置工作正常,尤其是如果您将main()函数从class Main移到其他类时尤其如此。在这种情况下,请编辑上面所示的运行配置,并将“主类”的值更改为您的类名(完全限定)。
论坛用户

我只有“编辑配置”选项,对我不起作用(
Ver Nick

14

使缓存无效并重新启动您的intellij,它对我有用。 如图所示,转到“文件”


7

我知道这个问题是在不久前被问到的,但是我只是绊倒这个问题,并认为我的发现可能会帮助其他人。如前所述,错误消息基本上是out文件夹的结果。这是因为,当您尝试运行该程序时,它将首先编译代码,然后将编译后的结果放入out位置,然后再尝试从out位置加载编译后的代码。如果编译后的代码不在预期的位置,则会收到错误消息。

我特别想分享的一点是,即使您的运行配置在配置面板的“启动前”部分中指定了“构建”,有时代码也不会被编译(构建)。

什么时候会发生?导致这种情况发生的一种情况是,如果您正在使用模块,并且手动删除了模块输出目录。例如,如果我有一个名为“ foo”的模块,则在out / production下应该有一个名为foo的目录。如果您手动删除它,则生成系统可能不知道需要对其进行重建。

更糟糕的是,如果选择Build | 构建模块“ foo”,它仍然可能无法重建模块。如果是这种情况,则应在模块中选择一个文件,例如“ bar.java”,然后选择“构建” |“添加”。重新编译“ bar.java”。现在应该还原out目录out / production / foo。

由于IntelliJ通常知道正在进行的任何更改,这让我感到惊讶,并花了我一些时间弄清楚,所以我想分享一下。


6

检查您的课程模块:我在intellij中遇到了这个问题:我有一个maven多模块项目,问题是我运行的类在配置中不存在,因此我的问题通过设置正确的模块来解决( “编辑配置”->“模块的使用类别”)

这可以帮助您


也为我工作。谢谢!安装IntelliJ或Scala插件的升级时,可能出了点问题。之后,您会遇到这个奇怪的问题。非常烦人和耗时。希望JetBrains找到解决方案。
安德烈·范·代尔夫特

6

我必须将“ src”文件夹标记为“ Sources”。重新启动IntelliJ并重建项目后,我可以运行该项目而没有其他问题(请参见屏幕截图)。编辑:您可以通过“文件”->“项目结构”或按Ctrl + Shift + Alt + S来访问“项目结构”选项卡。


1
如果您(像我一样)没有“源”选项卡,则应添加一个新模块(单击绿色+),然后选择主文件夹作为源。什么都不会被覆盖,并且src文件夹将变为蓝色。
约翰·克特吉克


4

当类位于默认文件夹中时,即类未声明包时,我曾遇到过此类问题。

因此,我猜想package org.me.mypackage;在类顶部使用package语句(例如)应该可以解决该问题。


我要复制那行代码吗?..如何修改它以防万一?
困惑的邮递员

只需使用您自己的软件包名称,例如:package org.confused.mailman;
Hakan Serce

好了,package语句必须与IDE放置文件的位置匹配。如果IDE没有将文件放在sourceBase /中,org/confused/mailman那么添加该打包行将无济于事。
QuantumMechanic 2012年

我猜IDE将对此进行指导,并且如果选择了建议的修复程序,它将自动修复此问题。
哈坎·塞斯

无济于事:/ .. IDE似乎没有被我所做的任何更改所困扰..它引发了上述错误,坐下来放松
困惑的邮递员

3

文件>项目结构>模块>将“ src”文件夹标记为源。这应该可以解决问题。还要检查是否选择了最新的语言,以便您不必更改代码或进行任何配置更改。 在此处输入图片说明


2

就我而言,问题似乎与升级IntelliJ有关。当我这样做时,我用新的IntelliJ(2017社区到2018社区)中的文件覆盖了旧IntelliJ的文件。之后,我所有的项目都被破坏了。我尝试了该线程中的所有操作,但没有一个起作用。我尝试将gradle升级到最新版本(从4升级到4.8),但这没有用。对我唯一有效的方法是删除整个IntelliJ文件夹并重新安装。此后,我所有的项目都工作了。


看来实际上是这样。我使用的便携式的IntelliJ所以我改名想从主文件夹idea\binidea_old\bin,并改名为设置文件夹中%user%\username.IntelliJIdea2018.2.IntelliJIdea2018.2_old随后的IntelliJ zip文件再提取开始使用它作为全新的便携版本(这是2018年2月1日版)同春多个分离模块的启动应用程序(未链接到单个父pom.xml中)每个都是具有自己的pom.xml和voila的spring boot应用程序!通过Spring Boot仪表板运行之前,所有工作,创建的目标文件夹均已编译。
安多

2

将目录标记为源目录。通过Ctrl + Shift + Alt + S打开

在此处输入图片说明


1

对我来说-我尝试了上述几种选择,但没有用。然后,我刚刚重命名了Application类,这可能迫使intelliJ构建了一个新的jar,错误消息开始改变。然后我将其重命名,并且可以正常工作。


1

我尝试了这里建议的所有技巧-无济于事。最后,我只是简单地创建了一个新的Maven应用程序,并手动将pom.xml以及Java文件和资源一个一个地复制到其中。现在一切正常。我是IntelliJ的新手,完全不为所动,但是让它进入不稳定状态是多么容易。


您需要关闭intellij,删除.idea文件夹(可能是隐藏文件);然后再次在intellij中打开文件夹-它会基于maven / grade配置重新初始化intelli项目。
杰里米

1

在此处输入图片说明

内容错误的modules.xml,我不知道我的IDEA有什么问题。


1

我从其他地方继承了一堆.JAVA文件,却不知道如何使它们在任何IDE中都能正常工作。最终,我不得不转到Main.JAVA文件所在的命令行并运行javac Main.java。这创建了一堆.CLASS文件。然后,IDE就能弄清楚该怎么做。


1

使用Scala / SBT时出现此错误。即使所有设置都正确,IntelliJ也找不到主类。我的解决方案:删除<user>/.sbt/<version>/plugins/target文件夹,然后重新启动IntelliJ。


1

我将IntelliJ与Spring一起使用,而我的主类包装在JAR中。我必须在“运行/调试”配置对话框中标记“包含具有“提供的”作用域的依赖项”


1

我们在文件/项目结构中。答案可能是:

指示为“内容根目录”的文件夹需要代码所在的子文件夹。 此外,还要找到将代码标记为已排除的按钮,而不是将其标记为已排除的按钮。不要与勾选框混淆,该勾选框指出了被排除在外而又不知道在哪个阶段和哪个阶段**是编译器排除还是运行时排除?您注定要测试并且要努力。所以没有那个复选框,而是图标和颜色。

作为一个想法,我们需要破解它最初的工作方式。他们从来没有把它放在第一位,而是开始以过早的调教风格添加东西。已经有很多年了,您不能指望有任何改善。但是,作为治疗方法,我们可以设法以某种方式使其每次正确使用。


1

您可以在此处检查的另一件事是传递给JVM的实际命令,并确保它看起来不错。滚动到“运行”控制台的顶部,它应该是第一行。

“运行配置VM选项”字段中的空格将使应用程序启动命令格式错误,并可能导致此错误消息

-DsomeArgument="arg with space must be quoted"

谢谢 !这对我有用!
Jcoder

0

详细介绍Brad Turek的解决方案...默认的IntelliJ Java项目模板之一需要一个名为Main的文件,用于定义类Mainmain()方法的入口点。如果该方法包含在另一个文件(和类)中,请更改运行配置:

运行配置窗口

  1. 在IntelliJ中打开项目后,使用“ 运行:编辑配置...” 菜单打开构建配置窗口。
  2. 如果Main类的条目未列出包含暴露main()条目方法的类 的文件名,请输入正确的文件名。(图像中的配置错误,这就是为什么在配置面板中显示为红色的原因。)
  3. 我的main()进入方法在类(和文件)ScrabbleTest中。因此,将Main class:更改为ScrabbleTest可修复运行时错误。

正如其他人所指出的,你必须重建使用新的配置。我正在使用一个程序包,但IME似乎没有什么不同。希望这可以帮助。


0

就我而言,在模块的build.gradle中,mainClassName分配必须声明全限定类名,即。在主类的源代码文件中指定为程序包名称。


0

只需重新构建项目(CTRL + F9),然后仔细检查(编辑配置)(如果您具有正确设置的Main类和模块,如果有的话)


0

简单的解决方案是转到命令行中的后备文件夹,即项目的根文件夹。您应该在计算机中安装了SBT。

如果您已安装sbt,请运行命令“ sbt软件包”,如果成功,它将重新编译项目,返回到可以正常工作的程序。


欢迎来到SO!当您回答一个答案时,如果它是正确的,请尝试稍微解释一下。
DavidGarcíaBodego,


0

就我而言,当代码最初位于项目下的/ src目录下时,应用程序运行良好。后来我在/ src之后添加了/ main / java目录,然后发生“找不到或加载主类...”错误。那时您无法将/src/main/java/YourMain.java添加到运行配置中。我所做的是删除运行配置,然后右键单击项目->打开模块设置(或在单击项目面板后单击F4)->项目设置->模块,删除(x)旧的内容根目录和+添加内容根目录,选择/ src / main / java。重建项目并运行。



0

在我的情况下,这是一个maven项目,我重新导入了maven(右键单击pom.xml文件,然后单击Reimport),它立即开始起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.