【问题标题】:Calling variables from other class从其他类调用变量
【发布时间】:2016-05-11 13:29:09
【问题描述】:
import java.util.Scanner;


public class ThreadClass{

    public static void main(String[] args) 
    {
        System.out.println("Enter the characters, Press Enter to begin");
        System.out.println("The quick brown fox jumps over the lazy dog");
        Scanner sc=new Scanner(System.in);
        String scr= sc.nextLine();

        MyThread tr=new MyThread();
        try {
            tr.sleep(11000);
            System.out.println("Time Over");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}


}



public class MyThread extends Thread{
    public void run()
    {
        System.out.println("Time over");
        ThreadClass tc=new ThreadClass();
        String str=tc.scr;
        if(str.equals("The quick brown fox jumps over the lazy dog"))
        {
        System.out.println("Successfully completed");
    }
        else
        {
            System.out.println("The typed Words do not match");
        }
    }

}

我正在尝试制作一个提示用户在 11 秒内输入字符串的应用程序。为此,我有两个类,即 ThreadClass 和 MyThread。在 Thread 类中,我定义了从用户那里获取输入并将计时器设置为 10 秒的方法。在 MyThread 类中,我定义了线程后完成的方法,即时间结束后程序将做什么。我想在 MyThread 类中添加一个功能,以便它将用户输入与提供的字符串进行比较。问题是,当我尝试访问 String 变量 scr 时,它通过创建一个 MyThread 类在 ThreadClass 中定义,它给了我一个错误。即使我尝试从 MyThread 类扩展 ThreadClass ,它也会给我一个错误。将 scr 声明为静态也会给我相同的结果。有什么方法可以在 MyThread 中使用 scr 变量吗?

【问题讨论】:

  • 只是说“它给了我一个错误”并没有为我们提供有关您的问题的很多信息。如果您包含错误消息的文本,您将更有可能获得问题的高质量答案。

标签: java multithreading variables


【解决方案1】:

我之前遇到过同样的问题,我使用了 java 的并发 API,它可以正常工作 这是您的问题的解决方案

public class ThreadClass {

        public static void main(String[] args) {

            final ExecutorService executor = Executors.newSingleThreadExecutor();

            Future<String> future = executor.submit(new Callable<String>() {

                @Override
                public String call() throws Exception {
                    System.out
                            .println("Enter the characters, Press Enter to begin");
                    System.out
                            .println("The quick brown fox jumps over the lazy dog");
                    Scanner sc = new Scanner(System.in);
                    return sc.nextLine();
                }
            });
            try {
                String str = future.get(11, TimeUnit.SECONDS);
                System.out.println("Your string " + str);
            } catch (TimeoutException | InterruptedException | ExecutionException e) {
                future.cancel(true);
                System.out.println("Time Over");
            }
        }

    }

【讨论】:

    【解决方案2】:

    你没有告诉我们错误信息是什么,但我可以猜到。

    ThreadClass tc=new ThreadClass();
    String str=tc.scr;
    

    ThreadClass 类中没有名为 scr 的实例变量。在您的main() 例程中只有一个具有该名称的局部变量

    如果您还不了解局部变量、实例变量(又名“字段”)和类变量(又名“静态变量”)之间的区别,那么您可能还为时过早理解线程。

    【讨论】:

    • 其实我想知道如何在另一个类中声明一个局部变量。
    • @PratikPaul 我不明白你所说的“在另一个类中声明一个局部变量”是什么意思。首先,我通常不会想到在类中声明局部变量。尽管这在技术上是正确的,但这并不是思考它们的有用方式。重要的是局部变量在方法中声明。其次,“在 another 类中声明一个变量?”变量在声明它们的类中声明。我最好的猜测是,“声明”这个词可能对你有不同的含义。
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多