【Java】实验代码整理(多线程、自定义异常、界面)
1.界面+文件输入输出流
package finalExam; import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea; public class FrameAndFile extends JFrame implements ActionListener{
String default_save_file_name="myTxT.txt"; JTextArea jTextArea;//用户输入框
JButton jButton_read,jButton_save,jButton_clear;//两个Button
public FrameAndFile() {
//界面设置
setTitle("记事本");
Container container=getContentPane();
container.setLayout(new BorderLayout());
setLocation(200,300); jTextArea=new JTextArea(30,80);
jTextArea.setLineWrap(true); //激活自动换行功能
jTextArea.setWrapStyleWord(true);//换行不断字 container.add("North",jTextArea); JPanel jPanel_button_area=new JPanel(new GridLayout(1,3));
jButton_read=new JButton("读取");
jButton_clear=new JButton("清空");
jButton_save=new JButton("保存");
jPanel_button_area.add(jButton_save);
jPanel_button_area.add(jButton_clear);
jPanel_button_area.add(jButton_read); jButton_clear.addActionListener(this);
jButton_read.addActionListener(this);
jButton_save.addActionListener(this);
container.add("Center",jPanel_button_area);
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) {
new FrameAndFile();
} @Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "清空":
jTextArea.setText("");
break;
case "保存":
save();
break;
case "读取":
read();
break;
default:
break;
} } /**
* 文件读取
* 使用FileReader+BufferedReader
* */
public void read() {
FileReader fileReader=null;
BufferedReader bufferedReader=null;
File file=new File(default_save_file_name);
if(file.exists()) {
try {
fileReader=new FileReader(file);
bufferedReader=new BufferedReader(fileReader);
String input_str="";
while(bufferedReader.ready()) {
input_str=input_str+bufferedReader.readLine();
}
jTextArea.setText(input_str);
} catch (FileNotFoundException e) {
showErrorMessage("出错了:"+e);
e.printStackTrace();
} catch (IOException e) {
showErrorMessage("出错了:"+e);
e.printStackTrace();
}finally {
try {
bufferedReader.close();
fileReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }else {
showErrorMessage("文件不存在!");
} }
/**
* 文件保存
* 使用FileWriter
* */
public void save() {
Writer writer=null;
File file=new File(default_save_file_name);
try {
writer=new FileWriter(file,true);
String string=jTextArea.getText();
if(string!=null||!string.equals("")){
writer.write(string);
writer.flush();
showMessage("保存成功");
}else {
showErrorMessage("请输入完整!");
} } catch (IOException e) {
showErrorMessage("出错了:"+e);
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public void showMessage(String message) {
JOptionPane.showMessageDialog(null, message);
}
public void showErrorMessage(String message) {
JOptionPane.showMessageDialog(null, message, "警告",
JOptionPane.WARNING_MESSAGE);
} }
2..编写选号程序,在窗体中安排6个标签,每个标签上显示0-9之间的一位数字,每位数字用一个线程控制其变化,单击“停止”按钮则所有标签数字停止变化。(多线程)
package finalExam; import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; public class MultiplyThread extends JFrame{
//自定义一个类,负责封装所有控件的操作
RandomPanelManager randomPanelManager;
//主类只负责界面操作
public MultiplyThread() {
setTitle("抽号");
Container container=getContentPane();
container.setLayout(new FlowLayout());
setBounds(200,300,300,350); randomPanelManager=new RandomPanelManager();
container.add(randomPanelManager.getCom()); setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); } //管理类
class RandomPanelManager implements ActionListener{
List<MyLable> lables;//用来存放6个MyLable
JPanel jPanel;//封装在一个大的JPanel中
public RandomPanelManager() {
lables=new ArrayList<MultiplyThread.MyLable>();
jPanel=new JPanel(new GridLayout(7,1,10,10));
for(int i=0;i<6;i++) {
MyLable myLable=new MyLable();
lables.add(myLable);
jPanel.add(myLable);
}
JPanel jPanel_buttonJPanel=new JPanel(new GridLayout(1,2));
JButton jButton_startButton=new JButton("开始");
JButton jButton_endButton=new JButton("停止");
jButton_endButton.addActionListener(this);
jButton_startButton.addActionListener(this);
jPanel_buttonJPanel.add(jButton_startButton);
jPanel_buttonJPanel.add(jButton_endButton);
jPanel.add(jPanel_buttonJPanel);
}
public JPanel getCom() {
return jPanel;
}
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "开始":
start();
break;
case "停止":
stop();
break;
default:
break;
}
}
/**
* 开始随机数
* 注意需要先把flag置为true
* 再创建Thread并放入运行
* */
public void start() {
for (MyLable item:lables) {
item.init();
Thread thread=new Thread(item);
thread.start();
}
}
/**
* 停止随机数
* 只需要把flag置false即可
* */
public void stop() {
for (MyLable item:lables) {
item.stop();
}
}
}
//自定义控件,实现Runnable接口
class MyLable extends JPanel implements Runnable{
JLabel jLabel_tag;
boolean flag=true;
public MyLable() {
jLabel_tag=new JLabel("0");
this.setLayout(new FlowLayout());
this.add(jLabel_tag);
} public void setText() {
jLabel_tag.setText(getRandomNum()+"");
}
/**
* 获取随机数
* 种子为:当前时间
* 范围[0-9]
* */
public int getRandomNum(){
Date date=new Date();
Random random=new Random(date.getTime());//随机种子
return random.nextInt(10);
} @Override
public void run() {
while(flag) {
setText();
}
}
public void stop() {
flag=false;
}
/**
* 恢复,考虑到重复执行的情况
* */
public void init() {
flag=true;
}
} public static void main(String[] args) {
new MultiplyThread();
}
}
3.异常处理从键盘输入一个正整数,判断是否为偶数,不是则抛出异常
package finalExam; import java.util.Scanner;
import java.util.regex.Pattern; public class MyException extends RuntimeException { private static final long serialVersionUID = 123456789L; public MyException() {
super();
// TODO Auto-generated constructor stub
} public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
} public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
} public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
} public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
} public static void main(String[] args) {
Scanner scanner=null;
try {
System.out.println("请输入一个整数并继续:");
scanner=new Scanner(System.in);
String inputstr=scanner.nextLine();
if(isNumeric(inputstr)) {
Integer a=Integer.parseInt(inputstr);
if(a<0) {
throw new MyException("不是正整数");
}
if(a%2!=0) {
throw new MyException("不是偶数");
}
System.out.println("输入成功!");
}else {
throw new MyException("不是整数");
} } catch (Exception e) {
e.printStackTrace();
}finally {
scanner.close();
}
}
/**
* 通过正则判断字符串是否为整数
* 这个是我考虑的比较多的,可以直接不用判断
* 在主函数中使用Scanner.nextInt
* 如果输入不是整数会自动抛出异常
* */
public static boolean isNumeric(String string){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(string).matches();
} }
【Java】实验代码整理(多线程、自定义异常、界面)的更多相关文章
- Java实验项目四——多线程矩阵相乘算法的设计
Program:多线程矩阵相乘算法的设计 Description:利用多线程实现矩阵相乘,因为各个线程的运算互不影响, 所以不用使用锁,代码如下: thread.OperateMatrix类,实现矩阵 ...
- 2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...
- 使用XML布局文件和Java代码混合控制UI界面
完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...
- [Java] 实验5參考代码
实验4月3日晚截止,实验截止后将在此给出完整的參考代码. 1. 怎样使用以下的代码模板: 1.1 在eclipse中创建相应名称的类 1.2 将代码拷贝到类文件中 1.3 在//todo凝视中 ...
- [Java] 实验6參考代码
1. 大家的.java程序都须要在一个"缺省包"(default package)下编写\执行\提交,不要去命名新的package - 系统不支持package contr ...
- C#多线程操作界面控件的解决方案(转)
C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...
- 尚学堂Java面试题整理
博客分类: 经典分享 1. super()与this()的差别? - 6 - 2. 作用域public,protected,private,以及不写时的差别? - 6 - 3. 编程输出例如以 ...
- 20135231 JAVA实验报告三:敏捷开发与XP实践
---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...
- 第十四周java实验作业
实验十四 Swing图形界面组件 实验时间 20178-11-29 1.实验目的与要求 (1) 掌握GUI布局管理器用法: 在java中的GUI应用 程序界面设计中,布局控制通过为容器设置布局管理器 ...
随机推荐
- Java错误:找不到类文件或者未加载主类
使用java命令执行.class文件时,java只会查找环境变量CLASSPATH中的目录,并会不查找当前目录,所以只要把当前目录”."加入到CLASSPATH中就可以了.
- IIS 无法访问请求的页面,因为该页的相关配置数据无效。
解决方法:控制面板-->程序和功能-->打开或关闭windows功能-->角色的这里,如果还未安装“web服务器(IIS)”,则选择“添加”.如果已经安装了,则选择“web服务器(I ...
- 【vue_django】成功登录后,保存用户
PS:使用session 保存: // 登录 login() { if (this.username === "" || this.password === "" ...
- python3中的继承和多态
*继承 当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super clas ...
- 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。
编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) ...
- PAT_B数素数 (20)
数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整数M &l ...
- TensorFlow中使用GPU
TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存:如果指定了某块GPU,也会默认一次性占用该GPU的所有显存.可以通过以下方式解决: 1 Python代码中设置环境变量,指定G ...
- Eclipse导入项目提示No projects are found to import解决办法
使用Eclipse导入项目时遇到No projects are found to import提示的解决办法. 这是因为导入的文件里面缺少两个文件:.classpath.project 在这里三种方案 ...
- Go语言实现:【剑指offer】二维数组中的查找
该题目来源于牛客网<剑指offer>专题. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一 ...
- 从Golang中open的实现方式看Golang的语言设计
Golang有很多优点: 开发高效:(C语言写一个hash查找很麻烦,但是go很简单) 运行高效:(Python的hash查找好写,但比Python高效很多) 很少的系统库依赖:(环境依赖少,一般不依 ...