私のプロジェクトは次のようになります:自転車の速度計をシンプルな自転車に取り付け、ラップトップにイーサネットケーブルで接続されたRaspberry Piに接続しました。他のプログラムで使用されているクライアント/サーバープログラムからJavaの値を受け取った
私がしたいことは:ラズベリーは自転車の車輪の速度を測定し、この値をイーサネットケーブルでラップトップに送信します。ラップトップは現在、受信した値を使用し、VLCで再生されるビデオのスピードアップを行います。
私はホイールのスピードを測定するためにRPi上でJavaプログラムを動作させています。RPIからラップトップに値を送るための働くクライアント(ラップトップ上)-server(RPi上)Javaプログラムと、ラップトップでVLCで再生されるビデオの速度を制御します。
しかし私の問題は、VLCで再生しているビデオの速度を制御する私のプログラムで、クライアント - サーバプログラムを介してRPiから受信した値を使用する方法がわからないことです。
ダウンは、クライアントのためのコードで、ビデオの速度を制御します。
クライアントコード:
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を使用することです。 "[000000001ade9eb0]コア入力エラー:入力制御用FIFOオーバーフロー、タイプ= 2中傷" あなたの助けのための
感謝を
私が行ってきたように、Eclipseは私にエラーを返します。
月
私はそんなに多くの問題を期待していなかった:) OK、私はそれらを解決したと思う。スレッドを使って新しいプログラムを実装します。しかし、今はスレッドの実行時間をうまく管理する方法がわかりません。問題は、プログラムを起動すると、最初のスレッドが実行を開始し、停止して2番目のスレッドが実行され、これが無限に実行されていることです。だから私は最初の実行を行うためにX msのために2番目のスレッドを一時停止しなければならないし、2番目のものを実行するためにX msのために最初のものを一時停止しなければならない...そして私はこれを行う方法を知らない。 – yann9