- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码,但我不知道如何不断监听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 - 在移动设备中持续监听 CommConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069801/
我在 Aptana 框架上的 Jruby 中编码时遇到问题; 当我运行 Rails 服务器时,它抛出“编码流中的无效编码”我不知道如何解决? 它在“和”上抛出错误,这里我给出了一段代码,请帮助解决这个
我打算在我的 koa 应用程序中使用 co-mysql 或 mysql-co。我应该使用哪个包? 为什么co-mysql github主页说: yes, you should not use co-m
我是 Spark 的新手,我有两个问题: 我有一大堆点,我从中制作了一个 RDD(称为 partitionedData),并根据自定义分区器对其进行分区,以便每个分区最多有一个阈值点数。因为我需要在每
虽然我有点弄清楚 Koa 流程机制是如何工作的(我认为),但我似乎无法掌握 co 和 co.wrap 之间的所有差异。这是给出意外行为的代码: "use strict"; var co = requi
你好,我有我使用的代码 ORDER BY domain_name ASC 并得到像这样的结果 name-somethinga.co.uk name-somethingb.co.uk name.co.u
所以我尝试使用 co 来包装返回 Promise 的 MongoDB 方法例如 http://mongodb.github.io/node-mongodb-native/2.0/reference/e
我正在为https://test.company.co.uk(示例域名)的域构建Android应用 通常,在build.gradle文件中,我们将applicationId设置为向后域(因此test.
fun main() = runBlocking { var i = 1 var job = launch (Dispatchers.Default){ println
我正在努力使用正则表达式来提取句号之间的部分字符串,但如果它前面有特定字母(例如示例中的 CO),则忽略句号。我们可以假设相关 block 总是以“LTD”结尾。 案例一: string = "FRE
好吧,我正在尝试重用一部分 C# 代码。它是一个带有 UDP 服务器的抽象类,可以在这里看到: http://clutch-inc.com/blog/?p=4 我创建了一个这样的派生类: public
我正在尝试使用 Angular 将两个字符串相乘。 {{Number(someString) * Number(someOtherString)}} 但是我收到了这个错误: ERROR TypeErr
本文整理了Java中co.cask.tephra.runtime.ZKModule类的一些代码示例,展示了ZKModule类的具体用法。这些代码示例主要来源于Github/Stackoverflow/
本文整理了Java中co.cask.tigon.guice.ZKClientModule类的一些代码示例,展示了ZKClientModule类的具体用法。这些代码示例主要来源于Github/Stack
我正在尝试登录 Virtual Trader使用 python 请求模块的网站 - 我在这方面的经验有限,所以希望得到一些帮助。 之前我用下面的代码登录过类似的网站: import requests
如果我们比较像“CAT”和“cat”这样的两个字符串并使用 vbBinaryCompare 模式,MSDN 说它会进行二进制比较,但什么是二进制比较?这是否意味着它以不区分大小写的方式进行?它与文本比
我有这样的特质: trait CanFold[-T, R] { def sum(acc: R, elem: T): R def zero: R } 使用一个像这样使用它的函数: def sum
我很难理解 The Little Schemer 的 evens-only*&co 发生了什么事情第 145 页的示例。 这是代码: (define evens-only*&co (lambda (
给定 t.co 链接,我如何才能找到链接解析的位置?例如,如果我有 t.co/foo,我想要一个返回 domain.com/bar 的函数或进程。 最佳答案 我会远离您无法控制的外部 API。这只会在
我正在尝试为Elastic Search(Elastic.co)实现相关性反馈。 我知道boosting queries,它允许指定正词和负词,其想法是打折否定词,而不是像 bool(boolean)
在此 Repository 类中,只有一个称为 getMovies 的公共(public)函数,直接从 useCase 类调用。 现在的问题是我希望这个函数从一次调用中多次返回 movieData ,
我是一名优秀的程序员,十分优秀!