本站提倡有节制游戏,合理安排游戏时间,注意劳逸结合。

【正则式 网页源码】【bgc云台源码】【html欢迎页面源码】stringmessage源码分析

2024-12-23 23:35:35 来源:知识 分类:知识

1.stringmessageԴ?码分????
2.学生考试管理系统,JAva源代码
3.Handler知识详解与源码分析

stringmessage源码分析

stringmessageԴ?码分????

       æ˜¯å¼•èµ·è¿™ä¸ªå¼‚常的异常,如果这个值是空值,那么这个异常就是源头;如果这个值等于自己,那么这个异常还没被初始化。

       ä¸‹é¢æ˜¯JDK中源码给出的注释,英语好的话一看就懂。

        /

**

        * The throwable that caused this throwable to get thrown, or null if this

        * throwable was not caused by another throwable, or if the causative

        * throwable is unknown. If this field is equal to this throwable itself,

        * it indicates that the cause of this throwable has not yet been

        * initialized.

       

*

        * @serial

        * @since 1.4

        */

学生考试管理系统,JAva源代码

       //主类EnglishTest——

       import java.awt.*;

       import java.awt.event.*;

       import javax.swing.*;

       public class EnglishTest extends JFrame

       {

        TestArea testPanel=null;

        Container con=null;

        public EnglishTest()

        {

        super("模拟考试");

        testPanel=new TestArea();

        con=getContentPane();

        con.add(testPanel,码分BorderLayout.CENTER);

        addWindowListener(new WindowAdapter()

        { public void windowClosing(WindowEvent e)

        { System.exit(0);

        }

        });

        setVisible(true);

        setBounds(,,,);

        con.validate();

        validate();

        }

        public static void main(String args[])

        {

        new EnglishTest();

        }

       }

       //读取试题 ReadTestquestion

       import java.io.*;

       import java.util.*;

       public class ReadTestquestion

       { String filename="",

        correctAnswer="",

        testContent="" ,

        selection="" ;

        int score=0;

        long time=0;

        boolean 完成考试=false;

        File f=null;

        FileReader in=null;

        BufferedReader 读取=null;

        public void setFilename(String name)

        { filename=name;

       score=0;

        selection="";

        try {

        if(in!=null&&读取!=null)

        {

        in.close();

        读取.close();

        }

        f=new File(filename);

        in=new FileReader(f);

        读取=new BufferedReader(in);

        correctAnswer=(读取.readLine()).trim();

        String temp=(读取.readLine()).trim() ;

        StringTokenizer token=new StringTokenizer(temp,":");

        int hour=Integer.parseInt(token.nextToken()) ;

        int minute=Integer.parseInt(token.nextToken());

        int second=Integer.parseInt(token.nextToken());

        time=*(second+minute*+hour**);

        }

        catch(Exception e)

        {

        testContent="没有选择试题";

        }

        }

        public String getFilename()

        {

        return filename;

        }

        public long getTime()

        {

        return time;

        }

        public void set完成考试(boolean b)

        {

        完成考试=b;

        }

        public boolean get完成考试()

        {

        return 完成考试;

        }

        public String getTestContent()

        { try {

        String s=null;

        StringBuffer temp=new StringBuffer();

        if(读取!=null)

        {

        while((s=读取.readLine())!=null)

        {

        if(s.startsWith("**"))

        break;

        temp.append("\n"+s);

        if(s.startsWith("endend"))

        {

        in.close();

        读取.close();

        完成考试=true;

        }

        }

        testContent=new String(temp);

        }

        else

        {

        testContent=new String("没有选择试题");

        }

        }

        catch(Exception e)

        {

        testContent="试题内容为空,考试结束!!码分正则式 网页源码";

        }

        return testContent;

        }

        public void setSelection(String s)

        {

        selection=selection+s;

        }

        public int getScore()

        { score=0;

        int length1=selection.length();

        int length2=correctAnswer.length();

        int min=Math.min(length1,码分length2);

        for(int i=0;i<min;i++)

        { try{

        if(selection.charAt(i)==correctAnswer.charAt(i))

        score++;

        }

        catch(StringIndexOutOfBoundsException e)

        {

        i=0;

        }

        }

        return score;

        }: -8-

        public String getMessages()

        {

        int length1=selection.length();

        int length2=correctAnswer.length();

        int length=Math.min(length1,length2);

        String message="正确答案:"+correctAnswer.substring(0,length)+"\n"+

        "你的回答:"+selection+"\n";

        return message;

        }

       }

       //考试区域TestArea

       import java.awt.*;

       import javax.swing.*;

       import java.awt.event.*;

       import java.io.*;

       class FileName implements FilenameFilter

       {

        String str=null;

        FileName (String s)

        {

        str="."+s;

        }

        public boolean accept(File dir,String name)

        {

        return name.endsWith(str);

        }

       }

       public class TestArea extends JPanel implements ActionListener,ItemListener,Runnable

       {

        Choice list=null;

        JTextArea 试题显示区=null,消息区=null;

        JCheckBox box[];

        JButton 提交该题答案,读取下一题,查看分数;

        ReadTestquestion 读取试题=null;

        JLabel welcomeLabel=null;

        Thread countTime=null;

        long time=0;

        JTextField timeShow=null;

        boolean 是否关闭计时器=false,

        是否暂停计时=false;

        JButton 暂停或继续计时=null;

        public TestArea()

        {

        list= new Choice();

        String 当前目录=System.getProperty("user.dir");

        File dir=new File(当前目录);

        FileName fileTxt=new FileName("txt");

        String fileName[]=dir.list(fileTxt);

        for(int i=0;i<fileName.length;i++)

        {

        list.add(fileName[i]);

        }

        试题显示区=new JTextArea(,);

        试题显示区.setLineWrap(true);

        试题显示区.setWrapStyleWord(true);

        试题显示区.setFont(new Font("TimesRoman",Font.PLAIN,));

        试题显示区.setForeground(Color.blue);

        消息区=new JTextArea(8,8);

        消息区.setForeground(Color.blue);

        消息区.setLineWrap(true);

        消息区.setWrapStyleWord(true);

        countTime=new Thread(this);

        String s[]={ "A","B","C","D"};

        box=new JCheckBox[4];

        for(int i=0;i<4;i++)

        {

        box[i]=new JCheckBox(s[i]);

        }

        暂停或继续计时=new JButton("暂停计时");

        暂停或继续计时.addActionListener(this);

        提交该题答案=new JButton("提交该题答案");

        读取下一题=new JButton("读取第一题");

        读取下一题.setForeground(Color.blue);

        提交该题答案.setForeground(Color.blue);

        查看分数=new JButton("查看分数");

        查看分数.setForeground(Color.blue);

        提交该题答案.setEnabled(false);

        提交该题答案.addActionListener(this);

        读取下一题.addActionListener(this);

        查看分数.addActionListener(this);

        list.addItemListener(this);

        读取试题=new ReadTestquestion();

        JPanel pAddbox=new JPanel();

        for(int i=0;i<4;i++)

        {

        pAddbox.add(box[i]);

        }

        Box boxH1=Box.createVerticalBox(),

        boxH2=Box.createVerticalBox(),

        baseBox=Box.createHorizontalBox();

        boxH1.add(new JLabel("选择试题文件"));

        boxH1.add(list);

        boxH1.add(new JScrollPane(消息区));

        boxH1.add(查看分数);

        timeShow=new JTextField();

        timeShow.setHorizontalAlignment(SwingConstants.RIGHT);

        timeShow.setEditable(false);

        JPanel p1=new JPanel();

        p1.add(new JLabel("剩余时间:"));

        p1.add(timeShow);

        p1.add(暂停或继续计时);

        boxH1.add(p1);

        boxH2.add(new JLabel("试题内容:"));

        boxH2.add(new JScrollPane(试题显示区));

        JPanel p2=new JPanel();

        p2.add(pAddbox);

        p2.add(提交该题答案);

        p2.add(读取下一题);

        boxH2.add(p2);

        baseBox.add(boxH1);

        baseBox.add(boxH2);

        setLayout(new BorderLayout());

        add(baseBox,BorderLayout.CENTER);

        welcomeLabel=new JLabel("欢迎考试,提高英语水平",JLabel.CENTER);

        welcomeLabel.setFont(new Font("隶书",Font.PLAIN,));

        welcomeLabel.setForeground(Color.blue);

        add(welcomeLabel,BorderLayout.NORTH);

        }

        public void itemStateChanged(ItemEvent e)

        {

        timeShow.setText(null);

        是否关闭计时器=false;

        是否暂停计时=false;

        暂停或继续计时.setText("暂停计时");

        String name=(String)list.getSelectedItem();

        读取试题.setFilename(name);

        读取试题.set完成考试(false);

        time=读取试题.getTime();

        if(countTime.isAlive())

        {

        是否关闭计时器=true;

        countTime.interrupt();

        }

        countTime=new Thread(this);

        消息区.setText(null);

        试题显示区.setText(null);

        读取下一题.setText("读取第一题");

        提交该题答案.setEnabled(false);

        读取下一题.setEnabled(true);

        welcomeLabel.setText("欢迎考试,你选择的试题:"+读取试题.getFilename());

        }

        public void actionPerformed(ActionEvent e)

        {

        if(e.getSource()==读取下一题)

        {

        读取下一题.setText("读取下一题");

        提交该题答案.setEnabled(true);

        String contentTest=读取试题.getTestContent();

        试题显示区.setText(contentTest);

        消息区.setText(null);

        读取下一题.setEnabled(false);

        try {

        countTime.start();

        }

        catch(Exception event)

        {

        }

        }

        if(e.getSource()==提交该题答案)

        {

        读取下一题.setEnabled(true);

        提交该题答案.setEnabled(false);

        String answer="?";

        for(int i=0;i<4;i++)

        {

        if(box[i].isSelected())

        {

        answer=box[i].getText();

        box[i].setSelected(false);

        break;

        }

        }

        读取试题.setSelection(answer);

        }

        if(e.getSource()==查看分数)

        {

        int score=读取试题.getScore();

        String messages=读取试题.getMessages();

        消息区.setText("分数:"+score+"\n"+messages);

        }

        if(e.getSource()==暂停或继续计时)

        {

        if(是否暂停计时==false)

        {

        暂停或继续计时.setText("继续计时");

        是否暂停计时=true;

        }

        else if(是否暂停计时==true)

        {

        暂停或继续计时.setText("暂停计时");

        是否暂停计时=false;

        countTime.interrupt();

        }

        }

        }

        public synchronized void run()

        {

        while(true)

        {

        if(time<=0)

        {

        是否关闭计时器=true;

        countTime.interrupt();

        提交该题答案.setEnabled(false);

        读取下一题.setEnabled(false);

        timeShow.setText("用时尽,考试结束");

        }

        else if(读取试题.get完成考试())

        {

        是否关闭计时器=true;

        timeShow.setText("考试效果:分数*剩余时间(秒)="+1.0*读取试题.getScore()*(time/));

        countTime.interrupt();

        提交该题答案.setEnabled(false);

        读取下一题.setEnabled(false);

        }

        else if(time>=1)

        {

        time=time-;

        long leftTime=time/;

        long leftHour=leftTime/;

        long leftMinute=(leftTime-leftHour*)/;

        long leftSecond=leftTime%;

        timeShow.setText(""+leftHour+"小时"+leftMinute+"分"+leftSecond+"秒");

        }

        try

        {

        Thread.sleep();

        }

        catch(InterruptedException ee)

        {

        if(是否关闭计时器==true)

        return ;

        }

        while(是否暂停计时==true)

        {

        try

        {

        wait();

        }

        catch(InterruptedException ee)

        {

        if(是否暂停计时==false)

        {

        notifyAll();

        }

        }

        }

        }

        }

       }

Handler知识详解与源码分析

       Handler是Android中的核心组件,它负责在不同线程间传递消息。码分其工作原理是码分通过内存共享,允许子线程(生产者)向主线程(消费者)发送消息,码分以及主线程向子线程发送指令。码分这种机制有助于线程间协作,码分如网络请求完成后更新UI等场景。码分bgc云台源码

       Message是码分消息的实体,承载着数据和执行指令。码分MessageQueue是码分一个优先级队列,负责存储和调度消息。码分Handler则是html欢迎页面源码个消息处理类,负责发送、获取和处理消息,以及管理消息队列。Looper的存在是为了从MessageQueue中轮询消息,执行相应操作。php仿服装源码

       创建Handler有多种方式,包括主线程的匿名内部类和静态内部类,以及子线程中的Looper.prepare()和Looper.loop()。发送消息的方法丰富多样,如sendMessage()、房链家源码sendMessageDelayed()等,可以控制消息的执行时间和顺序。处理消息时,Handler与MessageQueue、Looper的交互是关键,保证了消息处理的线程安全。

       在源码分析中,我们发现Looper的创建和使用与APP启动流程紧密相关,确保每个线程只有一个Looper,避免内存泄漏。MessageQueue的线程同步和消息屏障机制确保了消息的有序处理。此外,如何处理内存管理、线程同步问题以及Looper的退出策略也是处理Handler时需要注意的要点。

       最后,对于Handler的使用,如创建、消息发送和处理,以及可能遇到的问题,如内存泄漏、线程同步等,都有详细的解析和解决方案。理解这些概念有助于开发人员更有效地利用Handler进行线程间的通信。

相关推荐
一周热点