我在做一个Platform.Runlater来更新一个TextField。在这里您可以看到代码:
public class FXMLDocumentController implements Initializable {
@FXML
private TextField carlos;
RXTX main = new RXTX();
public void Test(){
Platform.runLater(new Runnable() {
@Override public void run() {
carlos.setText("Test");
}
});
}
@Override
public void initialize(URL url, ResourceBundle rb) {
main.initialize();
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Started");
}
}
public class RXTX implements SerialPortEventListener{
private String Temperature;
SerialPort serialPort;
/** The port we're normally going to use. */
private static final String PORT_NAMES[] = {
"COM4" // Windows
};
/**
* A BufferedReader which will be fed by a InputStreamReader
* converting the bytes into characters
* making the displayed results codepage independent
*/
private BufferedReader input;
/** The output stream to the port */
private OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 9600;
public void initialize() {
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);
// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();
// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}
/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
System.out.println(inputLine);
GetData(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}
@FXML
private void GetData(String Data) {
if(Data.contains("Temperature")){
FXMLDocumentController main = new FXMLDocumentController();
main.Test();
}
}
}
在OpenPilot.fxmlDocumentController$1.run(fxmlDocumentController.java:35)在com.sun.javafx.application.platformImpl$4$1.run(platformImpl.java:182)在com.sun.javafx.application.platformImpl$4$1.run(platformImpl.java:179)在java.security.accessController.doprivileged(本机方法)在在com.sun.glass.ui.win.winapplication._runloop(本机方法)在com.sun.glass.ui.win.winapplication.access$100(winapplication.java:17)在com.sun.glass.ui.win.winapplication.3$1.run(winapplication.java:67)在java.lang.thread.run(thread.java:744)
不要使用new
创建FXML控制器,而是使用fxmlloader.load()。
在您的特殊情况下,最好使用platform.runlater()调用JavaFX应用程序线程上的load()。
FXMLLoader创建@fxml注释节点的实例。因此,除非使用加载器,否则将永远不会创建@fxml节点。因此,在本例中,您的“Carlos”TextField是null,因为没有任何东西创建这样的TextField,导致您的NullPointerException。
您的代码中可能还有很多其他错误。
我建议在处理与串行端口通信的多线程应用程序之前,先花更多的时间编写基本的单线程JavaFX应用程序。
本文向大家介绍Android 稍后运行意图,包括了Android 稍后运行意图的使用技巧和注意事项,需要的朋友参考一下 示例 创建一个接收器。这堂课将收到您的意图并按照您的意愿进行处理。 给AlarmManager一个意图。此示例将在1分钟后触发将意图发送到AlarmReceiver。
我已经用spring Security保护了我的spring boot应用程序(基本身份验证)。我为可以使用监视和管理的用户添加了角色管理。我设置management.security.roles=management。具有此角色的用户只能看到状态(使用运行状况终结点)。如果我设置management.security.role=management,则一切正常(具有此角色的用户可查看所有健康参数
我正在写一个JavaApplet使用JavaFX嵌入Swing。用户可以通过以下代码使用JFXPanel启动带有JavaFX组件的Swing GUI: 当Applet首先启动时,用户可以创建GUI元素并关闭它。以后他可以再创造。为此,我需要在内存中保存一个不可见的JFrame,其中包含一个JFXPanel的整个运行时,我从来没有使用过,因为我在某个地方读到,否则JavaFX应用程序线程会停止。现在
问题内容: 我在夹层中使用Django1.7。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中: 创建迁移会返回: 当我运行“迁移配置文件”时: 问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示: 我做错了什么? 问题答案: 在MySQL数据库中,从表中删除行。 删除迁移文件夹中的所有迁移文件。 重试并
我正在使用NSeriveBus构建一个系统,它应该只在特定的时间段将消息发送给远程处理程序。到目前为止,我设法将所有消息放在一个处理队列上,并从那里检查远程处理程序的可用性,如果处理程序不可用,我就不会通过边界发送消息。要做到这一点,我正在使用 但国家安全局会继续努力。这不像其他侦听器将在几分钟内启动并运行,但它可能有几个小时的停机窗口,因此这并不完全有效。 想知道是否有办法让总线稍后重试消息,或
我正在使用azure datafactory WebHook获取管道运行的详细信息-使用以下链接按工厂查询。邮递https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{resourceGroupName}/providers/Microsoft。数据工厂/工厂/{factoryName}/queryPipelineRuns