2016-08-11 72 views
0

テンプレートの1つから基本的なAndroidスタジオアプリを作成し、onCreateのあらかじめ作成されたハンドラからスレッド(Runnable)を呼び出そうとしています。私がやったのは、Runnableを拡張したクラスを追加してから、そのクラスをハンドラで使用することだけでした。私はコンパイルエラーを取得しています理由を把握することはできません:Androidスタジオのエラーを解決する方法:シンボルメソッドが見つからない

がシンボルメソッドは

を開始見つけることができませんそれが唯一のエラーだとちょうどライン上の

new Thread(example.start()); 

コードを次のとおりです。

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 


    static class GetExample implements Runnable 
    { 
     public void run() 
     {  
      Log.i("GetExample class", "Inside GetExample::run()"); 
      return; 
     } 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) 
      { 

       Log.i("Inside onCreate()", "TestBed -- onClick() invoked"); 

       try 
       { 
        GetExample example = new GetExample(); 
        new Thread(example.start()); 
       } 
       catch (IOException ex) 
       { 
        Log.i("Inside onCreate()", "TestBed -- IOException occurred"); 
       } 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 
. . . 
+0

'スレッド'の 'start()'; 'Runnable'の' run() 'です。 – Makoto

+0

@Makoto - Oracleのこれらのドキュメントは間違っていますか?彼らはstart()を使用します。 https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html – Alyoshak

+1

'start()'を起動している場所を*見てみましょう。 – Makoto

答えて

3
new Thread(new GetExample()).start(); 
1

私は常にrunnablesとsのためにrunを使用していますスレッドのためのタート。 上記のドキュメントにあるものは、新しいスレッド(新しいRunnable())。start()です。メソッドの開始はスレッドに適用され、実行可能オブジェクトには適用されません。

run()を使用するか、スレッドに新しいスレッドを作成して、実行可能オブジェクトをその内部に置くことができます。コメントに入れたドキュメントの例のように。その後、startをスレッドに呼び出し、runnableには呼び出しません。

関連する問題