2016-05-11 6 views
-2
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秒以内に文字列を入力するように求めるプロンプトを表示するアプリケーションを作成しようとしています。これを達成するために、私は2つのクラス、すなわちThreadClassとMyThreadを持っています。 Threadクラスでは、ユーザーからの入力を受け取り、タイマーを10秒に設定するメソッドを定義しました。 MyThreadクラスでは、ポストスレッド補完のためのメソッドを定義しています。つまり、時間の経過後にプログラムが何をするかを定義しています。 MyThreadクラスに機能を追加して、ユーザー入力と提供された文字列を比較したいと思います。問題は、MyThreadクラスからThreadClassで定義されたString変数scrにアクセスしようとすると、エラーが発生するということです。 MyThreadクラスからThreadClassを拡張しようとしても、エラーが出ます。また、scrをstaticとして宣言すると、同じ結果が得られます。 MyThreadにscr変数を使用する方法はありますか?他のクラスから変数を呼び出す

+0

"私にエラーが出る"と言っても、あなたの問題に関する多くの情報は得られません。エラーメッセージのテキストを含めると、質の高い回答が得られる可能性が高くなります。 –

答えて

0

私は同じ問題前、私は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"); 
      } 
     } 

    } 
0

のためのソリューションです持っていましたが、私が推測することができます。

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

あなたThreadClassクラスでscrという名前のインスタンス変数はありません。 ローカル変数は、main()ルーチンにその名前でのみ存在します。

ローカル変数、インスタンス変数(別名「フィールド」)とクラス変数(別名「静的変数」)の違いをまだ理解していない場合は、少し早く試してみることができますスレッドを理解する。

+0

実際に、別のクラスにローカル変数を宣言する方法を知りたかったのです。 –

+0

@PratikPaul「別のクラスのローカル変数を宣言する」という意味を理解できません。まず第一に、クラス内で宣言されているローカル変数については、通常考えていません。それは技術的には真実ではありますが、それについて考えるのは有用な方法ではありません。問題は、_methods_でローカル変数が宣言されていることです。第二に、 "_another_クラスの変数を宣言していますか?"変数は、宣言されているクラスで宣言されています。私の推測によれば、おそらく "宣言"という言葉はあなたとは異なるものを意味します。 –

関連する問題