Java实验代码整理(多线程自定义异常界面)

Posted 巴塞罗那的余晖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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多线程实力讲解

多线程中wait和notify的特性

七天学会ASP.NET MVC ——线程问题异常处理自定义URL

java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应?

JAVA笔记:多线程面试题整理!

2017-9-1 - Q - 异常处理 - 多线程基础