জাভাতে মুদ্রণযন্ত্রের ব্যবহার কী?


99

আমি একটি সকেট প্রোগ্রামের মাধ্যমে যাচ্ছি। এটিতে, ক্যাচ ব্লকের অবজেক্টটিতে printStackTraceডাকা হয় IOException
কী printStackTrace()আসলে কি?

catch(IOException ioe)
{
    ioe.printStackTrace();
}

আমি এর উদ্দেশ্য সম্পর্কে অসচেতন। এটা কি কাজে লাগে?


47
আধুনিক আইডিইর অন্যতম শক্তিশালী বৈশিষ্ট্য হ'ল প্রদত্ত জাভা পদ্ধতির জন্য ডকুমেন্টেশনগুলি (জাভাদোক নামে পরিচিত) সন্ধান করার ক্ষমতা। ক্রিয়ারটি যখন প্রিন্টস্ট্যাকট্রেস পদ্ধতির নামে রাখা হয় তখন অ্যালিপসে এটি শিফট-এফ 2 হয়।
থোরবজর্ন রাভন অ্যান্ডারসন

4
মনে হচ্ছে আপনি জাভাতে নতুন। এখানে পড়তে কিছু today.java.net/article/2006/04/04/...
TJR

এটি প্রিন্টস্ট্যাকট্রেসের কোডটিও পড়তে পারে (এটি) ঠিক কী করে এবং এটি কী করে তা দেখতে।
পিটার লরি

4
আমি প্রায়শই ক্যাচ ব্লকের ভিতরে এই প্যাটার্নটি দেখতে পাই: e.printStackTrace(); System.exit(1); এখানে আমি ওপি হিসাবে একই প্রশ্ন জিজ্ঞাসা করতে চাই, তবে অন্য শিরাতে: এর উদ্দেশ্য কী? ব্যতিক্রমটি ছুঁড়ে ফেলা হলে কি জেআরই স্বয়ংক্রিয়ভাবে স্ট্যাকট্রেস মুদ্রণ করবে এবং প্রস্থান করবে না? অর্থাৎ এখানে আসলে খুব বেশি "এক্সেসপনেশন হ্যান্ডলিং" চলছে না, ঠিক ??
ওভেন

4
এটি সাধারণত একটি খুব খারাপ ধারণা , যেমন এটি ব্যতিক্রমকে দমন করে - দুর্ভাগ্যক্রমে এটিই হ'ল এক্লিপস এবং অন্যান্য আইডিইগুলি প্রায়শই ক্যাচ ব্লকের জন্য দেহ হিসাবে স্বতঃ-পরামর্শ দেয়, তাই এটি যতটা হওয়া উচিত তার চেয়ে অনেক বেশি বার ব্যবহৃত হয় ।
dimo414

উত্তর:


100

এটি Exceptionউদাহরণগুলির একটি পদ্ধতি যা উদাহরণের স্ট্যাক ট্রেসটি মুদ্রণ করেSystem.err

ব্যতিক্রমগুলি নির্ণয়ের জন্য এটি একটি খুব সাধারণ, তবে খুব দরকারী সরঞ্জাম। এটি আপনাকে জানায় যে কী ঘটেছিল এবং কোডে কোথায় ঘটেছিল।

বাস্তবে এটি কীভাবে ব্যবহৃত হতে পারে তার একটি উদাহরণ এখানে:

try {
    // ...
} catch (SomeException e) { 
    e.printStackTrace();
}

4
এবং পরীক্ষিত ব্যতিক্রমগুলি ধন্যবাদ এটি সম্ভবত catchব্লকের # 1 সামগ্রী :-)
জোয়

4
@ জোয়ে বাthrow new RuntimeException(e)
বার্ট ভ্যান হিউকেলোম

4
তবে এটি থ্রেডসেফ না হওয়ায় এটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়। লগার স্টেটমেন্টটি ব্যবহার করুন এবং এটি সেখানে অন্তর্ভুক্ত করুন।
ক্যারিড্রগ্ন

42

আমি এটি সম্পর্কে একধরণের কৌতূহল ছিলাম, তাই আমি কেবলমাত্র একটি সামান্য নমুনা কোড একসাথে রেখেছি যেখানে আপনি দেখতে পাচ্ছেন এটি কী করছে:

try {
    throw new NullPointerException();
}
catch (NullPointerException e) {
    System.out.println(e);
}

try {
    throw new IOException();
}
catch (IOException e) {
    e.printStackTrace();
}
System.exit(0);

কলিং println(e):

java.lang.NullPointerException

কলিং e.printStackTrace():

java.io.IOException
      at package.Test.main(Test.java:74)

এটি সাধারণ, প্রথমটি দিয়ে আপনি ত্রুটির টু স্ট্রিং () কল করেন এবং দ্বিতীয়টিতে আপনি ত্রুটি থেকে সমস্ত স্ট্যাকট্রেস মুদ্রণ করতে বলেছেন ask এটি 2 বিভিন্ন জিনিস।
জন

4
System.err.println(e);আরও উপযুক্ত হবে।
রুট ট্র্যাভেলার

14

এটি ব্যতিক্রম চিহ্নিত করতে সহায়তা করে। উদাহরণস্বরূপ আপনি আপনার প্রোগ্রামে কিছু পদ্ধতি লিখছেন এবং আপনার কোনও একটি পদ্ধতির ফলে ত্রুটি দেখা দেয়। তারপরে প্রিন্টসট্যাক আপনাকে কোন পদ্ধতিটি বাগের কারণ হিসাবে চিহ্নিত করতে সাহায্য করবে। স্ট্যাক এটির মতো সহায়তা করবে:

প্রথমে আপনার মূল পদ্ধতিটি কল করা হবে এবং স্ট্যাকের জন্য সন্নিবেশ করা হবে, তারপরে দ্বিতীয় পদ্ধতিটি কল করা হবে এবং লাইফোর ক্রমে স্ট্যাকটিতে প্রবেশ করানো হবে এবং যদি কোনও পদ্ধতির অভ্যন্তরে কোথাও ত্রুটি দেখা দেয় তবে এই স্ট্যাকটি সেই পদ্ধতিটি সনাক্ত করতে সহায়তা করবে।


11

printStackTrace()প্রকৃত সমস্যাটি কোথায় ঘটেছে তা বুঝতে প্রোগ্রামারকে সহায়তা করে। printStacktrace()বর্গ একটি পদ্ধতি Throwableএর java.langপ্যাকেজ। এটি আউটপুট কনসোলে বিভিন্ন লাইন মুদ্রণ করে। প্রথম লাইনটিতে বেশ কয়েকটি স্ট্রিং রয়েছে। এতে থ্রোয়েবল সাব-ক্লাসের নাম এবং প্যাকেজ তথ্য রয়েছে। দ্বিতীয় লাইন থেকে, এটি ত্রুটি অবস্থান / লাইন নম্বর দিয়ে শুরু করে বর্ণনা করে at

শেষ লাইনটি সর্বদা ত্রুটি / ব্যতিক্রম দ্বারা প্রভাবিত গন্তব্য বর্ণনা করে। দ্বিতীয় শেষ লাইনটি স্ট্যাকের পরবর্তী লাইনটি সম্পর্কে জানায় যেখানে শেষ লাইনে বর্ণিত রেখা নম্বর থেকে স্থানান্তর পাওয়ার পরে নিয়ন্ত্রণ চলে। ত্রুটিগুলি / ব্যতিক্রমগুলি স্ট্যাকের আকারে আউটপুটকে প্রতিনিধিত্ব করে, যা শ্রেণিবদ্ধ fillInStackTrace()পদ্ধতি দ্বারা স্ট্যাকটিতে খাওয়ানো হয়েছিল Throwable, যা নিজেই এক্সিকিউশন স্ট্যাকের মধ্যে প্রোগ্রাম নিয়ন্ত্রণ স্থানান্তর বিবরণে পূরণ করে। শুরু হওয়া লাইনগুলি atএক্সিকিউশন স্ট্যাকের মান ব্যতীত আর কিছুই নয়। এই পদ্ধতিতে প্রোগ্রামার বুঝতে পারে যে কোডে আসল সমস্যাটি কী।

printStackTrace()পদ্ধতির পাশাপাশি এটি ব্যবহার করা ভাল ধারণা e.getmessage()


6

printStackTrace()উত্স কোডে ব্যতিক্রমগুলি যেখানে অবস্থিত সেগুলি মুদ্রণ করে, সুতরাং প্রোগ্রামটি লেখার লেখক কী ভুল হয়েছে তা দেখার অনুমতি দেয়। তবে যেহেতু এটি উত্স কোডে সমস্যাগুলি দেখায়, ব্যবহারকারী (গুলি) যাঁর কোনও কোডিং অভিজ্ঞতা থাকতে পারে বা নাও থাকতে পারে তা ভুল বুঝতে পারে না, সুতরাং যদি প্রোগ্রামটি ব্যবহারকারীকে লেখকদের ত্রুটি বার্তা প্রেরণ করতে দেয়, ব্যবহারকারীরা কী ভুল হয়েছে সে সম্পর্কে ভাল ডেটা দিতে সক্ষম নাও হতে পারে।

আপনার Logger.getLogger()পদ্ধতিটি বিবেচনা করা উচিত , এটি আরও ভাল ব্যতিক্রম হ্যান্ডলিং (লগিং) সুবিধা দেয়, এবং printStackTrace()তর্ক ছাড়াই অপ্রচলিত হিসাবে বিবেচিত হয় এবং কেবলমাত্র ডিবাগিং উদ্দেশ্যে ব্যবহার করা উচিত, ব্যবহারকারী প্রদর্শনের জন্য নয়।


2

printStackTrace()সাহায্য প্রোগ্রামার বুঝতে যেখানে প্রকৃত সমস্যা হয়েছে। printStackTrace()পদ্ধতি বর্গ একজন সদস্য Throwablejava.langপ্যাকেজ।


2

printStackTraceThrowableক্লাসের একটি পদ্ধতি । এই পদ্ধতিটি কনসোলে ত্রুটি বার্তা প্রদর্শন করে; যেখানে আমরা সোর্স কোডে ব্যতিক্রম পাচ্ছি। এই পদ্ধতিগুলি ক্যাচ ব্লকের সাথে ব্যবহার করা যেতে পারে এবং সেগুলি বর্ণনা করে:

  1. ব্যতিক্রম নাম।
  2. ব্যতিক্রম বর্ণনা।
  3. উত্স কোডে ব্যতিক্রমের অবস্থান।

তিনটি পদ্ধতি যা কনসোলে ব্যতিক্রম বর্ণনা করে (যার মধ্যে প্রিন্টস্ট্যাকট্রেস এর মধ্যে একটি) সেগুলি হল:

  1. printStackTrace()
  2. toString()
  3. getMessage()

উদাহরণ:

public class BabluGope {
    public static void main(String[] args) {
        try {
            System.out.println(10/0);
         } catch (ArithmeticException e) {
             e.printStackTrace();   
             // System.err.println(e.toString());
             //System.err.println(e.getMessage());  
         }
    }
}

1

প্রিন্টস্ট্যাকট্রেস () প্রকৃত সমস্যাটি কোথায় ঘটেছে তা বুঝতে প্রোগ্রামারকে সহায়তা করে। এটি ব্যতিক্রম চিহ্নিত করতে সহায়তা করে। এটি হ'ল প্রতিটি ব্যতিক্রম শ্রেণীর দ্বারা উত্তরাধিকার সূত্রে থ্রোয়েবল শ্রেণীর প্রিন্টস্ট্যাকট্রেস () পদ্ধতি। এই পদ্ধতিটি ই বস্তুর একই বার্তা এবং লাইন নম্বর যেখানে ব্যতিক্রম ঘটেছে তা মুদ্রণ করে।

নীচে জাভাতে ব্যতিক্রমের মুদ্রণ স্ট্যাকের আরেকটি উদাহরণ।

public class Demo {
   public static void main(String[] args) {
      try {
         ExceptionFunc();
      } catch(Throwable e) {
         e.printStackTrace();
      }
   }
   public static void ExceptionFunc() throws Throwable {
      Throwable t = new Throwable("This is new Exception in Java...");

      StackTraceElement[] trace = new StackTraceElement[] {
         new StackTraceElement("ClassName","methodName","fileName",5)
      };
      t.setStackTrace(trace);
      throw t;
   }
}

জাভা.লাং.ট্রোয়েবল: এটি জাভাতে নতুন ব্যতিক্রম ... ক্লাসনেম.মোথারডনেমে (ফাইলের নাম: 5)


0

জাভাতে e.printStackTrace () পদ্ধতির ব্যবহার কী?

ঠিক আছে, এই পদ্ধতিটি ব্যবহার করার উদ্দেশ্যটি e.printStackTrace();হ'ল আসলে কী ভুল তা দেখা।

উদাহরণস্বরূপ, আমরা একটি ব্যতিক্রম পরিচালনা করতে চাই। আসুন নীচের উদাহরণটি একবার দেখুন।

public class Main{

  public static void main(String[] args) {

    int a = 12;
    int b = 2;

    try {
       int result = a / (b - 2);
       System.out.println(result);
    }

    catch (Exception e)
    {
       System.out.println("Error: " + e.getMessage());
       e.printStackTrace();
    }
  }
}

e.printStackTrace();ঠিক কী ভুল তা দেখানোর জন্য আমি পদ্ধতি ব্যবহার করেছি ।

আউটপুটে, আমরা নিম্নলিখিত ফলাফল দেখতে পারি।

Error: / by zero

java.lang.ArithmeticException: / by zero

  at Main.main(Main.java:10)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

-1

এখানে চিত্র দেখুন

printStackTrace() কোন লাইনে আপনি ত্রুটি পাচ্ছেন কেন তা ত্রুটি হচ্ছে তা বলছে।

উদাহরণ:

 java.lang.ArithmeticException: / by zero
    at MinNumber.main(MinNumber.java:8) 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.