私はJAVAを開始し、RxTxを使用してシリアル通信を行っています。
参照先: http: //rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communication http://henrypoon.wordpress.com/2011/01/01/serial-communication-in-java-with-example-program/
2番目のリンクでは、「これ」の使用法を解読できません:誰でも説明できますか:
Communicator.java
public class Communicator implements SerialPortEventListener
{
GUI window = null;
..
..
public Communicator(GUI window)
{
this.window = window;
}
...
..
}
GUI.javaで
public class GUI extends javax.swing.JFrame {
Communicator communicator = null;
Communicator communicator = null;
//KeybindingController object
KeybindingController keybindingController = null;
/** Creates new form GUI */
public GUI() {
initComponents();
createObjects();
communicator.searchForPorts();
keybindingController.toggleControls();
keybindingController.bindKeys();
}
private void createObjects()
{
**communicator = new Communicator(this);**
keybindingController = new KeybindingController(this);
}
...
..}
上記のコードで強調表示されているように、これを使用してCommunicatorクラスのオブジェクトを作成する方法がわかりません(communicator = new Communicator(this);)
もう1つの混乱は次のとおりです 。Communicator.java
public class Communicator implements SerialPortEventListener
{
...
...
public void connect()
{
String selectedPort = (String)window.cboxPorts.getSelectedItem();
selectedPortIdentifier = (CommPortIdentifier)portMap.get(selectedPort);
CommPort commPort = null;
try
{
//the method below returns an object of type CommPort
commPort = selectedPortIdentifier.open("TigerControlPanel", TIMEOUT);
//the CommPort object can be casted to a SerialPort object
serialPort = (SerialPort)commPort;
....
...}
public void initListener()
{
try
{
**serialPort.addEventListener(this);**
serialPort.notifyOnDataAvailable(true);
}
catch (TooManyListenersException e)
{
logText = "Too many listeners. (" + e.toString() + ")";
window.txtLog.setForeground(Color.red);
window.txtLog.append(logText + "\n");
}
}
....
}
ここでも、「this」の使用と混同しています(serialPort.addEventListener(this);)
http://rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communicationのコードと比較しました
そこにそれは示唆している
...
InputStream in = serialPort.getInputStream();
**serialPort.addEventListener(new SerialReader(in));**
...
public static class SerialReader implements SerialPortEventListener
{
private InputStream in;
private byte[] buffer = new byte[1024];
public SerialReader ( InputStream in )
{
this.in = in;
}
public void serialEvent(**SerialPortEvent arg0**) {
int data;
try
{
int len = 0;
while ( ( data = in.read()) > -1 )
{
if ( data == '\n' ) {
break;
}
buffer[len++] = (byte) data;
}
System.out.print(new String(buffer,0,len));
}
catch ( IOException e )
{
e.printStackTrace();
System.exit(-1);
}
}
}
addEventListenerの説明 http://docs.oracle.com/cd/E17802_01/products/products/javacomm/reference/api/
addEventListener
public abstract void addEventListener(SerialPortEventListener lsnr)throwsjava.util.TooManyListenersExceptionシリアルイベントをリッスンするSerialPortEventListenerオブジェクトを登録します。特定のイベントへの関心は、notifyOnXXX呼び出しを使用して表すことができます。SerialPortEventListenerのserialEventメソッドは、イベントを説明するSerialEventオブジェクトを使用して呼び出されます。
上記のコードでaddEventListenerへのパラメーターとして「SerialPortEventListenerlsnr」を渡す方法として、これの使用法を知りたいです。
ありがとう