编译Java程序时遇到麻烦

时间:2012-02-11 17:15:55

标签: java

抱歉,对于问题本身,我无法更具体。这就是我正在运行的:Windows 7 64位,JDK v7,JRE v7(64位)和JRE v6(32位)。在Java方面我很新,但我知道如何编译程序和所有这些东西。当我尝试运行编译的程序时,我一直收到错误:

C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1>javac ch3p1.java

C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1>java ch3p1
Error: could not open `C:\Program Files (x86)\Java\jre6\lib\i386\jvm.c

C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1>java -cp ch3p1
Error: could not open `C:\Program Files (x86)\Java\jre6\lib\i386\jvm.c

C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1>java cd3p1
Exception in thread "main" java.lang.NoClassDefFoundError: cd3p1
Caused by: java.lang.ClassNotFoundException: cd3p1
        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: cd3p1.  Program will exit.

C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1>java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)

请注意,它无法找到该文件,因为我更改了文件夹名称以查看它是否会自动检测我已安装的64位JRE

然而,在经过足够的搜索之后,我发现了一个页面,说明我的问题是因为我在JREv6中运行了我在JDK v7上编译的程序。我搞砸了一会儿,试着让它在我下载JDK的JRE中运行。

CD: C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1
Current directory: C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1
javac ch3p1.java
Process started >>>
<<< Process finished.
C:\Program Files\Java\jre7\bin\java.exe ch3p1
Process started >>>
Error: Could not find or load main class ch3p1
<<< Process finished.

我正在使用Notepad ++和NppExec来更快地编译,我放弃了尝试让它运行JRE v7并且只使用它的位置。这是我的NppExec代码(我不知道它是否重要,但无论如何我都会发布):

cd $(CURRENT_DIRECTORY)

javac $(FILE_NAME)

C:\Program Files\Java\jre7\bin\java.exe $(NAME_PART) 

最后,这是我试图运行的实际程序:

public class ch3p1
{
    public static void main(String args[])
    {
        System.out.print("Hello.");
    }
}

所以,快速回顾一下。我发现的第一个错误是因为我正在编译和运行具有不同版本的JDK和JRE的程序。我无法弄清楚如何使用我的JDK安装附带的JRE实际运行它,所以我使用了它的直接路径。当我去运行我编译的程序时,我的希望被粉碎了。我有一个简单的“错误:无法找到或加载主类ch3p1”。

问题是什么?我不确切地知道,广泛的问题是:我需要做些什么才能让它发挥作用?我不能比这更具描述性,因为我不知道该做什么或在下一步看什么。我希望我提供了足够的有用信息,并将其结构化得足以使其易于理解。

其他一些问题:在我的“添加/删除程序”中删除两个Java 6更新是否有效?如何更改它,以便在运行java时,它将运行64位JRE v7?

我不知道我在这里做什么,我基本上都在学习。我在某种程度上熟悉计算机,但我是Java和JDK的新手,所以我不太了解它是如何工作的。我的潜在客户可能完全错误和错误,如果是这样,请纠正我。

修改

据我所知,这个网站上有很多问题,我相信在这里发帖的人会回答很多问题,这些问题可以通过最少的努力来解决。我不得不说我到处都是,我来这里发帖是因为我找不到解决问题的办法。我找不到寻找另一个程序的帮助,我当然没有将这些文件放在我的Java安装目录中,因为尽管我不熟悉Java,但我并不陌生。通过查看我提供的第一个示例可以很容易地避免这种响应,另一个可以在我的Documents中的文件夹中看到我的.java和.class文件的文件路径。

我将列出答案和我在这里尝试的内容:

  • 我从Oracle网站重新安装了JDK JRE

  • 我已经设置了我的SET_HOME系统变量,而我的Path系统变量中包含了JDK bin目录。

  • 我的.class文件和我的.java文件位于同一目录中,我的类和.java文件都被命名为相同的东西,包括确切的情况。

  • 安装JDK和JRE之后,我删除了以前的文件并创建了一个新文件,但这也没有用。

  • 我尝试按照回复中的建议放置java和javac的直接位置。

  • 我意识到有更好的IDE和构建程序,我使用的是javac,因为我现在所使用的类是使用javac。

现在,有一些额外的问题可以帮助我:

  • 我在添加/删除程序列表中有Java v6.xx更新,会以正面或负面的方式以任何方式删除这些更新。并将完成删除所有JDK / JRE文件并重新安装更改任何内容?

  • 使用Java和Windows 7是否存在我可能遇到的任何已知问题。

  • 这是JRE还是JDK的问题,因为它似乎在没有任何问题的情况下进行编译,但是当我去运行它时就是我得到了错误。

  • 我需要设置除CLASS_PATH或Path以外的其他变量吗?

即使我还没有找到解决方案,我感谢到目前为止给予的任何和所有帮助。

3 个答案:

答案 0 :(得分:2)

尝试使用安装java的目录的绝对路径。这是我在机器上输入的内容

cd "C:\Users\Sean\Documents\JAVASTUFF\Chapter 3\1"

"C:\Program Files\Java\jdk1.7.0_02\bin\javac" ch3p1.java

"C:\Program Files\Java\jdk1.7.0_02\bin\java" ch3p1

如果可行,则应将目录添加到路径中,以便这是优先的Java版本。这样你就不必再使用绝对路径,只需像往常一样输入“java”和“javac”

set PATH="C:\Program Files\Java\jdk1.7.0_02\bin\";%PATH%

也可以在“控制面板”中的某处设置路径,这样就不必在每次打开命令提示符时都输入

编辑:您应该设置JAVA_HOME以及“duffymo”建议。如果它仍然无法正常工作,那么您的Java安装可能有问题。尝试从Oracle

下载并安装新版本

答案 1 :(得分:1)

让我们首先说,您永远不应该将任何代码放在安装Java JDK的目录中。请养成创建单独文件夹(例如“c:\ work”)并将项目子文件夹放在那里的习惯。

打开命令shell并输入:java -version。这将告诉您正在编译和运行的Java版本。你关心JDK,因为你正在开发代码。

您的JAVA_HOME环境变量是否已设置?请将其指向安装Java的目录。然后将%JAVA_HOME%\bin添加到您的PATH中。如果你正确地完成了这一切,你应该能够通过输入javac来编译命令shell。

因此,创建一个文件夹c:\work\learning\src并将ch3p1.java文件夹放入其中。 Create a directory c:\work\learning\classes也是。使用以下命令编译代码:

javac -cp .;classes -d classes src\*.java

你应该在classes文件夹中看到ch3p1.class。

使用以下命令运行它:

java -cp .;classes ch3p1

你会看到“你好”。在控制台中。

编辑:我建议您仔细阅读本教程:

http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html

你不是第一个编译和运行“hello world”的人。在我看来,你太过分了。简化。

答案 2 :(得分:-1)

这里有几件事。

Java编译器可以使用“target”参数来指示您希望编译的Java版本。默认情况下,目标是当前JVM的版本。

到目前为止,使用给定目标编译的任何类都与该目标和任何上述版本兼容。因此,为Ja​​va 5编译的类与Java 5,6和7兼容。

要找出您正在运行的Java版本,请在终端中键入java -version。它将输出类似“Java 1.X ...”的内容。“X”是Java的版本,您经常会看到人们谈论Java 5或Java 1.5,这是相同的事情(6和7也是如此)。

正在运行的版本取决于几个参数,但通常都归结为“PATH”环境变量中的第一个Java bin目录。

现在,如果您正在考虑Java IDE,那么有三个主要的:

  • 的Eclipse
  • 的NetBeans
  • 的IntelliJ

这三个都是很好的Java IDE,而且你更喜欢哪一种。我个人使用Eclipse。

最后,对你来说问题:

  1. 使用javac ch3p1.java
  2. 的Comiple
  3. 使用java -cp . ch3p1
  4. 运行