【Java】实验代码整理(多线程、自定义异常、界面)
2024-09-06 18:55:46
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();
} }
最新文章
- jQuery的4种事件绑定方法
- openjdk 完全编译指南
- cordova 版本
- MySQL中的约束简单使用
- [USACO2003][poj2187]Beauty Contest(凸包+旋转卡壳)
- POJ 1528问题描述
- js操作
- mysql视图 更新中的问题
- SQL 2005/2008 连接SQL 2000报18456错误
- LeetCode724. 寻找数组的中心索引
- China Tightens Recycling Import Rules
- Web标准中xhtml规范的内容有哪些
- BOM基础 计时器 定时器 DOM 基础
- Ubuntu 18.04 安装Docker
- Python【每日一问】06
- Sql Server 统计当天数据
- css3之calc()
- Maven+TestNG+ReportNG/Allure接口自动化测试框架初探(上)
- node创建一个简单的web服务
- win10系统遇到的问题解决