程序运行如下:
先设置时间间隔,然后点击开始 ,生成输入后,点击停止 也会停止,但是再次点击开始会抛出如图异常。
请各位大神帮忙解决.
(知道可以用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;
}
}
指向的内存单元中取出矩阵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