从其他类

时间:2016-05-11 13:29:09

标签: java multithreading variables

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变量?

2 个答案:

答案 0 :(得分:0)

我刚才有同样的问题,我使用java的Concurrency 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");
            }
        }

    }

答案 1 :(得分:0)

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

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

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

如果您还不了解局部变量,实例变量(又名,&#34;字段&#34;)和类变量(又名,&#34;静态变量&#34;)之间的区别,那么它可能是有点早,你想要了解线程。