【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();
    }

}

原文地址:https://www.cnblogs.com/robotpaul/p/12104935.html

时间: 2024-11-10 13:34:19

【Java】实验代码整理(多线程、自定义异常、界面)的相关文章

java实验1:综合图形界面程序设计

 题目1: 综合图形界面程序设计 实验目的和要求:学习和理解JAVA SWING中的容器,部件,布局管理器和部件事件处理方法.通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法. 实验内容:设计和编写一个用于将人民币转换为等值的美元的程序,界面要求可以输入人民币的金额并可以得到转换后的结果. 附:程序使用的人民币外汇牌价参考 每100元美元等值买入人民币数:617.00 (参考数据) 代码: import java.awt.*; import java.awt.event.*; impo

[Java] 实验5參考代码

实验4月3日晚截止,实验截止后将在此给出完整的參考代码. 1. 怎样使用以下的代码模板: 1.1 在eclipse中创建相应名称的类     1.2 将代码拷贝到类文件中 1.3 在//todo凝视中输入你用于解题的代码. 1.4 样例:參考第一题"显示两级名字".大家就能够这么做 1.4.1 在eclipse中创建类.名字叫做PassOrFail 1.4.2 将以下的代码拷贝到.java文件里.并删除//todo凝视,開始在while循环里写代码 (推断成绩是否大于60, 输出等)

java swing高仿酷我音乐界面代码例子下载

原文:java swing高仿酷我音乐界面代码例子下载 代码下载地址:http://www.zuidaima.com/share/1550463245044736.htm 高仿酷我音乐界面尽情欣赏 java swing高仿酷我音乐界面代码例子下载,布布扣,bubuko.com

java swing实现的多线程实例代码教程-赛马demo

代码下载:http://www.zuidaima.com/share/1825492473826304.htm 原文:java swing实现的多线程实例代码教程-赛马demo 项目截图: 运行截图: java swing实现的多线程实例代码教程-赛马demo,布布扣,bubuko.com

JAVA将数字字符串强制转换成整型变量----求参数之和实验代码

实验代码: package demo; public class CommandParameter {  /**  * @param args  */  public static void main(String[] args) {   // TODO Auto-generated method stub    int sum=0;                                                                             //设数值

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

---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中

实验十四 Swing图形界面组件

实验十四  Swing图形界面组件 实验时间 20178-11-29 1.实验目的与要求 (1) 掌握GUI布局管理器用法: (2) 掌握各类Java Swing组件用途及常用API: 2.实验内容和步骤 实验1: 导入第12章示例程序,测试程序并进行组内讨论. 测试程序1 在elipse IDE中运行教材479页程序12-1,结合运行结果理解程序: 掌握各种布局管理器的用法: 理解GUI界面中事件处理技术的用途. 在布局管理应用代码处添加注释: 测试结果: 这个程序是一个网格布局,网格布局像一

架构师必备之面试题整理——多线程并发技术要点!

一.概念 什么是线程 一个线程要执行任务,必须得有线程 一个进程(程序)的所有任务都在线程中执行的 一个线程执行任务是串行的,也就是说一个线程,同一时间内,只能执行一个任务 多线程原理 同一时间,CPU只能处理1条线程,只有一条线程在工作(执行) 多线程并发(同时)执行,其实质是CPU快速的在多线程之间调度(切换) 如果线程过多,会怎样? CPU在N多条线程中调度,会消耗大量的cpu资源 每条线程被调度执行的频率越低(线程的执行效率低) 多线程的优点 能适当提高程序的执行效率 能适当提高资源的利

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代