Я пытаюсь приостановить и возобновить поток в Java из другого класса. Код java, который я написал для него, похоже, не работает.
Программа написана внутри малины pi. Он контролирует состояние булавки в пи. В основном я хочу приостановить и возобновить мониторинг состояния контактов в любой момент времени одним нажатием кнопки. Я не профессиональный Java-программист, поэтому я мог бы сделать что-то не так. Пожалуйста, присмотритесь к прилагаемому коду и скажите мне, что я делаю неправильно.Как приостановить и возобновить поток в Java
// ЭТО КЛАСС, ЧТО Я хочу управлять из другого класса
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import java.io.*;
import java.net.*;
public class Sensor {
static boolean threadSuspended; /////
public static void main(String[] args) throws InterruptedException {
final int PortNumber = 400;
// create gpio controller
final GpioController gpio = GpioFactory.getInstance();
// provision gpio pin #07 as an input pin with its internal pull down resistor enabled
final GpioPinDigitalInput myDoor = gpio.provisionDigitalInputPin(RaspiPin.GPIO_07, PinPullResistance.PULL_DOWN);
while(true){
boolean MySensor1 = myDoor.isHigh();
Thread.sleep(20000);
if (MySensor1 == true) {
System.out.println("The Door is Closed");
}
else {
System.out.println("The Door is Open");
String[] arg = {};
DoorOpen.main(arg);
}
Thread t = new Thread(){
public void run(){
System.out.println("Server is running and listening");
try {
Thread.sleep(300);
synchronized(this) {
while(threadSuspended)
wait();
}
ServerSocket SensorSock = new ServerSocket(PortNumber);
while(true){
Socket clientSock = SensorSock.accept();
InputStreamReader IR = new InputStreamReader(clientSock.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String Message = BR.readLine();
System.out.println(Message);
if(Message != null){
boolean MySensor = myDoor.isHigh();
if (MySensor == true) {
PrintStream PS = new PrintStream(clientSock.getOutputStream());
PS.println("The Door is Closed");
}
else {
PrintStream PS = new PrintStream(clientSock.getOutputStream());
PS.println("The Door is Open");
}
}
clientSock.close();
}
}
catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ PortNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
};
t.start();
}
}
// ЗДЕСЬ метод, который должен приостанавливать и возобновлять Нить
public synchronized void ButtonPressed() {
threadSuspended = !threadSuspended;
if (!threadSuspended)
notify();
}
}
// ЭТА КЛАСС УПРАВЛЕНИЕ Другого класса с помощью вызова метода ButtonPressed()
public class ActSensor {
public static void main(String args[]) {
Sensor s = new Sensor();
try {
Thread.sleep(1000);
s.ButtonPressed();
}
catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
}
}
}
Почему этот помеченный Android? Разве это не Pi4J для RasPi? – DeadChex
вы никогда не покидаете первый цикл while – Zielu
Используйте CountDownLatch http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html –