2016-07-30 11 views
0

Мой проект выглядит так: у меня есть велосипедный спидометр, прикрепленный к простому велосипеду и подключенный к 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

ответ

0

Есть несколько проблем здесь:

  • код в client классе (кстати, имена классов должны начинаться с символа верхнего регистра) никогда не выполняются. Вы поместили весь код этого класса в основной метод, который запускается только при запуске приложения, выбрав этот класс. По сути, здесь у вас есть два отдельных приложения. Даже если вы будете запускать их одновременно, это не поможет вам, так как у вас не будет прямого доступа к экземплярам классов в другом.
  • i не устанавливается только один раз и никогда не обновляются внутри цикла
  • вы могли бы превратить это основной метод client класса в обычный метод, но даже тогда вы не можете иметь два while(true) петли работать одновременно, если они находятся в одной и той же теме.

Если обработка потока для вас на этом этапе немного важна, вы можете попробовать просто комбинировать оба класса в одном. Один цикл будет проверять входящие данные и устанавливать скорость игроков по мере их поступления. Это может работать или не работать, в зависимости от того, как сам плеер реализован, но вы можете попробовать.

+0

Huh .. Я не ожидал так много проблем :) Хорошо, я решил, что решил. Я также реализую новые программы, используя потоки. Но теперь я не знаю, как успешно управлять временем выполнения потоков. Проблема в том, что когда я запускаю свою программу, первый поток начинает работать, затем останавливается, начинает запускать второй поток, и это работает бесконечно.Поэтому я должен приостановить второй поток для X ms, чтобы сделать первый запуск, а затем приостановить первый для X ms для запуска второго и т. Д. ... и я не знаю, как это сделать. – yann9