誰能幫我解決JAVA這個問題 編譯時沒錯 但是運行時就出錯了


下面的是我按課本上的程序編寫的例子  我機子上裝的是JAVA1.5 

import java.io.*;
import java.io.IOException;
public class Sayit{
     public static void main (String[]  args) throws IOException{
     InputStreamReader  reader=new InputStreamReader(System.in);
     BufferedReader     input =new BufferedReader(reader);
     System.out.print("Enter you name:");
     String  name=input.readLine();
     System.out.println("Hello,"+name+"!");
     }
          
  }
我編譯時沒出現錯誤
Exit code: 0
No Errors

但是我緊接着運行時就出現下面的提示:
java.lang.NoClassDefFoundError: Sayit
Exception in thread "main" Exit code: 1
There were errors
哪位大蝦幫我解決下 謝謝!

68 个解决方案

#1


我運行了
沒有問題

#2


我運行怎么沒有錯誤
init:
deps-jar:
Deleted 6 out of date files in 0 seconds
Compiling 1 source file to D:\projects\test\build\classes
compile:
run-single:
zhou
Enter you name:Hello,zhou!
BUILD SUCCESSFUL (total time: 46 seconds)

這是在NB6.0下的結果,

#3


順便提一下
這是在JDK1.6上的

#4


java.lang.NoClassDefFoundError: Sayit
---------------------
是因為沒有找到Sayit.class這個文件
編譯時應該確認大小寫,再看看有沒有生成這個類文件

#5


程序運行是沒問題的
Enter you name:wxl
Hello,wxl!

#6


我還有個問題想問下    我用的是JDK1.5  我把那個環境變量里的系統變量里的那個classpath是設好的,但是老師講時還有個變量path  這個變量貌似是指出放.class的路徑的 編譯后的.class一般都放里面 那個path 不知道是在環境變量里的 系統變量 還是 用戶變量 里面建立  而且是否有必要非要建立這個path 變量 

 上面那位仁兄說是沒找到Sayit.class  但是我那文件包里已經生成了Sayit.class  而且大小寫也沒錯  但就是運行時出現上面的那個提示
java.lang.NoClassDefFoundError: Sayit
Exception in thread "main" Exit code: 1
There were errors

#7


在用戶變量里面設置路徑只是對當前用戶有用,而在系統變量里面設置對所有用戶都有用, PATH應該是設置為BIN路徑,這樣BIN目錄下的那些命令才可以直接運行。
你的程序我也可以運行,不太清楚為什么你不可以

#8


找不到你編譯的CLASS類而已
在CLASSPATH中設置路徑
或直接在命令行中用-classpath 就可以了

#9


在dos環境下敲javac 回車是不是出現:
C:\Documents and Settings\Administrator>javac
'javac' 不是內部或外部命令,也不是可運行的程序
或批處理文件。

這樣的字樣?那就是環境變量配得不對dos環境下path變量和classpath變量都是必須的

#10


我還有個問題想問下    我用的是JDK1.5  我把那個環境變量里的系統變量里的那個classpath是設好的,但是老師講時還有個變量path  這個變量貌似是指出放.class的路徑的 編譯后的.class一般都放里面 那個path 不知道是在環境變量里的 系統變量 還是 用戶變量 里面建立  而且是否有必要非要建立這個path 變量 

要設置PATH變量 這個變量為你找到JAVAC和JAVA等程序的位置 保證在編譯和運行時能直接到相關程序運行.....在PATH值中加入你的JDK安裝的目錄\BIN即可  還有一個叫CLASSPATH的變量 這個是用來指定你的JAVA文件經過編譯后生成的CLASS文件的位置的 有兩種方法設置:1.在命令行里輸入 set classpath=你的CLASS文件的路徑;. 這個點是指在當前目錄查找CLASS文件 2.在我的電腦---屬性----高級----環境變量---系統變量里新建......一般情況下也可以直接用命令行運行CLASSPATH  java -classpath CLASS文件路徑 CLASS文件名 
如果還有問題就不清楚了......

#11


我運行了,沒有問題,就是你電腦上的環境變量的設置問題.....
運行結果:
enter your name:zh
hello,zh!
實在不行,就用最笨的辦法,在命令行里進入到你CLASS類所在目錄再運行JAVA試試...

#12


還有一點....文件名要和類名一樣....因為你的類是public 的....

#13


我的jdk1.5安裝的路徑為 E:\java\jdk1.5  我的變量classpath為“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”變量path為“E:\java\jdk1.5\bin”
不知道對不  
我在dos環境下敲javac 回車  出現了JAVAC的用法格式  還有里面關於選項的一些說明
C:\Documents and Settings\Administrator>javac e:\java\jdk1.5\lib\Sayit.java之后
有Sayit.class文件生成  繼續用
C:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  出現
Exception in thread “main”java.lang.NoClassDefFoundError:e:\java\jdk1/5\lib\Sayit/class

#14


文件名和類名一致這個知道,是一樣的

#15


你是不是運行時輸入的javac Sayit? 要運行請用java Sayit

#16


javac 是先編譯的  完了后用java  Sayit 運行的

#17


沒看清,看樣子不是這個問題,

#18


你代碼文件夾結構是怎么樣的?

#19


系統變量 path E:\java\jdk1.5\bin后面還有變量沒?如果有bin后面你加;沒?

#20


import java.io.*;
import java.io.IOException;
public class Sayit{
     public static void main (String[]  args) throws IOException{
     InputStreamReader  reader=new InputStreamReader(System.in);
     BufferedReader     input =new BufferedReader(reader);
     System.out.print("Enter you name:");
     String  name=input.readLine();
     System.out.println("Hello,"+name+"!");
     }
          
  }
直接編譯沒有錯誤提示 是對的
Exit code: 0
No Errors
 但是緊接着運行就出現這個提示
java.lang.NoClassDefFoundError: Sayit
Exception in thread "main" Exit code: 1
There were errors
他們有人說是我環境變量設置錯誤  但是有的程序卻可以正常編譯和運行

#21


我的jdk1.5安裝的路徑為 E:\java\jdk1.5  我的變量classpath為“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”變量path為“E:\java\jdk1.5\bin”
不知道對不  

#22


classpath前面加個.;試試

#23


我們課本上給的環境變量是classpath=“E:\java\jdk1.5\bin;E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”沒說要給變量path

#24


變量path為“E:\java\jdk1.5\bin"? 后面沒有了?如果有要在這個后面加;
很可能是環境變量的問題.

#25


我的jdk1.5安裝的路徑為 E:\java\jdk1.5  我的變量classpath為“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”變量path為“E:\java\jdk1.5\bin”
不知道對不  
我在dos環境下敲javac 回車  出現了JAVAC的用法格式  還有里面關於選項的一些說明
C:\Documents and Settings\Administrator>javac e:\java\jdk1.5\lib\Sayit.java之后
有Sayit.class文件生成  繼續用
C:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  出現
Exception in thread “main”java.lang.NoClassDefFoundError:e:\java\jdk1/5\lib\Sayit/cla

C:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  這個不可以這樣用的......你用java -classpath e:\java\jdk1.5\lib Sayit 試試應該沒問題... 

#26


或者進入到命令行:e:\java\jdk1.5\lib 
在這個命令行下輸入java Sayit.....
試試

#27


是見點和分號嗎?

#28


那個.是用來指示當前目錄的.....要加上.....

#29


嗯 我試了在我電腦上沒問題我的classpath為.;
path在原來的前面加上了 C:\Program Files\Java\jdk1.6.0_02\bin;

#30


出來的錯誤提示一樣的

#31


classpath設置成 點號分號 .;
再試試

#32


你用java -classpath e:\java\jdk1.5\lib Sayit 
這個語句也試了?

#33


和Classpath一般沒有多大關系的.....主要是JAVAC和JAVA正常就行.....你在命令行里輸入JAVA應該正常吧

#34


你在命令行里輸入JAVA和JAVAC都正常
java -classpath e:\java\jdk1.5\lib Sayit 
也試了

#35


還有改了變量之后,命令行要重啟才有效的.....

#36


你肥這個java源文件移動到d盤根目錄下,然后編譯運行看看

#37


暈...你的Sayit類是在e:\java\jdk1.5\lib 目錄下吧還是在lib下還有一個文件夾Sayit,如果有還得再加上這個.把路徑寫全了再加個空格寫類名.........這樣的話,就不知道了...我在這里試過了,沒一點問題

#38


我把.;Classpath改為書上的"E:\java\jdk1.5\bin;E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar" path改為"E:\java\xyz"(我的.JAVA程序和編譯生成的.CLASS文件都放在里E:\java\xyz  之前好的時候就是這樣設置的 結果在FreeJava上編譯是好的 運行就出現
Enter you name:Exception in thread "main" java.io.IOException: 句柄無效。
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:194)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:254)
at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at Sayit.main(Sayit.java:8)
Exit code: 1
There were errors
我估計是不是版本的問題

#39


你進到你放class文件的目錄下,然后用java 命令運行,看會出錯不

#40


java e:\java\jdk1.5\lib\Sayit 的意思是運行e:\java\jdk1.5\lib\Sayit文件夾啊?這個一定是錯的,你進到這個文件夾下運行試試驗

#41


你最好試試別的程序是否可以運行......
如果以前可以運行現在不行了說明你的環境變量改得有問題了.....

#42


java e:\java\jdk1.5\lib\Sayit 這里一定錯了,

#43


我的JDK1.5嗎?我的JDK1.5運行其他幾個小程序沒問題 就是運行這個有問題 我就暈了 不知道是不是版本問題

#44


你的是JDK1.5嗎?我的JDK1.5運行其他幾個小程序沒問題 就是運行這個有問題 我就暈了 不知道是不是版本問題

#45


java e:\java\jdk1.5\lib\Sayit 你是不是這樣運行的?要是這樣出錯正常

#46


java e:\java\jdk1.5\lib Sayit 我是這樣運行的 但是就是運行Sayit不行  運行其他的小程序就可以

#47


java
麻煩

#48


不是版本問題.....你有沒有進入到Sayit類所在的目錄下(我指命令行下),再使用java Sayit運行?
你前面的那個運行命令是錯的....就不能那樣運行.....

#49


比如這個洋灰3角的程序
public class YH
{
    int i,j;
    int n =10;
    int mat[][] = new int [n][];
    
    void JJ()
    {
       for(i =0; i<n; i++)
        {
             mat[i] = new int[i+1];
             mat[i][0] = 1;
             mat[i][i] = 1;
             for(j=1; j<i; j++)
                 mat[i][j] = mat[i-1][j-1]+mat[i-1][j];
           
         }      
     }
     
     
     void SC()
     {
        for(i=0; i<mat.length; i++)
        {
            for(j=0; j<n-1; j++)
                System.out.print(" ");
            for(j=0; j<mat[i].length; j++)
                System.out.print(" " +mat[i][j]);
            System.out.println();
         }
      }
      
      public static void main(String [] args)
      { 
        
        YH TJ = new YH();
        TJ.JJ();
        TJ.SC();
      } 
}
      編譯后用 java e:\java\jdk1.5\lib YH 運行正常

#50


怪了,我運行不行,你到文件夾下運行sayit試試啊,如果沒問題再看看

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com