广州大学java实验报告二

广州大学学生实验报告

开课实验室:   

学院

计算机科学与网络工程学院

年级、专业、班

姓名

学号

实验课程名称

Java语言实验

成绩

实验项目名称

实验十八 实验报告(二)题目

指导老师

  • 实验题目

实验任务 1

编写 Java 应用程序,实现以下登陆界面(需注意密码框输入的内容不显示明文):

实验任务 2

编写 Java 应用程序,实现以下界面:

实验任务 3

编写一个 Java 多线程应用程序,完成三个售票窗口同时出售 20 张票。具体要求如下:

• 票数要使用同一个静态值;

• 为保证不会出现卖出同一个票数,要 java 多线程同步锁。

设计思路:

• 创建一个站台类 Station,继承 Thread,重写 run 方法,在 run 方法里面执行售票操

作。售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完。

• 创建主方法调用类。

运行效果参考下图:

二、实验目的

• 熟悉 Java 图形界面的基本设计。

• 熟悉 Java 界面的菜单使用方法。

• 熟悉 Java 的多线程应用程序开发方法。

、程序设计

(1)任务1程序代码:

import javax.swing.*;

public class LoginFrame extends JFrame {

private JTextField txtUser;                      //文本框

private JPasswordField txtPwd;              //密码框

private JLabel lblUser,lblPwd;                 //标签

private JButton btnOK;                           //按钮

          public LoginFrame() {

init();

}

public void init() {

lblUser = new JLabel("用户名:");                   //给标签命名

lblPwd = new JLabel("密码:");

lblUser.setBounds(10, 20, 60, 20);               //设置标签初始位置和大小

lblPwd.setBounds(10, 50, 60, 20);

setLayout(null);

txtUser = new JTextField(10);

txtPwd = new JPasswordField(10);

txtUser.setBounds(60, 20, 300, 20);            //设置文本框初始位置和大小

txtPwd.setBounds(60,50,300,20);               //设置密码框初始位置和大小

btnOK = new JButton("确定");

btnOK.setBounds(150, 80, 90, 20);            //设置按钮初始位置和大小

add(lblUser);

add(lblPwd);

add(txtUser);

add(txtPwd);

add(btnOK);

setBounds(1,1,400,200);

                 setTitle("                                        登陆");

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

LoginFrame lf = new LoginFrame();

}

}

(2)任务2程序代码:

import javax.swing.*;

class WindowMenu extends JFrame{

JMenuBar menubar;

JMenu menuFile,menuFormat,menuHelp;  //菜单

JMenu ChineseItem,baseItem;      //子菜单

JMenuItem binary,octonary,decimal;  //菜单项

public WindowMenu(String s,int x,int y,int w,int h) {

init(s);

setLocation(x,y);

setSize(w,h);

setVisible(true);



}

void init(String s) {

setTitle(s);                   //设置窗口的标题

menubar = new JMenuBar();

menuFile=new JMenu("File");

menuFormat = new JMenu("Format");  //用menuFormat做根菜单

menuHelp=new JMenu("Help");

ChineseItem=new JMenu("中文");

baseItem=new JMenu("进制");

binary=new JMenuItem("二进制");

octonary=new JMenuItem("八进制");

decimal=new JMenuItem("十进制");

menuFormat.add(ChineseItem);  //为菜单添加子菜单

menuFormat.add(baseItem);

baseItem.add(binary);         //为子菜单添加菜单项

baseItem.add(octonary);

baseItem.add(decimal);

menubar.add(menuFile);

menubar.add(menuFile);

menubar.add(menuFile);        //为菜单条添加菜单

menubar.add(menuFormat);

menubar.add(menuHelp);

setJMenuBar(menubar);         //在窗口中放置菜单条

}

}

public class Menu {

public static void main(String args[]) {

WindowMenu win=new WindowMenu("                                Menu",20,30,400,200);

}

}

(3)任务3程序代码:

public class SaleTickets {

public static void main(String[] args) {

// TODO Auto-generated method stub

Station thread1 = new Station();

Station thread2 = new Station();

Station thread3 = new Station();

thread1.setName("窗口1");

thread2.setName("窗口2");

thread3.setName("窗口3");

thread1.start();

thread2.start();

thread3.start();

}

}

class Station extends Thread{  //继承Thread

private static int ticketNums = 1;  //票数使用同一个静态值

static boolean flag = true;

@Override

public void run() {  //重写run方法

while(flag) {

buy();

}

}

private synchronized static  void  buy() {  //同步锁

if(ticketNums>20) {

    flag = false;

return;

}

//模拟延时

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()+"卖出了第"

+ticketNums+++"张票");

if(ticketNums>20) {

    System.out.println("票卖完了!");

}

}

}

四、程序运行与测试

(1)任务1运行的结果如图1所示。

图1 任务1运行结果

(2)任务2运行的结果如图2所示。

图2 任务2运行结果

(3)任务3运行的结果如图3所示。

图3 任务3运行结果

五、实验总结与心得

任务1:

(1)任务1需要虽然只要求做出一个简单的登录界面,但是在实验过程中,需要我们自己不断调试文本标签、文本框、按钮的大小及其位置的参数,以实验任务要求的界面。

任务2:

  1. 任务2其实就是要求我们按照目标图片来设计窗口的菜单、子菜单、菜单项等。我们只需按照逻辑设计,然后像老师说的那样“拼积木”式地将其逐一组装即可。
  2. 需要注意的是:菜单本身也是一个菜单项,当把菜单作为菜单项添加到某个菜单中时,这样子就创建了一个子菜单,即任务2中的“进制”。

任务3:

  1. 一开始写完程序后运行该程序,结果一直是某个窗口一直在售卖票,但是程序检查后发现并没有错误。直到按照老师教的方法:通过任务管理器来设置eclipse的相关性,修改为只有一个处理器来运行该程序,才得到了正确的实验结果。

(2)实验过程中,一开始想要在卖出第20张票后输出“票卖完了”。但是总是出现各种错误,如:卖出第20张票后输出了两次“票卖完了”、还没卖票就输出了“票卖完了”。经过实验检验,发现是该语句

if(ticketNums>20) {

    System.out.println("票卖完了!");

}

的位置放错了,不应该放在别的位置,只能放在如图所示的位置才能得到正确运行结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值