0 امتیاز
قبل در برنامه نویسی توسط (10 امتیاز)
ویرایش شده قبل توسط

من دارم در حین runtime یک کلاسی رو لود میکنم که این کلاس در دایرکتوری d:\operators.Operator قرار داره(operators) نام پکیج هست.ولی وقتی برنامه رو run میکنم با استثنا ClassNotFoundException مواجه میشم (برنامه اصلی من در دایرکتوری d:\project\main.MathClass قرار داره) . من به این صورت لود میکنم

                        //Find operator path
			String rootPath = System.getProperty("user.dir");
			int endOfSubstring = rootPath.indexOf("\\");
			String operatorPath = rootPath.substring(0,endOfSubstring);
			operatorPath = operatorPath + "operator";

			//Load operators from another file
			File operatorFile = new File(operatorPath);
			URL operatorFilePath = operatorFile.toURL();          
			URL[] operatorFilePaths = new URL[]{operatorFilePath};
			ClassLoader operatorsLoader = new URLClassLoader(operatorFilePaths);
			System.out.println(operatorFilePaths);
			
			Class operatorInterface = operatorsLoader.loadClass("operators.Operator");

کسی میدونه علتش چیه؟

قبل توسط (302 امتیاز)
فکر میکنم وقتی مسیر اصلی برنامه رو ساب استیرنگ میکنید، باید فقط \\:D بمونه! یعنی دیگه نباید operator رو اضافه کنید به مسیر. مگه اینکه فایل کلاستون توی یه فولدر دیگه باشه(فولدر پکیج)! که اینجوری که گفتین اینطور نیست.
قبل توسط (10 امتیاز)
پوشه اصلی برنامه در این مسیر هست : d:\project\main.MathClass
پوشه اوپراتورها در این مسیر هست : d:\operators.Operator
در دو فولدر جداگانه هستن ولی در یک درایو

1 پاسخ

0 امتیاز
قبل توسط (302 امتیاز)
ویرایش شده قبل توسط

File file = new File("..\\..\\operators");

try {
    URL url = file.toURL();
    URL[] urls = new URL[]{url};
    ClassLoader cl = new URLClassLoader(urls);

    Class cls = cl.loadClass("operators.Operator");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}

 

قبل توسط (10 امتیاز)
با این فرمت هم امتحان کردم بازم نشد واقعا مستاصل شدم
قبل توسط (302 امتیاز)
میشه مسیر دقیق فایل Operators.class و classpath رو بگید
قبل توسط (10 امتیاز)
operators.class  : d:\operators.Operator
classpath d:\project\main.MathClass
قبل توسط (302 امتیاز)
با هر دو روش absolute path به url بدید ببینید جواب میده
قبل توسط (302 امتیاز)
پکیج رو جدا کنید از اسم کلاس، به جاش فولدر بذارید! یعنی اینجوری بشه:
operators.class  : d:\operators\Operator
classpath d:\project\main\MathClass
قبل توسط (10 امتیاز)
همه ی این کارهارو انجام دادم حل نشد .واقعا نمیدونم مشکل از کجاست از صبح درگیر این exception شدم
قبل توسط (302 امتیاز)
ویرایش شد.
من امتحان کردم این تیکه کد رو. نام گذاریه فولدری رو متناسب با اسم پکیج کنید جواب میده.
قبل توسط (10 امتیاز)
یعنی چه طور؟می دونید برنامه من یکم طولانیه این فقط یه بخشی از کد من هست
قبل توسط (10 امتیاز)
ممنونم مشکل کد رو پیدا کردم

سوالات مشابه

0 امتیاز
2 پاسخ 911 بازدید
0 امتیاز
1 پاسخ 399 بازدید
0 امتیاز
0 پاسخ 181 بازدید
+1 امتیاز
1 پاسخ 519 بازدید
+1 امتیاز
1 پاسخ 278 بازدید
+1 امتیاز
1 پاسخ 329 بازدید
...