Jump to content


Windows Server 2012

- - - - -

[FAQ] วิธีเซต classpath


  • Please log in to reply
44 replies to this topic

#1 wich246

wich246

    Junior Member

  • Members
  • Pip
  • 73 posts

Posted 13 July 2004 - 12:28 AM

Test.java

public class Test
{
 	 public static void main(String[ ] args)
	{ int i=1;
  while (i<10){
  System.out.println(i*i);
  i=i+1;
	}
}
}
----------------------------------------------------------
java.lang.NoClassDefFoundError: Test
Exception in thread "main"


compile ได้ ไฟล์ Test.class มา แต่ run ไม่ได้ ไม่รู้เป็นไรครับ ช่วยด้วยครับ

งง

uninstall jdk แล้ว install ใหม่ ก็ไม่หาย

ถ้าไม่หาย ไม่รู้วิธีแก้ปัญหา กะว่าจะ format ซะแล้ว เฮ้อๆๆ

ไม่รู้ว่าสาเหตุ น่าจะมาจากสาเหตุอื่น มากกว่าสาเหตุที่ หาไฟล์ .class ไม่เจอ
ถ้าใครแก้ก็ช่วยบอกด้วยนะครับ
ขอบคุณครับ

#2 Rux

Rux

    Principle Member

  • Star
  • 1136 posts

Posted 13 July 2004 - 12:49 AM

ผมลองรันโค้ดของคุณ  ก็รันได้ปกตินี่ครับ  โดยโค้ดเป็นดังนี้
public class Test
{
public static void main(String[ ] args)
{ int i=1;
while (i<10){
System.out.println(i*i);
i=i+1;
}
}
}
เซฟเป็นไฟล์ Test.java แล้ว Compile ที่ command prompt ด้วยคำสั่ง
    javac Test.java
แล้วรันที่ command prompt ด้วยคำสั่ง
    java Test

#3 นายข้าวโพดหวาน

นายข้าวโพดหวาน

    Committee

  • Committee
  • 7138 posts

Posted 13 July 2004 - 01:27 AM

อย่าลืมเซต classpath ให้รวม current directory ก่อนรันด้วยนะครับ

c:\>set classpath=.;%classpath%
c:\>java Test

รู้สึกปัญหานี้เป็นปัญหายอดนิยมของคนที่หัดใช้จาวา ทำไมจาวาไม่ออกแบบให้รันง่ายกว่านี้ก็ไม่รู้

#4 wich246

wich246

    Junior Member

  • Members
  • Pip
  • 73 posts

Posted 13 July 2004 - 11:01 PM

ขอบคุณครับ แต่ว่าผมต้อง set ทุกครั้งเวลาrun เลยหรอ

#5 นายข้าวโพดหวาน

นายข้าวโพดหวาน

    Committee

  • Committee
  • 7138 posts

Posted 13 July 2004 - 11:10 PM

ใช้โอเอสอะไรหรือครับ ถ้าเป็น windows 2000/xp สามารถเซต environment variables ถาวรได้ใน control panel...system..advanced..environment variables แล้วหาตัวแปรชื่อ classpath แล้วเพิ่ม .; ไว้ข้างหน้า หลังจากกนั้นกด OK พอต่อไปเปิด command prompt ใหม่ ตัวแปร classpath จะรวม current directory ให้โดยอัตโนมัติครับ

#6 up1

up1

    Topgun

  • Topgun
  • 2750 posts

Posted 14 July 2004 - 10:42 AM

เพิ่มเติมนะครับ


ใน  Linux   สามารถเข้าไป set  ได้ใน file

1.    /etc/profile    

หรือ

2.   $home directory/.bachrc


โดยทำการ set ดังนี้

CLASSPATH=.;$CLASSPATH

export CLASSPATH;


#7 iWat

iWat

    Topgun

  • Topgun
  • 3284 posts

Posted 14 July 2004 - 11:04 AM

บน linux ผมไม่แก้ที่ /etc/profile โดยตรงอ่ะครับ
แต่ไปสร้างไฟล์ที่ /etc/profile.d ... โดยสร้างไปว่า java.sh (755)

export CLASSPATH=.
export JAVA_HOME=/usr/local/java/j2sdk1.5.0
export PATH=$JAVA_HOME/bin:$PATH

Edited by iWat, 18 July 2004 - 10:26 PM.


#8 binladen

binladen

    Junior Member

  • Members
  • Pip
  • 99 posts

Posted 15 July 2004 - 10:40 PM

แล้วถ้าจะ set class path หลายตัวจะ set ยังไงอะคับ
เช่นมี .jar สัก 3 ตัวที่จะ set ไปหาอะคับ บน linux นะครับ

#9 iWat

iWat

    Topgun

  • Topgun
  • 3284 posts

Posted 16 July 2004 - 02:20 PM

binladen, on Jul 15 2004, 10:40 PM, said:

แล้วถ้าจะ set class path หลายตัวจะ set ยังไงอะคับ
เช่นมี .jar สัก 3 ตัวที่จะ set ไปหาอะคับ บน linux นะครับ
บน linux ให้ใช้เครื่องหมาย colon (:) ขั้นระหว่างไฟล์ครับ
บน windows ใช้ semi-colon (;) แทน
Linux
java -cp myjar1.jar:myjar2.jar:myjar3.jar MyMainClass
Windows
java -cp myjar1.jar;myjar2.jar;myjar3.jar MyMainClass

Edited by iWat, 16 July 2004 - 02:22 PM.


#10 binladen

binladen

    Junior Member

  • Members
  • Pip
  • 99 posts

Posted 17 July 2004 - 12:44 AM

ถ้า set ใน profile จะเป็นแบบนี้เหรอครับ


   export JAVA_HOME=/usr/java/j2sdk1.4.2_02
   export PATH=${PATH}:/usr/java/j2sdk1.4.2_02/bin
   export CLASSPATH=”.:$JAVA_HOME/lib/tools.jar:$JBOSS_HOME/server/default/lib/jboss-j2ee.jar:/my_file/mysqlxxx.jar”
ประมาณนี้ป่าวอะครับ

#11 iWat

iWat

    Topgun

  • Topgun
  • 3284 posts

Posted 17 July 2004 - 09:37 AM

ประมาณนั้นแหล่ะครับ

แต่ไม่แนะนำให้ใส่ User-Defined JAR เข้าไปใน CLASSPATH หลักนะครับ (myfile)

ถ้าเดาจาก CLASSPATH ที่คุณใส่ไป ... ตัวสุดท้ายน่าจะเป็น mysql/jdbc แน่ ๆ เลย
ใส่แบบนั้นก็ได้ครับ ... หรือไม่ก็เอาไปใส่ที่ $JAVA_HOME/jre/lib/ext ก็ได้

#12 binladen

binladen

    Junior Member

  • Members
  • Pip
  • 99 posts

Posted 18 July 2004 - 06:08 PM

CLASSPATH=.;$CLASSPATH

export CLASSPATH;

ถ้าทำแบบที่คุณ iWat บอกมันน่าจะได้แบบนี้จิคับ

CLASSPATH=.:$CLASSPATH

export CLASSPATH;
หรือผมงงเอง - -'

#13 iWat

iWat

    Topgun

  • Topgun
  • 3284 posts

Posted 18 July 2004 - 09:06 PM

หมายถึงเครื่องหมาย semi-colon กับ colon ใช่หรือเปล่าครับ
ถ้าเรื่องนั้นละก็ ... บน *NIX ใช้เครื่องหมาย colon ครับ

ที่คุณ binladen เข้าใจนั่นถูกต้องดีแล้วครับ

#14 wich246

wich246

    Junior Member

  • Members
  • Pip
  • 73 posts

Posted 20 July 2004 - 09:24 PM

ขอบคุณครับ แต่ผมงงว่า ตอนแรกผมใช้ win Xp ใช้ java ได้ ไม่มีปัญหา แต่พอผมลง program อะไรสักอย่างไปเยอะ อยู่ๆ java ผมก็ run ไม่ได้ ทั้งๆที่ install ใหม่หลายครั้ง

ผมอยากรู้ว่ามันน่าจะมีสาเหตุอะไร เพราะปกติลงแล้ว set path [c:\jdk1.4\bin] ได้ ไม่เห็นต้อง set classpath แบบที่นายข้าวโพดออกเลยอ่ะ

ขอบคุณครับ

#15 iWat

iWat

    Topgun

  • Topgun
  • 3284 posts

Posted 20 July 2004 - 11:15 PM

โดยปกติแล้ว เวลารันไม่จำเป็นต้องใช้ ClassPath
เพราะ ClassLoader จะหาจากไดเร็กทอรีปัจจุบันเอง
แต่เวลาคอมไพล์งานจำเป็นต้องกำหนดเอาไว้ ไม่งั้นจะหาคลาสอื่นไม่เจอ

แต่ในบางสถานการณ์ ไม่ทราบว่าทำไมเหมือนกันครับ
มันหาคลาสไม่เจอ ... พอ set classpath แล้วก็หาย ...
เลยเอาเป็นว่า set ไว้ดีกว่าครับ




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users