Мой проект выглядит так: у меня есть велосипедный спидометр, прикрепленный к простому велосипеду и подключенный к Raspberry Pi, который подключен через кабель Ethernet к ноутбуку.Значение java, полученное из клиент-серверной программы, используемой в другой программе
Что я хочу сделать: Малина измеряет скорость велосипедного колеса и передает это значение по кабелю ethernet на ноутбук. Ноутбук теперь использует полученное значение и ускоряет видео, которое воспроизводится в VLC.
У меня есть рабочая программа java на RPi для измерения скорости колеса, у меня есть рабочая клиентская (на ноутбуке) -сервер (по RPi) java-программе для отправки значений с RPi на ноутбук, и у меня есть работающая Java-программа для управления скоростью воспроизведения видео в VLC на ноутбуке.
Но моя проблема в том, что я не знаю, как использовать значения, полученные из RPi по программе клиент-сервер, в моей программе, которые контролируют скорость видео, играя в VLC.
Вниз мои коды для клиентов и для управления скоростью видео.
код клиента: Код
package player;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class client {
public static int inputPlayer = 0;
public static void main(String[] args) throws UnknownHostException, IOException {
String accept;
int input;
DataInputStream inC = null;
Scanner sc1 = null;
Socket s = null;
try {
s = new Socket ("169.254.218.194", 1342);
Scanner sc = new Scanner (System.in);
System.out.println("Accept connection!");
accept = sc.next();
PrintStream p = new PrintStream (s.getOutputStream());
p.println(accept);
//inC = new DataInputStream(s.getInputStream());
}
catch (Exception e) {
e.printStackTrace();
}
while (true) {
sc1 = new Scanner (s.getInputStream());
input = sc1.nextInt();
if (input > 0) {
inputPlayer = input;
}
System.out.println("I" + input);
//System.out.println("IP" + inputPlayer);
}
}
public int getInputPlayer() {
return this.inputPlayer;
}
}
игрока:
package player;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
public class Player {
private final JFrame frame;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
public static void main(final String[] args) {
new NativeDiscovery().discover();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Player(args);
}
});
}
public Player(String[] args) {
frame = new JFrame("My First Media Player");
frame.setBounds(100, 100, 600, 400);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
contentPane.add(mediaPlayerComponent, BorderLayout.CENTER);
Scanner in = new Scanner (System.in);
frame.setContentPane(contentPane);
frame.setVisible(true);
mediaPlayerComponent.getMediaPlayer().playMedia("file:URL");
mediaPlayerComponent.getMediaPlayer().skip(1000);
client c = new client();
float i = c.getInputPlayer();
while (true) {
//float i = in.nextFloat();
//System.out.println(i);
mediaPlayerComponent.getMediaPlayer().setRate(i);
}
}
}
Все, что я хочу сделать, это использовать переменную inputPlayer из класса клиента в качестве переменной я в классе игрока.
Как я уже сделал, Eclipse вернуть мне ошибку: "[000000001ade9eb0] ошибка при вводе основной: входной контроль переполнения ФИФО, громя тип = 2"
Спасибо за вашу помощь.
Jan
Huh .. Я не ожидал так много проблем :) Хорошо, я решил, что решил. Я также реализую новые программы, используя потоки. Но теперь я не знаю, как успешно управлять временем выполнения потоков. Проблема в том, что когда я запускаю свою программу, первый поток начинает работать, затем останавливается, начинает запускать второй поток, и это работает бесконечно.Поэтому я должен приостановить второй поток для X ms, чтобы сделать первый запуск, а затем приостановить первый для X ms для запуска второго и т. Д. ... и я не знаю, как это сделать. – yann9