gpt4 book ai didi

java - 在移动设备中持续监听 Co​​mmConnection

转载 作者:行者123 更新时间:2023-12-01 05:30:29 25 4
gpt4 key购买 nike

我有以下代码,但我不知道如何不断监听com端口。因此,只要有数据,我就可以读取它。那么我应该创建一个线程并永久打开它的输入流吗?在打开输出流之前我应该​​如何关闭它?

基本上,只要数据可用,我的移动端应用程序就应该知道并处理 com4 端口数据,并且还能够发送数据。一旦应用程序开始在移动设备上运行,所有这些任务都应该自动化。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.io.*;

public class MainMidlet extends MIDlet implements CommandListener {
// displaying this midlet
private Display display;
private Form form;
private StringItem stringItem;
private Command exitCommand;
// comm vars
private volatile CommConnection commConnection = null;
private volatile InputStream inputStream = null;
private volatile OutputStream outputStream = null;
// thread on which we run the listening
private Thread thread;
private volatile boolean stopRequested = false;

public MainMidlet() {

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

public void commandAction(Command command, Displayable displayable) {
if (displayable == form) {
if (command == exitCommand) {
exitMIDlet();
}
}
}

public void startApp() {
stringItem = new StringItem("Hello", "Serial app is running!");
form = new Form(null, new Item[] { stringItem });
exitCommand = new Command("Exit", Command.EXIT, 1);
form.addCommand(exitCommand);
form.setCommandListener(this);
display = Display.getDisplay(this);
display.setCurrent(form);

String ports = System.getProperty("microedition.commports");
String port = "";
int comma = ports.indexOf(',');
if (comma > 0) {
// Parse the first port from the available ports list.
port = ports.substring(0, comma);
print("multiple ports found. selecting the first one. " + ports);
} else {
// Only one serial port available.
port = ports;
}
try {
commConnection = (CommConnection) Connector.open("comm:" + port
+ ";blocking=off;autocts=off;autorts=off");
commConnection.setBaudRate(commConnection.getBaudRate());
} catch (IOException e) {
print("IOException in startApp: " + e.getMessage());
}
}

public void exitMIDlet() {
try {
commConnection.close();
} catch (IOException e) {
print("IOException in exitMIDlet: " + e.getMessage());
}
if (thread.isAlive()) {
thread.interrupt();
try {
thread.join();
} catch (InterruptedException e) {
print("InterruptedException in exitMIDlet: " + e.getMessage());
}
}
display.setCurrent(null);
notifyDestroyed();
}

// write data to serial port
public void SendData(byte[] data) {
try {
outputStream = commConnection.openOutputStream();
outputStream.write(data);
outputStream.close();
} catch (IOException e) {
print("IOException: " + e.getMessage());
}
}

// read data from serial port.
private void GetData() {
try {
inputStream = commConnection.openInputStream();
// maximum size of reading is 500kb.
byte[] buffer = new byte[500000];
StringBuffer message = new StringBuffer();
for (int i = 0; i < buffer.length;) {
try {
//print("ListenToPort is inside of for now.");
Thread.sleep(10);
} catch (InterruptedException ex) {
print("intrupted in GetData. " + ex.getMessage());
}
int available = inputStream.available();
if (available == 0) {
continue;
}
String outText = "";
int count = inputStream.read(buffer, i, available);
if (count > 0) {
outText = new String(buffer, i, count);
i = i + count;
message.append(outText);
print(
"GetData: message.append(outText) successful.");
if (outText.endsWith("\n")) {
String messageString = message.toString();
print("Message came in: " + messageString);
message.delete(0, message.length());
}
}
print("GetData: inputStream.read().count is zero.");
String total = new String(buffer, 0, i);
}
inputStream.close();
} catch (IOException e) {
print("IOException in GetData: " + e.getMessage());
}
print("GetData SUCCEEDED.");
}

private void print(String str) {
int val = form.append(str + "\r\n");
if (val == -1)
System.out.print(str + "\r\n");
}
}

最佳答案

您可以打开一个单独的Thread并从那里开始监听。结构见下图:

Thread commListener = new Thread(new Runnable() {
while(true) { // We use a while loop to continually listen to the comm port

// Your code here (the listening tasks)

}
});
commListener.start(); // Start the Thread

关于java - 在移动设备中持续监听 Co​​mmConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com