2013-11-09 2 views
2

Итак, у меня есть два файла, первый - класс swing, а второй - класс потока. Когда я запускаю поток, потому что по какой-то причине он не запускается, я попытался разместить некоторые инструкции для печати, чтобы увидеть, будет ли моя программа когда-либо появляться, но ни одна из них не запускалась.Программа не выполняет нить

Моего класс резьбы

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

class CheckFiles implements Runnable { 

    public void run() { 

     while (!UserInterface.stop) { 
      try { 

       String line; 

       BufferedReader b = new BufferedReader(new FileReader(UserInterface.location)); 

       while((line = b.readLine()) != null) { 

        System.out.println(line); 

       } 

      } catch (IOException e) { System.out.println(e); } 
     } 
    } 
} 

В моем пользовательском интерфейсе класса я начинаю метод, выполнив следующие действия

System.out.println(stop); //prints true 
loadFile.setEnabled(false); //not important 
status.setText("Checking Files"); //not important 
stop = false; 
System.out.println(stop); //prints false 
new CheckFiles(); //start thread 

Есть ли что-то, что мешает моей нить работает или я это делаю неправильно?

+1

Небольшой намек: убедитесь, что 'UserInterface.stop' является volalaile, потому что вы используете переменную в двух разных потоках без синхронизации. – Vertex

ответ

2

Вы создаете класс, который можно использовать для запуска потока, но вы его не запускаете.

несколько решений возможны:

Решение 1:

Изменение типа продлить Thread

class CheckFiles extends Thread { 
    ... 
} 

и измените последнюю строку

(new CheckFiles()).start(); 

Решение 2:

Держите CheckFilesRunnable и измените последнюю строку на

(new Thread(new CheckFiles())).start(); 
+0

В чем разница между его запуском и расширением потока? – user2612619

+0

@ user2612619 «Runnable» - это интерфейс, вы можете использовать его, если ваш класс потока должен расширять другой класс. Если нет требования о расширении другого класса, вы можете расширить 'Thread', чтобы упростить остальную часть вашего кода. – dasblinkenlight

1

На данный момент вы только сделали свой класс Runnable. Вам нужно создать и запустить свой поток. Пожалуйста, взгляните на http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html.

Thread t = new Thread(new CheckFiles()); 
t.start(); 

Основные различие между простирающейся темой и реализации вашей цели Runnable в том, что при расширении темы вы общаетесь Нить с объектом, который вы создаете. Делая свой объект работоспособной, вы можете связать тему с большим количеством работоспособных объектов ..

1

Вы should'nt сделать класс простираться нить, а сделать что-то вроде

Thread t = new Thread(new CheckFiles()); 
t.start(); 
1

Вы просто создали экземпляр класса, который должен быть Thread! Вы должны фактически объявить Thread и запустить его. например new Thread(new CheckFiles()).start();, чтобы создать экземпляр потока, объекта и запустить его.

Смежные вопросы