一个java的实验

       首先声明一点,本人对java并不熟悉,只是学习过C++,然后因为课程的安排才看了一下java的,所以对java强的类库和运行机制还不是很了解。

       这个java程序是为明天的实验做的准备。具体的要求是这样的:

       1、编写一个程序,其功能是运行之后,其中有一个线程可以输出 20 次你的学号,另一个线程会输出 20 次你的姓名。
       2、编写一个图形界面程序,运行之后,让其中有一个线程能在界面上不断显示系统当前时间(获取时间可查询 java.util.Calendar 类,它包含了多个用于获得系统时间的函数)。另让  一个线程可以在界面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时间现在是 8:00 到 9:00,则提示用户该上课;现在是 23:00 到 8:00,则提示用户该休息)。

       第一眼看上去挺简单的,但是由于不是很了解多线程,所以也花了挺多时间的弄的。下面列出的代码肯定还有很多我不懂的不足之处,欢迎大家批评指正。由于是在linux下面写的,也没装什么截图工具把运行结果截图出来,所以就只源码先。

       第一个挺简单的,就是弄两个线程类,然后在有主函数的那个类(不知到正式名词是什么)里面分别实例化它们的一个对象,再分别start它们就行。源代码如下:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class ThreadExample
{
    JFrame jf=new JFrame("线程都往界面上显示内容的例子");
    static JTextArea jta1,jta2;
    Thread trda=new thread1(); //线程trda
    Thread trdb=new thread2(); //线程trdb
    
    
    public ThreadExample() //构造函数,生成图形界面
    {
        jf.setLayout(new FlowLayout());
        jta1=new JTextArea(20,30);
        jta2=new JTextArea(20,30);
        jf.add(jta1); jf.add(jta2); //将2个组件添加到界面上
        jf.setLocation(100, 150);
        jf.setVisible(true);
        jf.pack();
        trda.start(); //两个线程都启动
        trdb.start();
    }
    
    
    public static void main(String args[])
    {
        ThreadExample frm=new ThreadExample();
    }
}


class thread1 extends Thread //线程类thread1
{

    public void run()
    {
        for(int i=1;i<=20;++i)
            ThreadExample.jta1.append(i+"、"+"xxx\n");
        
    }
}

class thread2 extends Thread //线程类thread2
{
    public void run()
    {
        for(int i=1;i<=20;i++)
            ThreadExample.jta2.append(i+"、"+"xxx\n");
    }
}

        第二个花了比较长的时间,主要的时间是花在了怎么动态显示时间到文本框中,经过各种度,还是没有度到怎么弄,最后还是通过实验指导书然后再结合自己的分析把它给完成了。方法就是在每次需要显示时间时重新得到Calendar一个实例,这样才可以保证每次刷时间的时候可以得到新的时间。源码如下:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.Date;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class Clock
{
    JFrame jf=new JFrame("Clock");
  	static JTextField displayTime=new JTextField(20);
	static JTextField displayTask=new JTextField(20);
	static JLabel timeWords=new JLabel("Time");
	static JLabel taskWords=new JLabel("Task");
	static Thread trda=new thread1(); //线程trda
	static Thread trdb=new thread2(); //线程trdb
	static Timer time=new Timer();
	
	public Clock() //构造函数,生成图形界面
	{
		jf.setLayout(null);
		jf.setLocation(100, 150);
		jf.setSize(300,400);

		displayTime.setLocation(100,20);
		displayTime.setSize(140,50);
		displayTime.setEditable(false);

		displayTask.setLocation(100,200);
		displayTask.setSize(140,50);
		displayTask.setEditable(false);

		timeWords.setLocation(45,20);
		timeWords.setSize(70,50);

		taskWords.setLocation(45,200);
		taskWords.setSize(70,50);

		jf.add(timeWords);
		jf.add(taskWords);

		jf.add(displayTime);
		jf.add(displayTask);

		jf.setVisible(true);
		jf.setResizable(true);
		trda.start();
		trdb.start();
	}
	
	public static void main(String args[])
	{
		Clock frm=new Clock();
	}

}


class thread1 extends Thread //线程类thread1
{
	static String cDate;
	static Calendar cal;
	
	public void run()
	{
		SimpleDateFormat date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		while(true)
		{
			try
			{
				cal=Calendar.getInstance();
				Thread.sleep(1000);
				cDate=date.format(cal.getTime());
				Clock.displayTime.setText(cDate);
				
				//提供条件给线程二运行,这个地方主要是用于测试,可以随便改 
                                if(cal.get(Calendar.MINUTE)==48&&cal.get(Calendar.SECOND)==0) 
				  Clock.trdb.run();
				if(cal.get(Calendar.MINUTE)==49&&cal.get(Calendar.SECOND)==0)
				  Clock.trdb.run();
			}
			catch(InterruptedException e)
			{
				System.out.println("异常"+e.toString());
			}
		}
		
	}
}

class thread2 extends Thread //线程类thread2
{
	static int m;

	public void run()
	{
		switch(m)
		{
			case 0:
				Clock.displayTask.setText("Nothing to do!");
				m++;
				break;
			case 1:
				Clock.displayTask.setText("Time to eat!");
				m++;
				break;
			case 2:
				Clock.displayTask.setText("Time to sleep!");
				m=0;
				break;
			default:
				Clock.displayTask.setText("Nothing to do!");
				break;
		}
	}
} 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值