2012-02-11 197 views
0

对不起,我不能更具体的问题本身。下面是我正在运行的:Windows 7 64位,JDK v7,JRE v7(64位)和JRE v6(32位)。谈到Java时我很新,但是我知道如何编译一个程序和所有这些东西。我一直得到一个错误,当我试图运行我编译的程序:麻烦编译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. 

我用记事本+ +和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的新手,但对编程并不陌生。通过查看我提供的第一个示例可以轻松避免该响应,另一个可以在我的文档的文件夹中看到.java和.class文件的文件路径。

我将列出答案,我在这里尝试:

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

  • 我已经把我的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以外是否还有其他变量?

我很感谢迄今为止提供的所有帮助,尽管我还没有找到解决方案。

+0

通过阅读和做一些教程,熟悉与Java。像这样http://docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html – 2012-02-11 18:09:11

+0

停止输入javac并学会使用ant或maven或其他实际的构建工具。 – bmargulies 2012-02-11 18:11:39

+2

@bmargulies我认为初学者应该尽可能地简单。在开始编程之前学习Maven可能太多太混乱了。 – Optimist 2012-02-11 18:29:08

回答

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下载并安装新版本

+0

第二'javac'应该是'java',我想? – madth3 2012-02-11 18:07:09

+0

@ madth3是的,我现在修正了这个例子:-) – Optimist 2012-02-11 18:08:04

+0

我应该使用C:\ Program Files \ Java \ jre7 \ bin \ java吗?或者两者没有区别。我将如何设置JAVA_HOME?我在某个地方看到了一个例子,但是我没有看到它在系统变量中,我认为它已经被设置在某个地方,但它不会检查。我不熟悉控制台命令,所以我不想搞砸任何东西。我会环顾四周,如果我能找到任何东西,请编辑它。我相信我会的。 – Snhr 2012-02-11 19:10:01

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 

您应该看到ch3p1.class中的类文件夹中。

使用此命令运行它:

java -cp .;classes ch3p1 

你会看到 “Hello”。在控制台。

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

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

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

+0

从他的例子看来,他做了正确的事情,并没有把代码Java安装目录中,但在一个单独的目录(C:\用户\肖恩\文件) – Optimist 2012-02-11 18:27:03

-1

这里有几件事。

Java编译器可以通过一个“目标”参数来指出您希望编译哪个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,有3分主要的:

  • 的Eclipse
  • 的NetBeans
  • 的IntelliJ

所有这三个都很好的Java IDE的,这是非常你会更喜欢哪一种宗教。我个人使用Eclipse。

最后,对于你的问题:

  1. Comiple使用javac ch3p1.java
  2. 运行使用java -cp . ch3p1
+0

我不会推荐一个IDE任何人刚开始与Java。在IDE之前,你只是不了解Java;在你加入混音的那一刻,你会遇到两个问题。至少要熟悉在命令shell和文本编辑器中编译和运行简单程序的过程。您将了解CLASSPATH并了解IDE为您做了什么。如果我做了,我会选择IntelliJ或Eclipse或NetBeans。 – duffymo 2012-02-11 18:19:26

+0

确实,在跳上IDE之前了解基础知识是一种好习惯。但是既然他在谈论工具,我想我会给他一个暗示存在的东西。就我所说的选择而言,它是宗教的,所以让我们给他选择,而不是声称一个更好。 – 2012-02-11 18:28:19

+0

实际上,我在其中一个示例中键入了-version,我正在使用JDK v7进行编译,并且正在使用JVM v6.xx来运行它。这不是与旧版本比我的运行环境编译一个问题,它与编制上比我的运行环境较新版本的一个问题。我不喜欢用IDE来做大多数事情。我只是使用Notepad ++。 – Snhr 2012-02-11 19:07:21