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变量?
答案 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;)之间的区别,那么它可能是有点早,你想要了解线程。