জিওলোকেশন টাইপের একটি সংলগ্ন উদাহরণ সহ বরাদ্দকে অবশ্যই যোগ্যতা অর্জন করতে হবে


109

আমি এই ত্রুটিটি পাচ্ছি-

জিওলোকেশন টাইপের কোনও সংলগ্ন উদাহরণ অ্যাক্সেসযোগ্য নয়। জিওলোকেশন (উদাহরণস্বরূপ এ () যেখানে জিওলোকেশনের উদাহরণ হিসাবে রয়েছে) এর সংলগ্ন উদাহরণ সহ বরাদ্দকে যোগ্যতা অর্জন করতে হবে। এই ত্রুটিটি নতুন থ্রেডটাস্ক (i) এ আসছে । জানি না কেন এমন হচ্ছে। কোন পরামর্শ প্রশংসা করা হবে।

public class GeoLocation {
    public static void main(String[] args) throws InterruptedException {
        int size = 10;

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }

        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }

    class ThreadTask implements Runnable {
        private int id;

        public ThreadTask(int id) {
            this.id = id;
        }

        public void run() {
            System.out.println("I am task " + id);
        }
    }

}

2
: এই উত্তর দেখার stackoverflow.com/questions/633585/...
hmjd

উত্তর:


150

হাই, আমি এর সমাধান খুঁজে পেয়েছি ;-)

এই ত্রুটিটি ঘটেছে কারণ আপনি service.submit(new ThreadTask(i)); প্রধান শ্রেণীর উদাহরণ তৈরি না করেই কোনও অভ্যন্তর শ্রেণির উদাহরণ তৈরি করার চেষ্টা করছেন ..

এই সমস্যাটি সমাধান করার জন্য দয়া করে প্রথমে প্রধান শ্রেণীর উদাহরণ তৈরি করুন:

GeoLocation outer = new GeoLocation();

তারপরে আপনি কল করতে চেয়েছিলেন এমন ক্লাসের উদাহরণ তৈরি করুন:

service.submit(outer.new ThreadTask(i));

আমি আশা করি এটি আপনার সমস্যার সমাধান করবে ;-)


101

অন্য একটি বিকল্প এবং আমি যেটিকে পছন্দ করি তা হ'ল অভ্যন্তরীণ শ্রেণিকে স্থির করতে সেট করা।

public static class ThreadTask implements Runnable { ... }

আমার জন্যও নিখুঁতভাবে কাজ করেছেন। আমি মনে করি এটি পছন্দসই সমাধান হওয়া উচিত কারণ 1) এটি সহজতম এবং 2) মূল পদ্ধতিটি অচল।
অ্যালান

15

ইনলাইন ক্লাস করুন static

public class OuterClass {

    static class InnerClass {
    }

    public InnerClass instance = new OuterClass.InnerClass();
}

তারপরে আপনি নিম্নোক্তভাবে অভ্যন্তর শ্রেণিকে ইনস্ট্যান্ট করতে পারেন:

new OuterClass.InnerClass();

3

এই কাঠামো করুন:

ফাইল GeoLocation.java

public class GeoLocation {

    public static void main(String[] args) throws InterruptedException {

        int size = 10;

        // create thread pool with given size
        ExecutorService service = Executors.newFixedThreadPool(size); 

        // queue some tasks
        for(int i = 0; i < 3 * size; i++) {
            service.submit(new ThreadTask(i));
        }

        // wait for termination        
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); 
    }

}

ফাইল ThreadTask.java

public class ThreadTask implements Runnable {
    private int id;

    public ThreadTask(int id) {
        this.id = id;
    }

    public void run() {
        System.out.println("I am task " + id);
    }
}

4
এসও তে স্বাগতম, এখানে, কেন আপনার সমাধানটি কীভাবে ব্যবহার করা যায় এবং কীভাবে তা ব্যাখ্যা করার জন্য এটি একটি ভাল অনুশীলন। এটি আপনার উত্তরটিকে আরও মূল্যবান করে তুলবে এবং আরও পাঠককে আপনি কীভাবে এটি করেন সে সম্পর্কে আরও ভাল ধারণা পেতে সহায়তা করবে। আমি আপনাকে পরামর্শ দিচ্ছি যে আমাদের আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্নাগুলি : স্ট্যাকওভারফ্লো / ফাক এ দেখুন
ফোর্স ম্যাজিক

2

আপনার অভ্যন্তরীণ ক্লাসগুলির উদাহরণ তৈরি করতে আপনাকে পিতামাতার শ্রেণীর উদাহরণ তৈরি করতে হবে। এখানে একটি উদাহরণ:

package RandomTests;

public class FinalConstructorTest {


    public static void main (String [] arg){
        FinalConstructorTest fct= new FinalConstructorTest();
        InnerClass1 f1= fct.new InnerClass1(99);
        InnerClass2 f2= fct.new InnerClass2();
    }

    class InnerClass1{
        private final int num2;

        protected InnerClass1(int num){
            num2= num;
            System.out.println("num2= "+ num2);
        }
    }
    class InnerClass2{
        //private static final int x; //Doesn't work
        private final int y; 

        {
            y= 5;
            System.out.println("y= "+ y);
        }
    }
}

1

যদি আপনি স্থিতিশীল পদ্ধতিগুলি থেকে বা একইভাবে অ স্থিতিশীল সদস্যদের অ্যাক্সেস করে থাকেন তবে এটিও ঘটতে পারে। নীচে দুটি ভিন্ন দিক রয়েছে যা একটি ত্রুটির কারণ এবং অন্যান্য সমাধান কোডের টুকরা। এটি কেবল শ্রেণিকে "স্থিতিশীল" হিসাবে তৈরি করার বিষয়

package Stack;

import java.util.Stack;
import java.util.*;

public class StackArrList {

    public static void main(String[] args) {


        Scanner in = new Scanner(System.in);

        Stack S = new Stack();
        System.out.println("Enter some integers and keep 0 at last:\n");
        int n = in.nextInt();

        while (n != 0) {
            S.push(n);
            n = in.nextInt();
        }
        System.out.println("Numbers in reverse order:\n");

        while (!S.empty()) {

            System.out.printf("%d", S.pop());
            System.out.println("\n");

        }

    }

    public class Stack {
        final static int MaxStack = 100;
        final static int Value = -999999;
        int top = -1;
        int[] ST = new int[MaxStack];

        public boolean empty() {
            return top == -1;
        }

        public int pop() {

            if (this.empty()) {
                return Value;
            }
            int hold = ST[top];
            top--;
            return hold;
        }

        public void push(int n) {
            if (top == MaxStack - 1) {
                System.out.println("\n Stack Overflow\n");
                System.exit(1);
            }
            top++;
            ST[top] = n;

        }

    }

}

এটি ত্রুটিটিকে ছুঁড়ে মারে স্ট্যাকআরলিস্ট টাইপের কোনও সংযুক্তকরণ অ্যাক্সেসযোগ্য নয়। স্ট্যাকআরলিস্ট (উদাহরণস্বরূপ এ () যেখানে x স্ট্যাকআরলিস্টের একটি উদাহরণ) এর সংযুক্তিযুক্ত উদাহরণ সহ বরাদ্দকে যোগ্যতা অর্জন করতে হবে। এবং স্ট্যাক ক্লাসের উদাহরণ তৈরি করতে দেয় না

আপনি যখন ক্লাস স্ট্যাক থেকে স্ট্যাটিক ক্লাস করবেন তখন স্ট্যাক কাজ করবে এবং কোনও ত্রুটি থাকবে না।

package Stack;

import java.util.Stack;
import java.util.*;

public class StackArrList {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        Stack S = new Stack();
        System.out.println("Enter some integers and keep 0 at last:\n");
        int n = in.nextInt();

        while (n != 0) {
            S.push(n);
            n = in.nextInt();
        }
        System.out.println("Numbers in reverse order:\n");

        while (!S.empty()) {

            System.out.printf("%d", S.pop());
            System.out.println("\n");

        }

    }

    static class Stack {
        final static int MaxStack = 100;
        final static int Value = -999999;
        int top = -1;
        int[] ST = new int[MaxStack];

        public boolean empty() {
            return top == -1;
        }

        public int pop() {

            if (this.empty()) {
                return Value;
            }
            int hold = ST[top];
            top--;
            return hold;
        }

        public void push(int n) {
            if (top == MaxStack - 1) {
                System.out.println("\n Stack Overflow\n");
                System.exit(1);
            }
            top++;
            ST[top] = n;

        }

    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.