使用Notepad++编译Java代码

25

我一直在尝试将Notepad++设置为一个Java小环境,主要是为了学习Java,因为我在使用NetBeans时遇到了一些困难,但不幸的是设置Notepad++来调用Java代码的所有建议都没有起作用。

我猜想可能是notepad++已经变化或者Java开发工具包已经被大规模修改,因为我使用的所有示例都会产生错误,即使有很少的出错空间。

首先,我找到了这个网站: http://blog.sanaulla.info/2008/07/25/using-notepad-to-compile-and-run-java-programs/

这是运行Javac编译代码的代码:

javac “$(FILE_NAME)”

java “$(NAME_PART)”

要运行生成的字节码,但这已经完全没有成功的可能了。Java已经正确安装并且我可以通过CMD调用Java程序执行操作。

使用一个名为npp的插件,通过F6调用,并使用评论中提供的代码运行(编译Java程序成为正确的.class文件),虽然命令在编译Java程序时成功,但运行程序时失败了。

cd “$(CURRENT_DIRECTORY)”
javac $(FILE_NAME)
java $(NAME_PART)

Notepad++控制台中的错误信息如下:

java.lang.NoClassDefFoundError: first
Caused by: java.lang.ClassNotFoundException: first
  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)
Could not find the main class: first.  Program will exit.
Exception in thread "main"

我想在Notepad++中设置编译和运行代码会很容易好玩,但似乎互联网上所有的文档都已过时,没有任何有效方法。

我需要一个简单的方法来在Notepad++中编译和运行Java代码。

我可以使用CMD,但我更希望它能够更加整合到Notepad++中。

感谢任何可能的帮助。谢谢🙂

编辑:我正在使用最新版本的Java、notepad++和Windows 7。

编辑2:代码:

 //A Very Simple Example
 class ExampleProgram {

   public static void main(String[] args){

        System.out.println("I'm a Simple Program");
   }
 }

1
显而易见的问题是:当你已经安装了NetBeans,为什么要使用Notepad++? - spender
2
尝试使用专为编写代码而构建的 IDE,如 Eclipse。它会比记事本教给你更多东西。 - Sean
1
Netbeans会让你的生活变得更加简单。如果你在使用它时遇到问题,就在这里问吧。 - npinti
2
我之前发布了一个问题,询问如何让Netbeans与简单的单个Java文件一起工作,有人建议我使用记事本或Notepad++,因为使用Netbeans需要一定的学习曲线。 - Joseph
这个可能会有帮助:http://blog.prateeksingla.com/2013/06/compile-and-run-java-programmes-in.html - Prateek Singla
显示剩余6条评论
13个回答

16

像Eclipse或Netbeans这样的IDE所涉及的“学习曲线”最初主要包括您已经了解的内容 - 设置类路径、环境变量等知识。与Notepad++(我很喜欢,但它不是专为Java开发而设计)相比,如果您有一台性能强劲的PC(它需要一些内存),我建议使用Eclipse。除了设置路径之外,之后你就可以开始工作了。

Eclipse正在积极地公开开发,并且是其中文档最全面的IDE之一。教程肯定会正确地为其工作 :)。但说真的,它非常好用。当您想扩展到Java中的Android开发或其他类型的Java编程时,只需加载所需的插件即可。它还支持调试,这是Notepad ++无法竞争的。


3
我同意Mark关于IDE整体实用性的看法,但我确实觉得为了完成写一个单独类文件的简单任务而启动笨重的IDE并创建项目是有些过头了。 - anirvan
2
我不同意。我经常在Eclipse中进行简单的概念测试。事实上,我有一个名为“Test”的项目,其中包含一个名为“Test”的单个类,以及一个名为main()的单个函数,用于执行此操作。非常容易。 - aksarben
1
然而,理论上来说,Java不应该“是”Eclipse,就像Visual Studio不应该“是”VB或C#一样。然而,这似乎确实发生了。相比之下,我还没有听说哪个IDE将成为“JavaScript”。这只是编译与解释的问题吗?现代的nodejs和jquery-lib web应用程序可以有数百个源代码文件,但IDE通常仍然是一个简单的文本编辑器。为什么会有这种差异呢? - KTys
2
我认为对于初学者来说,学习如何手动编译程序是一个很好的练习,而不依赖于集成开发环境(IDE)的帮助。当你掌握了这个技能后,使用IDE可以节省时间和精力。 - Roberto Linares
不要忘记 IntelliJ,它是我的最爱。我相信 Eclipse 是 Oracle 推荐的,但有几个 IDE 与 Java 兼容良好。 - SparkleGoat

2

可能需要将最后一行修改为:

java -cp . $(NAME_PART)

这将对您有所帮助。问题在于您没有设置类路径。

如果只是编译单个文件项目,Notepad++就可以胜任。但如果需要处理更多文件,您需要一个IDE或至少与ant集成而不是使用Java编译器。


我想最好还是回到NetBeans,因为感觉对于大型项目来说,Notepad++的功能相当有限,嗯。 - Joseph
修改没有任何效果,错误完全相同,我认为NPP中的函数$(NAME_PART)已经损坏了。 - Joseph
3
作为程序员,我的友好建议是:永远不要认为你所使用的程序/接口/语言出了问题。在99.999%的情况下,问题出在你对它的使用上。请谨慎思考。 - kgiannakakis

1

在Java命令中设置类路径,如下所示:

java -classpath “$(CURRENT_DIRECTORY)” “$(NAME_PART)”

1

虽然我相信你必须使用一个IDE(NetBeans,Eclipse,IntelliJ IDEA(我使用的),但我认为了解和学习在你的小例子中出现了什么问题总是很好的。

使用IDE,编译和运行环境已经配置好了,但作为开发人员,了解隐藏的基本概念非常重要。

无论如何,从你发布的链接中,这里是你必须定义的环境变量:

FULL_CURRENT_PATH: C:\Documents and Settings\Administrator\My Documents\JavaP\ExampleProgram.java
CURRENT_DIRECTORY: C:\Documents and Settings\Administrator\My Documents\JavaP\
FILE_NAME: ExampleProgram.java
NAME_PART: ExampleProgram
EXT_PART:java

请确保所有内容都按照这些设置命名,例如:

- your source file is under C:\Documents and Settings\Administrator\My Documents\JavaP\
- your source file is named ExampleProgram.java

他的类名是ExampleProgram,因此文件名应为ExampleProgram.java,而不是NotHelloWorld.java。你只是从他提供的链接中复制粘贴了文件名吗? - Peter Knego
我复制粘贴了这个例子。如果需要的话,我可以进行适应。已经完成了,谢谢。 - sly7_7

0

我的情况和你的类似,

我在cmd中正确编译并运行了“hello world”应用程序,但在notepad++中,我只能进行编译,无法运行class文件。

原因是我安装了jdk1.7,将PATH设置为jdk1.7,然后我又安装了jdk1.6。因此,jdk1.6安装程序将java.exe添加到%systemroot%\System32(在x64环境中为SySWOW64),但没有javac.exe。

而在cmd模式下,系统调用PATH中的javac.exe和java.exe,而notepad++调用PATH中的javac.exe,因为system32中没有javac和java.exe。(您可以在notepad++中运行“javac -version”和“java -version”来查找)

所以我删除了system32中的java.exe,然后npp就可以完美地编译和运行了。

希望这可以帮助任何人。


0

我最近在Windows 7 64位系统中遇到了这种情况。Notepad++是一个32位程序,因此根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx的规定,Windows已经在它及其插件(包括NppExec)上启用了“文件系统重定向”。我还安装了最新的64位JDK 8.xx,但之前安装了32位的JRE 7.xx。

现在,JRE 7.xx安装程序在其C:\Windows\system32目录下放置了java.exe的副本(或硬链接,我没有检查过),实际上是C:\Windows\SysWOW64\java.exe。这不在64位应用程序(如cmd.exe)的PATH中,但在(重定向的)32位应用程序的PATH中。

然后,在我安装JDK 8.xx之后,安装程序没有更新我的PATH,所以我将JDK安装位置添加到了我的PATH的末尾。从那时起,我观察到的行为是:

  • 从Windows命令提示符(cmd.exe, 64位)运行-- javac.exe和java.exe都来自JDK 8.xx位置(C:\Program Files\Java\jdk1.8.0_05\bin)。
  • 在Notepad++(32位)中,调用的是JDK版本的javac.exe,但java.exe实际上是从C:\Windows\SysWOW64\java.exe运行的--导致了这种加载问题。

解决方法是更新或删除32位JRE。


0
你可以尝试添加 JDK bin 路径的系统环境变量。当我第一次在 Notepad++ 上运行 Java 时,也遇到了类似的问题。

0
您可以像上面建议的那样使用Eclipse,只需创建一个Java项目。创建项目后,将要使用的Java文件拖放到项目中,并选择链接文件选项。这样,Eclipse将创建您文件的副本并将其链接到您的文件,这意味着您对一个文件所做的任何更改都将复制到另一个文件中。

0

我同意被接受的答案,但有时我使用Textpad来快速编写/编译/运行小型Java程序。 Textpad已经内置了这个功能(工具/外部工具)。 如果您没有看到这些选项,我认为您需要进入配置/首选项/工具并添加它们。 然后,您只需按Ctrl-1进行编译,按Ctrl-2进行运行。 这对于非常小的快速测试非常有用,没有任何库或其他东西。


0

你可以在Notepad++的“运行”模块中使用这段小代码:

cmd /k "cd /D "$(CURRENT_DIRECTORY)" & java "$(NAME_PART)""

注意:这是几乎相同的代码解决方案,他们用于在Notepad++中运行Python,如《如何在Notepad++中执行Python文件?》主题所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接