回答編集履歴

1

退会済みユーザー

退会済みユーザー

2018/06/22 13:29  投稿

Thread を継承する場合は run() メソッドをオーバーライドする必要があります。
```java
class Subthread extends Thread {
   private MyPanel2 toucher;
   Subthread(MyPanel2 toucher) {
       this.toucher = toucher;
   }
   @Override
   public void run() {
       try {
           sleep(1000);
       } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       toucher.setBackground(Color.red);
       SwingUtilities.invokeLater(() ->
           toucher.setBackground(Color.red));
   }
}
```
main メソッドの中でスレッドを開始するのではなく、ScreenToucher のコンストラクターで開始するようにすればうまくいきます。
```java
ScreenToucher(String title) {
   setTitle(title);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setBounds(100, 100, width, height);
   p1 = new MyPanel1();
   MyPanel2 p2 = new MyPanel2(this);
   Container contentPane = getContentPane();
   contentPane.add(p1, BorderLayout.NORTH);
   contentPane.add(p2, BorderLayout.CENTER);
   Subthread thread = new Subthread(p2);    // ここに追加
   thread.start();                          // ここに追加
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る