কমান্ড লাইন থেকে জাভা .class কিভাবে কার্যকর করা যায়


113

আমার একটি সংকলিত জাভা ক্লাস রয়েছে:

Echo.class

public class Echo {
    public static void main (String arg) {

            System.out.println(arg);
    }
}

আমি cdডিরেক্টরিতে প্রবেশ করুন এবং লিখুন:java Echo "hello"

আমি এই ত্রুটি পেয়েছি:

C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
        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)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo.  Program will exit.

Eclipse IDE ব্যবহার করার জন্য প্রস্তাবিত হিসাবে আমি কমান্ড লাইন থেকে চালাতে পারি এমন ফর্মটিতে আমার জাভা কোড পাওয়ার সহজতম উপায় কী?


14
পরামর্শ: দ্রুত পর্যালোচনার অধীনে উত্তরটি অবৈধ না করার জন্য মূল প্রশ্নটি সম্ভবত উত্তেজিত রেখে দেওয়া হবে। সঠিক পদ্ধতিটির স্বাক্ষরটি দেখতে সত্যই অদ্ভুত এবং তারপরে উত্তরগুলির একগুচ্ছ যা বলে যে এটি ভুল ছিল। কমপক্ষে সঠিক সংস্করণটির সাথে তুলনা করার লক্ষ্যে ভুল ত্রুটিযুক্ত কোডটি রেখে যাওয়ার কথা।
জেএসমিথ

উত্তর:


119

চেষ্টা করুন:

java -cp . Echo "hello"

ধরে নিচ্ছি যে আপনি সংকলন করেছেন:

javac Echo.java 

তারপরে একটি সুযোগ রয়েছে যে "বর্তমান" ডিরেক্টরিটি আপনার ক্লাসপথে নেই (যেখানে জাভা ক্লাস সংজ্ঞা সন্ধান করে)

যদি এটি হয় এবং আপনার দির প্রদর্শনগুলির বিষয়বস্তু তালিকাবদ্ধ করে থাকে:

Echo.java
Echo.class

তাহলে এর যে কোনও একটি কাজ করতে পারে:

java -cp . Echo "hello"

অথবা

SET CLASSPATH=%CLASSPATH;.  

java Echo "hello"

এবং পরবর্তীতে ফ্রেডরিক উল্লেখ করেছেন যে আপনি এর মতো অন্য একটি ত্রুটি বার্তা পাবেন।

থ্রেড "মেইন" java.lang.NoSuchMethodError: মূল মধ্যে ব্যতিক্রম

যখন এটি হয়, গিয়ে তার উত্তরটি পড়ুন :)


2
-সিপি। জাভা বলতে যে তার যুক্ত করা উচিত। (বর্তমান ওয়ার্কিং ডিরেক্টরি) ক্লাসপথের কাছে বোঝায় যে জায়গাটি যেখানে তিনি কোড খুঁজছেন।
ফ্রেড্রিক

16

আপনার ক্লাসপথ নির্দিষ্ট করা দরকার। এটি করা উচিত:

java -cp . Echo "hello"

এটি জাভাটিকে .(বর্তমান ডিরেক্টরি) এটির ক্লাসপথ হিসাবে ব্যবহার করতে বলে , যেখানে এটি ক্লাসগুলির জন্য দেখায়। আপনি যখন প্যাকেজগুলি ব্যবহার করেন তখন ক্লাসপথে প্যাকেজ সাব-ডিরেক্টরিগুলি নয়, মূল ডিরেক্টরি থাকতে হবে Note যেমন যদি আপনার ক্লাস হয় my.package.Echoএবং। ক্লাস ফাইলটি হয় bin/my/package/Echo.classতবে সঠিক শ্রেণিপথ ডিরেক্টরি bin


15

আপনার কোনও বৈধ প্রধান পদ্ধতি নেই ... স্বাক্ষরটি হওয়া উচিত: পাবলিক স্ট্যাটিক অকার্যকর প্রধান ( স্ট্রিং [] আরগস);

সুতরাং, আপনার ক্ষেত্রে কোডটি দেখতে এমন হওয়া উচিত:

public class Echo {
    public static void main (String[] arg) {

            System.out.println(arg[0]);
    }
}

সম্পাদনা: দয়া করে নোট করুন যে অস্কারটি আপনি ঠিক যে অনুপস্থিত রয়েছেন তাতেও ঠিক। আপনার ক্লাসপথে, আপনি যে ত্রুটিটি মোকাবেলা করার পরে আপনি যে সমস্যার সমাধান করব তা আপনি চালিয়ে যাবেন।


15

জাভা 11 এর সাহায্যে আপনাকে আর এই কঠোর পদক্ষেপের মধ্য দিয়ে যেতে হবে না!

পরিবর্তে, আপনি এটি করতে পারেন:

> java MyApp.java

আপনাকে আগে থেকে সংকলন করতে হবে না, কারণ এটি সমস্ত এক ধাপে সম্পন্ন হয়েছে।

আপনি এখানে জাভা 11 জেডিকে পেতে পারেন: জেডিকে 11 জিএ রিলিজ


> অনুলিপি সি: \ দেসেনভ \ ওয়ার্কস্পেস সার্ভার \ টেস্টপ্রজেক্ট rc এসসিআর \ ওয়েব সার্ভিসস্প্যান্ডএলোন \ মাই অ্যাপ.জভা। / y && javac MyApp.java && java -cp। মাই অ্যাপ এবং অ্যান্ড ডেল মাই অ্যাপএপ.ক্লাস অ্যান্ড ডেল মাই অ্যাপ.জেভা কিছু ছেলেরা পুরানো ফ্যাশন উপায় পছন্দ করে =)
জুনিয়র

3

যদি আপনার জাভা উত্স থাকে

package mypackage;

এবং আপনার ক্লাস হ্যালো। জাভা সহ

public class hello {

এবং সেই হ্যালো.জভাতে আপনার আছে

 public static void main(String[] args) {

তারপরে (সংকলনের পরে) আপনার হ্যালো.ক্লাসটি সেই ডিরেক্টরিতে পরিবর্তন করুন ডায়ার (সিডি) করুন। তারপর

java -cp . mypackage.hello

ক্লাসের নামের আগে বর্তমান ডিরেক্টরি এবং প্যাকেজের নামটি মনে রাখুন। এটি আমার লিনাক্স পুদিনার জন্য কাজ করে এবং আমি অন্যান্য ওএসেরও আশা করি

ধন্যবাদ প্রচুর তথ্যের জন্য স্ট্যাক ওভারফ্লো।


1
এনবি: ক্লাস ফাইলটি ./mypackage/hello.classনামের মাধ্যমে সন্ধানযোগ্য হওয়া উচিত । আরও দেখুন: " কমান্ড লাইন থেকে প্যাকেজে জাভা চলছে " প্রশ্ন।
রুভিম

2

আমার পরিস্থিতি কিছুটা জটিল ছিল। আমি জেএনআই কোডের জন্য রিসোর্স ডিরেক্টরিতে একটি .dll ব্যবহার করার পরে আমাকে তিনটি পদক্ষেপ করতে হয়েছিল। আমার ফাইলগুলি ছিল

S:\Accessibility\tools\src\main\resources\dlls\HelloWorld.dll
S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.class

আমার কোডে নিম্নলিখিত লাইনটি রয়েছে

System.load(HelloWorld.class.getResource("/dlls/HelloWorld.dll").getPath());

প্রথমত, আমাকে ক্লাসপাথ ডিরেক্টরিতে যেতে হয়েছিল

cd /D "S:\Accessibility\tools\src\test\java"

এর পরে, আমাকে ক্লাসপথটি বর্তমান ডিরেক্টরিটিতে নির্দেশ করতে পরিবর্তিত করতে হবে যাতে আমার ক্লাসটি লোড হয়ে যায় এবং আমাকে ক্লাসপথটি পরিবর্তন করতে হয়েছিল যাতে তিনি সংস্থানসমূহের ডিরেক্টরিতে নির্দেশ করতে পারেন যাতে আমার dll লোড হবে।

set classpath=%classpath%;.;..\..\..\src\main\resources; 

তারপরে, আমাকে ক্লাসের নাম ব্যবহার করে জাভা চালাতে হয়েছিল।

java com.accessibility.HelloWorld 

0

প্রথমত, আপনি কমান্ড লাইন জাভাক সংকলক ব্যবহার করে ক্লাসটি সংকলন করেছেন? দ্বিতীয়ত, মনে হচ্ছে যে আপনার মূল পদ্ধতির একটি ভুল স্বাক্ষর রয়েছে - এটি স্ট্রিং অবজেক্টগুলির একটি অ্যারে গ্রহণ করা উচিত, কেবল একটির পরিবর্তে:

public static void main(String[] args){

একবার আপনি স্ট্রিং অবজেক্টের অ্যারে নিতে আপনার কোড পরিবর্তন করেছেন, তারপরে আপনাকে নিশ্চিত করতে হবে যে আপনি অ্যারে নিজেই অ্যারের পরিবর্তে অ্যারের একটি উপাদান মুদ্রণ করছেন:

System.out.println(args[0])

আপনি যদি কমান্ড লাইন আর্গুমেন্টগুলির পুরো তালিকাটি মুদ্রণ করতে চান তবে আপনাকে একটি লুপ ব্যবহার করতে হবে, যেমন

for(int i = 0; i < args.length; i++){
    System.out.print(args[i]);
}
System.out.println();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.