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】实验代码整理(多线程、自定义异常、界面)的更多相关文章

  1. Java实验项目四——多线程矩阵相乘算法的设计

    Program:多线程矩阵相乘算法的设计 Description:利用多线程实现矩阵相乘,因为各个线程的运算互不影响, 所以不用使用锁,代码如下: thread.OperateMatrix类,实现矩阵 ...

  2. 2019-9-16 java上课知识整理总结(动手动脑,课后实验)

    java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...

  3. 使用XML布局文件和Java代码混合控制UI界面

    完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...

  4. [Java] 实验5參考代码

    实验4月3日晚截止,实验截止后将在此给出完整的參考代码. 1. 怎样使用以下的代码模板: 1.1 在eclipse中创建相应名称的类     1.2 将代码拷贝到类文件中 1.3 在//todo凝视中 ...

  5. [Java] 实验6參考代码

    1. 大家的.java程序都须要在一个"缺省包"(default package)下编写\执行\提交,不要去命名新的package     - 系统不支持package contr ...

  6. C#多线程操作界面控件的解决方案(转)

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  7. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  8. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  9. 第十四周java实验作业

    实验十四  Swing图形界面组件 实验时间 20178-11-29 1.实验目的与要求 (1) 掌握GUI布局管理器用法: 在java中的GUI应用 程序界面设计中,布局控制通过为容器设置布局管理器 ...

随机推荐

  1. Mybatisplus代码生成器主类CodeGenerator配置

    //代码自动生成public class CodeGenerator { /** * <p> * 读取控制台内容 * </p> */ public static String ...

  2. 【译】SQ3R学习法则

    SQ3R 观察-提问-阅读-复述-回顾 背景 SQ3R是一种理解策略,可帮助学生在阅读时思考他们正在阅读的文章. SQ3R通常被归类为学习策略,通过教导学生在初次阅读一篇文章时如何阅读和像高效读者一样 ...

  3. Docker快速上手之部署SpringBoot项目

    Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...

  4. 删除我的电脑wps、百度网盘图标

    删除我的电脑wps.百度网盘图标 删除下面子项 输入"计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Expl ...

  5. C语言实现银行家算法

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  6. 纯JavaScript实现页面行为的录制

    在网上有个开源的rrweb项目,该项目采用TypeScript编写(不了解该语言的可参考之前的<TypeScript躬行记>),分为三大部分:rrweb-snapshot.rrweb和rr ...

  7. 使用 TF-IDF 加权的空间向量模型实现句子相似度计算

    使用 TF-IDF 加权的空间向量模型实现句子相似度计算 字符匹配层次计算句子相似度 计算两个句子相似度的算法有很多种,但是对于从未了解过这方面算法的人来说,可能最容易想到的就是使用字符串匹配相关的算 ...

  8. Go语言实现:【剑指offer】平衡二叉树

    该题目来源于牛客网<剑指offer>专题. 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. ...

  9. Html / XHtml 解析 - Parsing Html and XHtml

    Html / XHtml 解析 - Parsing Html and XHtml HTMLParser 模块 通过 HTMLParser 模块来解析 html 文件通常的做法是, 建立一个 HTMLP ...

  10. Java逃逸分析

    Java逃逸分析 记录下看到的别人的博客内容,以后深入了解再详细写篇,加深下基础概念和印象! 一般来说,Java对象的创建,通常是在堆空间中分配内存,但是如果大量的临时对象也在堆空间创建的话,会导致性 ...