qq839276655 2016-05-25 13:56 采纳率: 88.9%
浏览 1966
已采纳

求一个JavaFX,线程问题

程序运行如下:图片说明
先设置时间间隔,然后点击开始 ,生成输入后,点击停止 也会停止,但是再次点击开始会抛出如图异常。
请各位大神帮忙解决.
(知道可以用util工具Timer,Timer;但如何不用工具类,只用线程。)
代码如下 :
---1.显示界面
package addData;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TestView extends Application{

public void start(Stage stage) throws Exception {
TableFX table = new TableFX();
VBox vb = table.createStage();
Scene scene = new Scene(vb);
stage.setTitle("定时添加数据");
stage.setWidth(600);
stage.setHeight(400);
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
    launch(args);
}

}
---2.用线程自制定时器
package addData;

public abstract class ThreadTimer extends Thread{
private boolean flag;
private int time;

public void run(){
    while(true){
        if(flag){
            doThing();
            try {
                Thread.sleep(time*1000);
            } catch (InterruptedException e) {
                System.out.println("线程被中断");
            }
        }
    }
}

public abstract void doThing();
public ThreadTimer() {
    super();
}
public ThreadTimer(boolean flag) {
    super();
    this.flag = flag;
}
public ThreadTimer(int time) {
    super();
    this.time = time;
}
public ThreadTimer(boolean flag, int time) {
    super();
    this.flag = flag;
    this.time = time;
}
public boolean isFlag() {
    return flag;
}
public void setFlag(boolean flag) {
    this.flag = flag;
}
public int getTime() {
    return time;
}
public void setTime(int time) {
    this.time = time;
}

}

---3.实现按钮事件操控线程定时器
package addData;

import test3.MyTest.StringModel;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;

public class TableFX extends ThreadTimer{

HBox hb = new HBox();
Button start = new Button("开始");
Button stop = new Button("停止");
Label intervalLabel = new Label("时间间隔(秒)");
TextField interval = new TextField();

TableView<StringModel> table = new TableView<StringModel>();
ObservableList<StringModel> data = FXCollections.observableArrayList(new StringModel("11","aa"));

public void doThing() {
    System.out.println("正在添加数据");
    data.addAll(new StringModel("aa"+Math.random()*100, "bb"));
}

public VBox createStage(){
    //设置2个按钮,1个文本框
    hb.setSpacing(15);
    hb.setAlignment(Pos.CENTER);//设置box中控件居中
    hb.getChildren().addAll(start,stop,interval,intervalLabel);

    //设置按钮事件
    start.setOnAction(new EventHandler<ActionEvent>() {

        public void handle(ActionEvent event) {
            setTime(Integer.parseInt(interval.getText()));
            setFlag(true);
            start();
        }
    });
    stop.setOnAction(new EventHandler<ActionEvent>() {

        public void handle(ActionEvent event) {
            setFlag(false);
        }

    });

    //设置显示记录的表格
    TableColumn tc1 = new TableColumn("消息记录"); 
    tc1.setMinWidth(400);
    tc1.setMaxWidth(400);
    tc1.setCellValueFactory(new PropertyValueFactory<>("str1"));

    table.setItems(data);
    table.getColumns().addAll(tc1);

    //把HBox和 TableView 放进 VBox
    VBox vb = new VBox();
    vb.setSpacing(10);
    vb.setPadding(new Insets(10,10,10,10));
    vb.getChildren().addAll(hb,table);



    return vb;

}

}

  • 写回答

1条回答 默认 最新

  • 普通网友 2016-10-04 18:37
    关注

    指向的内存单元中取出矩阵B当前的元素暂存在r3
    multu r1,r2,r3 ;temp1<-dat1[i]+dat2[j]
    add r11,r11,r1 ;temp<-temp+temp1,累加到累加器
    addi r10,r10,1 ;i++,计算矩阵A当前行的下个元素的索引
    movfp2i r1,f3

    add r7,r7,r1 ;j<-j+k,计算矩阵B的当前列的下个元素的索引
    j calculate
    asign: addi r1,r4,result ;r1表示矩阵C当前的地址
    sb 0(r1),r11 ;store result,把新计算出来的元素放入当前内存单元
    addi r4,r4,1 ;赋值完一个元素,偏移量自增1
    addi r6,r6,1 ;矩阵B的当前列数自增1
    j column ;矩阵B新的一列开始
    leveladd: addi r5,r5,1 ;矩阵A当前行自增1
    j line ;矩阵A新的一行开始
    finish:
    addi r10,r0,0 ;分别读出矩阵C的元素值
    movfp2i r8,f1
    movfp2i r12,f3
    addi r2,r10,result
    sw PrintfValue4,r1
    addi r14,r0,PrintfPar4
    trap 5
    loop3:
    lbu r1,0(r2)
    sw PrintfValue,r1
    addi r14,r0,PrintfPar
    trap 5
    addi r2,r2,1
    sub r12,r12,1
    beqz r12,outputC
    j loop3
    outputC:
    sw PrintfValue1,r1
    addi r14,r0,PrintfPar1
    trap 5

    sub r8,r8,1
    beqz r8,againChoice
    movfp2i r12,f3
    j loop3
    againChoice:
    add r1,r0,Prompt6
    jal InputUnsigned
    beqz r1,end

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题