2 java小程序
APPLET程序
图 2.2 Java Applet的下载执行过程
从这个过程中可以看出,Java Applet的字节码程序最早 是保存在 Web 服务器上的,而它的运行过程则是在下载到 本地后在本地机上完成的,这实际上就是网络应用程序的 发布过程。 当 Applet 程序需要修改或维护时只要改动服务器一处的 程序即可。 当然,这样做的前提条件是Applet的字节码程序可以在网 络上的任何一台机器上顺利地运行,而这种跨平台的要求, 根据前面的介绍,已由Java的解释器机制加以保证和实现 。
当浏览器执行 Applet 程序时,会自动产生两个实例(两个对 象),一个是系统类 Applet 的子类的实例,另一个是系统类 Graphics的实例。前者调用Applet的子类的实例中paint方法, 后者作为实际参数赋值给paint方法中的形式参数g。
g 是系统类 Graphics 的一个对象,它代表了 Web 页面上 Applet程序的界面区域的背景,调用g的方法来显示字符串, 就是在当前Applet程序的界面区域的背景上显示字符串。 虽然Java Application和Java Applet在运行方式上有很大 的不同,但是它们遵循相同的 Java 语言的语法规则,所以 编译时也使用完全相同的编译工具。 例如: javac MyJavaApplet.java 编译的结果在当前目录下将生成一个以源代码中的类名 MyJavaApplet命名的字节码文件MyJavaApplet.class。
(4)当用户编写的 Applet程序编译通过后,就可以使WWW 浏览器在解释执行 HTML文件时,调用该 Applet 程序。通过 自动执行用户改写过的成员方法,例如paint方法,来实现用 户程序预期的功能。
系 统 类 Applet 中 已 经 定 义 好 的 成 员 方 法 还 有 , init();start();stop();destroy(); 它们与 paint 方法使用的方式类 似。 paint 方法与其他的一些 Applet 中的方法一样,能够被 WWW浏览器识别和在恰当的时刻自动调用。
Java做的一个小程序-随机点名器
Java做的一个小程序-随机点名器介绍随机点名器是一款使用Java编写的小程序,它主要用于在学生课堂上随机抽取学生姓名进行点名。
该程序可以通过命令行方式运行,而且它的使用非常简单,不需要任何的专业技能与知识。
功能特点随机点名器的主要功能是在学生课堂上进行学生姓名的随机抽取,以帮助老师完成课堂管理工作。
程序的具体功能特点如下:•支持添加学生姓名:程序可以通过用户输入学生姓名的方式,将其添加到学生库中。
•支持删除学生姓名:用户可以对已存在的学生进行删除操作。
•支持随机点名:程序可以随机抽取学生姓名,以完成点名的操作。
•支持列表显示:程序可以展示所有的学生姓名列表,以供用户查看。
使用说明系统要求随机点名器使用Java语言编写,因此用户需要先安装Java运行环境。
具体要求如下:•操作系统:Windows、Linux、MacOS等•Java版本:JRE 1.8或以上版本安装方法1.下载程序压缩包。
2.解压缩到用户指定的目录。
3.运行“run.bat”文件(Windows平台)或“run.sh”文件(Linux/MacOS平台)。
使用方法1.添加学生姓名:在命令行窗口中输入“add”命令,然后输入学生姓名进行添加。
2.删除学生姓名:在命令行窗口中输入“delete”命令,然后输入需要删除的学生姓名。
3.随机点名:在命令行窗口中输入“random”命令,程序将随机抽取一个学生姓名进行点名。
4.显示学生列表:在命令行窗口中输入“list”命令,程序将展示所有已经添加的学生姓名。
技术实现技术框架随机点名器采用Java语言编写,主要使用了JDK中的标准库,使用了Collection接口中的List、Set集合类、Random类等。
算法实现随机点名的算法实现主要通过Java中的Random类实现,随机整数范围为0到学生数量-1,通过集合类的索引访问随机抽取的学生姓名。
代码实现```Java import java.util.*;public class RandomPicker { private List students;public RandomPicker() {students = new ArrayList<String>();}public void add(String name) {students.add(name);}public void delete(String name) {students.remove(name);}public String random() {Random random = new Random();int index = random.nextInt(students.size());return students.get(index);}public void list() {int n = 1;for(String student : students) {System.out.println((n++) + \。
java开发小程序登录功能
java开发⼩程序登录功能整体流程如下:- 1.获取code- 2.⽤步骤1获取到的临时code换取⽤户唯⼀标识OpenId和会话密钥 session_key- 3.获取⽤户⼿机号,进⾏登录请求参数:请求参数:属性类型默认值必填说明appid string是⼩程序 appIdsecret string是⼩程序 appSecretjs_code string是登录时获取的 codegrant_type string是授权类型,此处只需填写 authorization_code 返回值:属性类型说明openid string⽤户唯⼀标识session_key string会话密钥unionid string⽤户在开放平台的唯⼀标识符,在满⾜ UnionID 下发条件的情况下会返回,详见。
errcode number错误码errmsg string错误信息开发前准备(必须)appid:wx4c1d53****7a671appsecret:fc9f99c08dcb2a0****eb26376c65eae⼩程序代码:login.js// pages/login/login.wxml.jsconst app = getApp();Page({/*** 页⾯的初始数据*/data: {// 判断⼩程序的API,回调,参数,组件等是否在当前版本可⽤。
canIUse: wx.canIUse('button.open-type.getPhoneNumber'),wechat: '微信快捷登录',isShow: false},/*** ⽣命周期函数--监听页⾯加载*/onLoad: function (options) {// 从缓存中取⼿机号console.log("获取⼿机号!")try {var value = wx.getStorageSync('phoneNumber')if (value) { // 说明已登录跳转页⾯console.log("获取缓存:"+value)wx.navigateTo({url: '../login?param=' + value})}else{// 未登录显⽰微信授权页⾯this.setData({isShow: true})}} catch (e) {}// 解决第⼀次获取⼿机号失败问题wx.login({success: res => {if(res.code){console.log("code->", res.code)}}})},// 0.获取⼿机号授权getPhoneNumber: function(e) {// ⽤户拒绝授权if(e.detail.errMsg == "getPhoneNumber:fail user deny") {wx.showToast({icon: "none",title: '请允许获取⼿机号,否则功能不可⽤!',})return}// console.log("e->detail", e.detail)/// ⽤户允许授权// console.log("iv->", e.detail.iv); //包括敏感数据在内的完整⽤户信息的加密数据,需要解密// console.log("encryptedData->", e.detail.encryptedData); //加密算法的初始向量,解密需要⽤到/// 获取⼿机号// 1.获取临时登录凭证codewx.login({success: res => {if(res.code){this.code = res.code;console.log("code->", res.code)console.log("encryptedData->", encodeURIComponent(e.detail.encryptedData))console.log("iv->", e.detail.iv)this.getSessionKey(res.code, e.detail.encryptedData, e.detail.iv);}}})},// 2.访问登录凭证校验接⼝获取session_key(后续改成后台实现)getSessionKey: function(js_code, encryptedData, iv) {// 3. 解密获取⼿机号wx.request({url: 'http://localhost:8082/wechat/appletLogin',data: {'encryptedData': encodeURIComponent(encryptedData),//需要进⾏编码'iv': iv,'jscode': js_code},method: 'POST',header: {'content-type': 'application/json'}, // 设置请求的 headersuccess: function(data2) {console.log(data)if(data.resultCode == 200) {if(er.phone==undefined){// 获取⼿机号失败跳转到常规⽤户登录页⾯(通过webview)wx.navigateTo({url: '⽤户登录页'})return}// 存储数据到缓存wx.setStorage({key:"phoneNumber",data:er.phone})// 4.跳转页⾯}},fail: function(err) {console.log(err);wx.showToast({icon: "none",title: '获取⼿机号失败,请重试!',})}})},/*** ⽣命周期函数--监听页⾯初次渲染完成*/onReady: function () {},/*** ⽣命周期函数--监听页⾯显⽰*/onShow: function () {},/*** ⽣命周期函数--监听页⾯隐藏*/onHide: function () {},/*** ⽣命周期函数--监听页⾯卸载*/onUnload: function () {},/*** 页⾯相关事件处理函数--监听⽤户下拉动作*/onPullDownRefresh: function () {},/*** 页⾯上拉触底事件的处理函数*/onReachBottom: function () {},/*** ⽤户点击右上⾓分享*/onShareAppMessage: function () {}})login.json{"usingComponents": {}}login.wxml<!--pages/login.wxml--><view class="modal-mask" catchtouchmove="preventTouchMove" wx:if="{{isShow}}"></view> <view class="modal-dialog" wx:if="{{isShow}}"><view class="modal-content"><view><image src='../images/show.png' class='show'></image></view><!-- <view>绑定⼿机号</view><view>请先绑定⼿机号在进⾏此操作</view> --><button class="show" type="primary" lang="zh_CN"open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber" >微信⽤户⼀键登录</button></view></view>login.wxss/* pages/login/login.wxml.wxss */.show{display: block;border-radius: 8rpx;margin: 20rpx 20rpx 20rpx 20rpx;font-size: 35rpx;}.container{position: fixed; /*关键属性,设置为fixed*/display: flex;flex-direction: column;width: 100%;height: 100%;}后端代码WxLoginController.java@RestController@RequestMapping("/wechat")public class WxLoginController {private Logger logger = LoggerFactory.getLogger(WxLoginController.class);@AutowiredUserDao userDao;@Value("${wechat.appid}")private String appid;@Value("${wechat.appsecret}")private String appsecret;private Map<String, Object> userMap = new HashMap<>();public ResultBean appletLogin(String encryptedData, String iv, String jscode) {System.out.println(encryptedData);ResultBean resultBean = new ResultBean();// jscodeif (StringUtils.isEmpty(jscode)) {resultBean.setResultCode(-10001);resultBean.setResultMessage("鉴权失败!");return resultBean;}// signif (StringUtils.isEmpty(encryptedData)) {resultBean.setResultCode(-10001);resultBean.setResultMessage("鉴权失败!");return resultBean;}if(StringUtils.isBlank(iv)) {resultBean.setResultCode(-10002);resultBean.setResultMessage("鉴权失败!");return resultBean;}// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;String url =WxContants.url.replace(WxContants.APPID, appid).replace(WxContants.SECRET, appsecret).replace(WxContants.JSCODE, jscode);try {// 创建uriURIBuilder builder = new URIBuilder(url);URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 执⾏请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();}// 解析jsonJSONObject jsonObject = (JSONObject) JSONObject.parse(resultString);String session_key = jsonObject.getString("session_key");String openid = jsonObject.getString("openid");System.out.println("session_key:"+session_key + ",openid:"+openid);if (StringUtils.isEmpty(session_key)) {resultBean.setResultCode(-10003);resultBean.setResultMessage("获取sessionkey失败!");return resultBean;}// 解码try {encryptedData = URLDecoder.decode(encryptedData,"UTF-8");} catch (UnsupportedEncodingException e) {logger.error("encryptedData,decode失败!", e);resultBean.setResultCode(-10003);resultBean.setResultMessage("encryptedData,decode失败!");return resultBean;}String decryptData = WechatDecryptDataUtil.decryptData(encryptedData, session_key, iv); JSONObject userInfo = JSONObject.parseObject(decryptData);// 存⼊redis+数据库,判断是否存在redis中,存在直接从redis返回// 本地使⽤Map模拟if (!userMap.containsKey(openid)) {// 判断⽤户是否存在系统中String phoneNumber = userInfo.getString("phoneNumber");User user = userDao.findByPhone(phoneNumber);if (user == null) {resultBean.setResultCode(200);resultBean.setResultMessage("此⽤户不存在,请先注册!");return resultBean;}user.setOpenId(openid);userDao.save(user);userMap.put(openid, user);}User user = (User) userMap.get(openid);resultBean.setResultCode(200);resultBean.setResultMessage("成功!");resultBean.setData(user);return resultBean;}}UserDao.javapublic interface UserDao extends JpaRepository<User, Long> {User findByPhone(String phone);User findByOpenId(String openId);}User.java@Entity@Table(name = "user")public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String openId;private String phone;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getOpenId() {return openId;}public void setOpenId(String openId) {this.openId = openId;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}}WechatDecryptDataUtil.javapublic class WechatDecryptDataUtil {private static Logger logger = LogManager.getLogger(WechatDecryptDataUtil.class);public static void main(String[] args) {String result = decryptData("BLY05rL1qLzGdqn+m4s4KfnM9CbMCm2sTZmgIcUJUpoOVeZkKKYh06ATVm2BgX8HUsH1a93811fhwr70MTh2Pk2qw9rPBzvos3husUJdVfaZgBk3Afp6wNFS0/kcoyt+7q2eMrIHMe6wkc4J0hgbbkxdUwZag/pyKXwe4pUzSQfta7dfBHy3DLu+REvwHiDNf "C9Z59YjFkCDT8+9NQ3OxcA==","oOWTpbZ80evG/GQqRdUu3w==");System.out.println("result = " + result);}public synchronized static String decryptData(String encryptDataB64, String sessionKeyB64, String ivB64) {String res = null;try {res = new String(decryptOfDiyIV(Base64.decode(encryptDataB64),Base64.decode(sessionKeyB64),Base64.decode(ivB64)));} catch (Exception e) {logger.error("encryptDataB64:"+encryptDataB64+"\n"+"sessionKeyB64:"+sessionKeyB64+"\n"+"ivB64:"+ivB64);}return res;}private static final String KEY_ALGORITHM = "AES";private static final String ALGORITHM_STR = "AES/CBC/PKCS7Padding";private static Key key;private static Cipher cipher;private static void init(byte[] keyBytes) {// 如果密钥不⾜16位,那么就补⾜. 这个if 中的内容很重要int base = 16;if (keyBytes.length % base != 0) {int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);keyBytes = temp;}// 初始化Security.addProvider(new BouncyCastleProvider());// 转化成JAVA的密钥格式key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);try {// 初始化ciphercipher = Cipher.getInstance(ALGORITHM_STR, "BC");} catch (Exception e) {e.printStackTrace();}}/*** 解密⽅法** @param encryptedData 要解密的字符串* @param keyBytes 解密密钥* @param ivs ⾃定义对称解密算法初始向量 iv* @return 解密后的字节数组*/private static byte[] decryptOfDiyIV(byte[] encryptedData, byte[] keyBytes, byte[] ivs) {byte[] encryptedText = null;init(keyBytes);try {cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivs));encryptedText = cipher.doFinal(encryptedData);} catch (Exception e) {e.printStackTrace();}return encryptedText;}}WxContants.javapublic interface WxContants {String APPID = "APPID";String SECRET = "SECRET";String JSCODE = "JSCODE";String TRADE_TYPE = "JSAPI";String url = "https:///sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code";}。
推金币Java小程序(Java)
推金币Java小程序(Java)推金币游戏是一种常见的娱乐方式,通过这个小程序,我们可以学习如何使用Java语言来实现一个简单的推金币游戏。
本文将介绍推金币游戏的规则以及Java代码的实现。
一、游戏规则推金币游戏是一个单人游戏,游戏中有一堆金币,玩家的目标是通过不断推动金币使其从堆中掉落。
游戏的规则如下:1. 开始时,堆中有一定数量的金币。
2. 玩家每次可以选择推动金币的个数,推动的个数范围是1到3个金币。
3. 玩家和电脑交替进行推金币的操作,直到堆中的金币被推空。
4. 最后将判断推完金币时,是玩家推金币的次数奇数还是偶数,奇数次则玩家获胜,偶数次则电脑获胜。
二、Java代码实现下面是使用Java语言实现推金币小程序的代码:```javaimport java.util.Scanner;public class PushCoinGame {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int coins = 10; // 初始金币数量int count = 0; // 推金币次数while (coins > 0) {// 玩家推金币System.out.print("请输入你要推的金币个数(1-3个):"); int num = scanner.nextInt();if (num < 1 || num > 3 || num > coins) {System.out.println("输入不合法,请重新输入!");continue;}coins -= num;count++;// 判断堆中金币是否已经被推空if (coins <= 0) {break;}// 电脑推金币int compNum = 4 - num; // 电脑总是推剩余金币个数和为4的倍数的数量coins -= compNum;count++;}// 判断胜负if (count % 2 == 0) {System.out.println("电脑获胜!");} else {System.out.println("玩家获胜!");}}}```三、小结通过以上代码,我们实现了一个简单的推金币游戏的Java小程序。
java日历小程序
java日历小程序简介:Java日历小程序是一个基于Java语言开发的工具,用于显示和管理日期和时间。
它提供了一种简单而直观的方式来查看、创建和编辑日历事件,并提供了一些额外的功能,如提醒、重复事件和时间段的计算等。
本文将详细介绍Java日历小程序的功能、使用方法和设计原理。
功能:1. 显示日历:Java日历小程序可以显示当前月份的日历,并以日、周或月的形式展示。
用户可以通过界面上的上下翻页按钮切换月份,方便查看不同日期的日历。
2. 创建和编辑事件:用户可以通过Java日历小程序创建新的日历事件,并为每个事件指定标题、日期、时间和地点等详细信息。
程序还提供了事件编辑功能,允许用户修改已有事件的信息。
3. 提醒功能:Java日历小程序可以设置事件的提醒功能,提醒用户在指定的时间前提醒。
用户可以选择在事件开始前几分钟、几小时或几天提醒,并可以自定义提醒方式,如弹窗、声音或邮件通知等。
4. 重复事件:用户可以为事件设置重复功能,使事件在指定的日期间隔内重复发生。
可以选择每天、每周、每月或每年重复,并可以设置重复的结束日期。
5. 时间段计算:Java日历小程序可以计算两个日期之间的时间段,如计算两个事件之间的天数、小时数或分钟数等。
用户可以选择计算方式,并获取精确的时间段结果。
使用方法:1. 下载和安装:用户可以从官方网站上下载Java日历小程序的安装包,然后按照安装向导进行安装。
安装完成后,用户可以在桌面或开始菜单中找到程序的快捷方式。
2. 打开程序:双击程序的快捷方式,Java日历小程序将启动并显示当前月份的日历。
用户可以通过界面上的按钮和菜单来使用各种功能。
3. 创建事件:用户可以点击界面上的“添加事件”按钮,弹出一个对话框,输入事件的详细信息,如标题、日期、时间和地点等。
点击“确定”按钮后,事件将被创建并显示在日历上。
4. 编辑事件:用户可以在日历上点击已有的事件,弹出一个对话框,允许用户修改事件的信息。
java课程设计贪吃蛇小程序 附代码(2)
public void keyPressed(KeyEvent e) {//按键响应
int keyCode=e.getKeyCode();
if(stat==1) switch(keyCode){
case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;
游戏主界面模块:
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、游戏速度控制按钮、暂停游戏按钮、重新开始游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。
游戏控制模块:
这个模块是游戏的中心环节,主要完成控制游戏的速度、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。
性能:
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
自定义类说明
图3-1程序运行图
当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束,此时得分为0。如果想重新开始即按ENTER或S键,运行结果如图3-2所示:
图3-2程序结束图
程序异常处理
在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常,
2、课程设计的具体要求:
(1)界面美观大方,操作简单便捷,按键布局美观。
猜成语Java小程序(Java)
猜成语Java小程序(Java)一、引言成语是中华文化的瑰宝,它们凝练、精辟地表达了智慧和人生哲理。
为了增进对成语的理解和记忆,并加深对Java编程语言的应用,我们设计了一个猜成语的小程序。
这个小程序运用Java编程语言实现,具有交互性和趣味性,可以提供一种有趣的学习方法和娱乐方式。
二、程序设计方案1. 界面设计为了使程序界面美观整洁,我们使用Java的图形用户界面库(Swing)进行设计。
在程序的主界面上,我们引入一幅适应窗口大小的背景图片,使整个界面富有元素,增加用户体验感。
2. 成语数据集为了实现成语的随机猜测,我们需要一个成语数据集。
我们选择了一个包含多个常用成语的文本文件(idioms.txt)作为数据源。
程序在启动时从该文件中读取成语,并将其存储在一个ArrayList对象中。
3. 游戏逻辑实现程序首先从成语数据集中随机选择一个成语作为答案,并将其打乱顺序显示在界面上。
用户需要通过输入成语的正确顺序来猜测答案。
程序提供一个文本框供用户输入,用户每输入一个成语后,程序会给出反馈,告知用户该成语是否正确。
4. 成功判断和反馈当用户输入的成语顺序与答案一致时,程序将判断猜测正确,弹出一个提示框,告知用户回答正确。
同时,程序还会显示出答案的含义和出处,增强用户对成语的理解。
若用户输入的成语顺序与答案不一致,则程序会给出相应的错误提示,提示用户继续猜测,直到猜测正确为止。
三、程序运行展示(这里可以插入几张程序运行截图,展示整个程序的界面和交互过程)四、程序实现过程1. 导入所需库为了使程序实现图形用户界面,我们需要导入Java的Swing库。
在程序开始的地方,添加以下导入语句:```import javax.swing.*;```2. 程序主类创建一个主类,继承JFrame类,并在主类中实现界面的布局和事件监听器的设置。
```public class GuessIdiom extends JFrame{// 界面布局和事件监听器设置的代码// ...}```3. 界面设计在主类中添加一个方法,用于设置界面的布局和组件。
Java后端微信小程序支付demo(网上说的坑里面基本上都有)
Java后端微信⼩程序⽀付demo(⽹上说的坑⾥⾯基本上都有)Java 后端微信⼩程序⽀付⼀、遇到的问题1. 商户号该产品权限未开通,请前往商户平台>产品中⼼检查后重试2.签名错误3.已经调起微信统⼀下单接⼝,可以拿到预⽀付ID,但是前端⽀付的时候出现⽀付验证签名失败⽹上的问题基本上就是这三类下⾯说解决⽅案。
第⼀个问题:商户号的问题,微信app⽀付与微信⼩程序⽀付的商户号不同,微信app内⽀付与微信开放平台内的商户号绑定,微信⼩程序⽀付是与微信公众平台内的商户号绑定。
第⼆个问题:签名错误,第⼀次签名需要的appid mchid key 分别对应的是⼩程序的appid、微信公众平台绑定的商户号、以及商户平台的密钥(重要的事情说三遍:商户平台的!商户平台的!商户平台的!)。
这⾥重点说下商户平台的密钥(当时就是因为密钥的问题耽误了不少时间):具体请看图(商户平台--->账户中⼼--->API安全---->设置密钥)第三个问题:⽀付验证签名失败这个就得需要严格执⾏⼩程序⽀付⽂档中的⽣成签名的规则。
参数字段⼤⼩写、顺序⼀定要对(切记,切记,切记)如果能把以上都注意到了,那基本上没什么问题了。
下⾯是我⾃⼰写的demo供⼤家参考,有什么问题可以留⾔。
⼆、demo 事例1.下载商户的证书(在问题2的截图中已经展⽰下载的位置)放在resources下的cert⽬录下(cert⽬录需要⾃⼰⼿动建)2.实现微信的 WXPayConfig接⼝1package mon;23import com.github.wxpay.sdk.WXPayConfig;4import mons.io.IOUtils;56import java.io.ByteArrayInputStream;7import java.io.InputStream;89public class MiniprogramConfig implements WXPayConfig{1011private byte[] certData;1213public MiniprogramConfig() throws Exception {14 InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("cert/miniProgram/apiclient_cert.p12"); 15this.certData = IOUtils.toByteArray(certStream);16 certStream.close();17 }1819 @Override20public String getAppID() {21return "wx6db448a73f8a6666";22 } //⼩程序appid2324 @Override25public String getMchID() {26return "1500669999";27 } //商户号2829/** 商户平台-账户中⼼-API安全中的密钥 */30 @Override31public String getKey() {32return "1add1a30ac87aa77yyy2db72f57a237577777";33 }3435 @Override36public InputStream getCertStream() {37return new ByteArrayInputStream(this.certData);38 }3940 @Override41public int getHttpConnectTimeoutMs() {42return 0;43 }4445 @Override46public int getHttpReadTimeoutMs() {47return 0;48 }49 }3.调⽤微信统⼀下单接⼝并且实现签名1private Map<String, String> createMiniProgramTradePay(WxpayTradeAppPayModel model,String notifyUrl) throws Exception {2 MiniprogramConfig config = new MiniprogramConfig();34 WXPay wxpay = new WXPay(config);56 Map<String, String> data = new HashMap<>();7 data.put("appid",config.getAppID());8 data.put("mch_id",config.getMchID());9 data.put("body",model.getBody());10 data.put("out_trade_no", model.getOutTradeNo());11 data.put("device_info", "");12 data.put("fee_type", "CNY");13 data.put("total_fee", model.getTotalFee());14 data.put("spbill_create_ip", "127.0.0.1");15 data.put("notify_url", notifyUrl);16 data.put("trade_type", "JSAPI");17 data.put("openid",model.getOpenId());18// data.put("nonce_str","1add1a30ac87aa2db72f57a2375d8fec");19 String sign = WXPayUtil.generateSignature(data, config.getKey());20 data.put("sign",sign);2122 Map<String, String> resp = wxpay.unifiedOrder(data);23if ("SUCCESS".equals(resp.get("return_code"))) {24//再次签名25/** 重要的事情说三遍⼩程序⽀付所有的字段必须⼤写驼峰模式严格按照⼩程序⽀付⽂档26 *https:///wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3#27 * ******* 我当初就因为timeStamp中S没⼤写弄了3个⼩时 **********28 * */29 Map<String, String> reData = new HashMap<>();30 reData.put("appId", config.getAppID());31 reData.put("nonceStr", resp.get("nonce_str"));32 String newPackage = "prepay_id=" + resp.get("prepay_id");33 reData.put("package", newPackage);34 reData.put("signType","MD5");35 reData.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));3637 String newSign = WXPayUtil.generateSignature(reData, config.getKey());38 resp.put("paySign",newSign);39 resp.put("timeStamp", reData.get("timeStamp"));40return resp;41 } else {42throw new FrankyErrorException(resp.get("return_msg"));43 }4445 }说明:这⾥只是说明⼩程序⽀付与微信app内⽀付的不同和遇到的问题,有关⾥⾯⽤到微信的SDK,请看上⼀篇⽂章。
java解析小程序码
java解析小程序码小程序码是微信小程序的一种推广方式,用户可以通过扫描小程序码快速打开对应的小程序。
而在Java开发中,我们可以使用一些库来解析小程序码,从而获取相关的信息。
首先,我们需要引入相关的库。
在Java中,有很多开源的库可以用来解析小程序码,比如zxing、javase、jbarcode等。
这些库都提供了丰富的API,可以方便地解析小程序码。
接下来,我们需要获取小程序码的图片。
可以通过网络请求或者本地文件的方式获取小程序码的图片。
如果是网络请求,可以使用Java的HttpURLConnection或者HttpClient等库来发送请求并获取图片数据。
如果是本地文件,可以使用Java的FileInputStream来读取文件数据。
获取到小程序码的图片后,我们就可以使用相应的库来解析了。
以zxing为例,我们可以使用它提供的MultiFormatReader类来解析小程序码。
首先,我们需要将图片数据转换成Bitmap对象,然后将Bitmap对象转换成BinaryBitmap对象,最后使用MultiFormatReader的decode方法来解析。
解析后,我们可以获取到小程序码的内容。
小程序码的内容一般是一个URL,可以通过解析后的结果来获取。
我们可以使用正则表达式或者字符串处理的方式来提取URL。
除了获取小程序码的内容,我们还可以获取其他的信息,比如小程序码的宽度、高度、颜色等。
这些信息可以通过解析后的结果来获取。
在解析小程序码的过程中,我们还需要注意一些异常情况的处理。
比如图片解析失败、解析结果为空等情况,我们需要进行相应的处理,以保证程序的稳定性。
总结一下,Java解析小程序码可以通过引入相关的库来实现。
我们可以获取小程序码的图片,然后使用相应的库来解析。
解析后,我们可以获取小程序码的内容以及其他的信息。
在解析过程中,我们需要注意异常情况的处理,以保证程序的稳定性。
通过Java解析小程序码,我们可以方便地获取小程序码的相关信息,为小程序的推广和使用提供便利。
Java2实用教程习题答案__第三版__耿祥义_清华大学出版社
Java2实用教程(第三版)课后习题参考答案第1章 Java入门1. 开发与运行Java程序需要经过哪些主要步骤和过程?答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为.java(2)编译Java源文件:使用Java编译器(javac.exe)。
得到字节码文件*.class(3)运行Java程序:Java应用程序使用Java解释器(java.exe)执行字节码文件;Java小应用程序使用支持Java标准的浏览器来执行。
2. 怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?答:①应用程序必须有main方法,这个方法是程序执行的入口。
小应用程序没有main方法。
②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。
3. Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的?答:①Java程序由类组成。
②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java;有多个类时,如果有public类(最多一个),源文件名与public类的类名相同,拓展名是.java;没有public类,源文件名与任何一个类的类名相同即可,拓展名为.java。
小应用程序:源文件名与主类的类名相同,拓展名是.java。
4. 在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。
如果不使用codebase属性,小程序的字节码文件必须和运行它的HTML文件在同一目录中。
编写一个小程序并将小程序的字节码存放在某个目录中,比如C:\5000;把运行该小程序的HTML文件(注意其中的codebase属性): <applet code=你的小程序的字节码 width=200 height=300 codebase=C:\5000></applet>存放在另一个目录中。
编写java小程序的示例代码
深入学习Java编程:示例代码演示引言Java编程语言是世界上最流行的编程语言之一,它的广泛应用范围包括Web应用程序、移动应用、嵌入式系统和大数据处理。
无论你是初学者还是有经验的开发者,本文将为你提供一个深入学习Java编程的好起点。
我们将通过示例代码演示Java的基本概念,帮助你逐步理解这门语言。
第一步:Hello World编写Java程序的第一步通常是创建一个简单的Hello World程序。
这个程序将向你展示如何编写基本的Java代码、编译它并运行它。
下面是一个Hello World示例代码:public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}上述代码创建了一个名为HelloWorld的Java类,其中包含一个名为main的方法。
main方法是Java程序的入口点,它会在程序运行时首先执行。
在main方法中,我们使用System.out.println来输出文本到控制台。
第二步:变量和数据类型在Java中,你可以声明各种不同类型的变量来存储数据。
下面是一些常见的数据类型和如何声明变量的示例:int myNumber = 42; // 整数double myDouble = 3.14; // 双精度浮点数boolean isJavaFun = true; // 布尔值String greeting = "Hello, Java!"; // 字符串在上述示例中,我们声明了整数、双精度浮点数、布尔值和字符串类型的变量。
你可以根据需要选择合适的数据类型来存储不同类型的数据。
第三步:条件语句和循环Java提供了条件语句和循环结构,允许你控制程序的流程和执行重复的操作。
以下是一些示例代码:条件语句(if-else)int age = 20;if (age >= 18) {System.out.println("你已经成年了");} else {System.out.println("你还未成年");}循环(for循环)for (int i = 1; i <= 5; i++) {System.out.println("循环迭代次数:" + i);}第四步:函数和方法在Java中,你可以创建自己的函数或方法,以便组织和重用代码。
微信小程序后端(java)开发流程的详细步骤
微信⼩程序后端(java)开发流程的详细步骤微信⼩程序后端开发流程根据官⽹总结为两个步骤1、前端调⽤ wx.login 返回了code,然后调⽤wx.getUserInfo获取到⽤户的昵称头像微信⼩程序后端接⼝开发controller层public class OauthController {@Autowiredprivate WeChatService weChatService;/*** 微信授权⽤js_code换取openId* @param code* @return*/@GetMapping("/code2Session")public BaseResponse code2Session(String code) {("code2Session,code={}", code);if (StringUtil.isEmpty(code)) {return BaseResponse.buildFail("参数异常");}Code2SessionResponse res = weChatService.code2Session(code);("code2Session,res={}", res);if (!res.isSuccess()) {return BaseResponse.buildFail(res.getErrCode(), res.getErrMsg());}return BaseResponse.buildSuccess(res);}/*** 解密获取⼿机号* @param request* @param response* @param param* @return*/public BaseResponse decryptGetPhone(HttpServletRequest request, HttpServletResponse response,@RequestBody OauthParam param) {if (!StringUtil.isEmpty(param.getOpenId())) {//微信授权登录String sessionKey = weChatService.getSessionKey(param.getOpenId());if (StringUtil.isEmpty(sessionKey)) {return BaseResponse.buildFail("会话不存在");}Sha1Utils sha = new Sha1Utils();// 获取⽤户信息log.debug("微信登陆 sessionKey = {}", sessionKey);String userInfoStr = sha.decryptWXAppletInfo(sessionKey, param.getEncryptedData(), param.getIv());if (StringUtil.isEmpty(userInfoStr)) {return BaseResponse.buildFail("⽆法获取⽤户信息");}JSONObject json = JSONObject.parseObject(userInfoStr);//绑定微信的⼿机号String tel = json.getString("purePhoneNumber");Assert.isTrue(!StringUtils.isEmpty(tel), "⽆法获取⽤户⼿机号");BaseResponse baseResponse=new BaseResponse();baseResponse.setResultInfo(tel);baseResponse.setState(0);return baseResponse;}}}接⼝public interface WeChatService {/*** ⽤code换取openid** @param code* @return*/Code2SessionResponse code2Session(String code);/*** 获取凭证** @return*/String getAccessToken();/*** 获取凭证** @param isForce* @return*/String getAccessToken(boolean isForce);String getSessionKey(String openId);}实现类public class WeChatServiceImpl implements WeChatService {//获取配置⽂件数据@Value("${wechat.miniprogram.id}")private String appId;@Value("${wechat.miniprogram.secret}")private String appSecret;@Referenceprivate SysUserService sysUserService;@Overridepublic Code2SessionResponse code2Session(String code) {String rawResponse = HttpClientUtil.get(String.format(WechatConstant.URL_CODE2SESSION, appId, appSecret, code));("rawResponse====={}", rawResponse);Code2SessionResponse response = JSON.parseObject(rawResponse, Code2SessionResponse.class); if (response.isSuccess()) {cacheSessionKey(response);}return response;}private void cacheSessionKey(Code2SessionResponse response) {RedisCache redisCache = RedisCache.getInstance();String key = RedisCacheKeys.getWxSessionKeyKey(response.getOpenId());redisCache.setCache(key, 2147483647, response.getSessionKey());}@Overridepublic String getAccessToken() {return getAccessToken(false);}@Overridepublic String getAccessToken(boolean isForce) {RedisCache redisCache = RedisCache.getInstance();String accessToken = null;if (!isForce) {accessToken = redisCache.getCache(RedisCacheKeys.getWxAccessTokenKey(appId));}if (StringUtil.isNotEmpty(accessToken)) {return accessToken;}String rawResponse = HttpClientUtil.get(String.format(WechatConstant.URL_GET_ACCESS_TOKEN, appId, appSecret));AccessTokenResponse response = JSON.parseObject(rawResponse, AccessTokenResponse.class);("getAccessToken:response={}", response);if (response.isSuccess()) {redisCache.setCache(RedisCacheKeys.getWxAccessTokenKey(appId), 7000, response.getAcessToken()); return response.getAcessToken();}return null;}@Overridepublic String getSessionKey(String openId) {RedisCache redisCache = RedisCache.getInstance();String key = RedisCacheKeys.getWxSessionKeyKey(openId);String sessionKey = redisCache.getCache(key);return sessionKey;}}⽤到的解密⼯具类public class Sha1Utils {public static String decryptWXAppletInfo(String sessionKey, String encryptedData, String iv) {String result = null;try {byte[] encrypData = Base64.decodeBase64(encryptedData);byte[] ivData = Base64.decodeBase64(iv);byte[] sessionKeyB = Base64.decodeBase64(sessionKey);AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(sessionKeyB, "AES");cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);byte[] doFinal = cipher.doFinal(encrypData);result = new String(doFinal);return result;} catch (Exception e) {//e.printStackTrace();log.error("decryptWXAppletInfo error",e);}return null;}}⽹络请求⼯具类public class HttpClientUtil {// utf-8字符编码public static final String CHARSET_UTF_8 = "utf-8";// HTTP内容类型。
Java applet(小程序)介绍
就是HelloWorld.java。而且,该类必须为java.applet.Applet的子类。
Applet类的层次
Java.applet.Applet类实际上是java.awt.Panel的子类。Applet和AWT类本节讨论了JDK对Applet的支持,以及Applet在编程方式、操作上下文和
如何开始等方面与应用程序的区别。
7.1·什么是Applet?
Applet是能够嵌入到一个HTML页面中,且可通过Web浏览器下载和执行的
一种Java类。它是Java技术容器(container)的一种特定类型,其执行
格式来表示。
注-这个文件与你要装入的HTML文件的基URL有关,它不能含有路径名。
这样。在构造函数完成了它的任务后,浏览器调用init()对Applet进行
基本的初始化操作。init()结束后,浏览器调用另一个称为start()的方法。
本模块稍后将对start()做更细致的剖析;start()通常在Applet成为可见
时被调用。方法init()和start()都是在Applet成为"活动的"之前运行
stop()方法是在Applet成为不可见时被调用的,这种情况一般在浏览器被
图标化或链接到另一个URL时会出现。Applet用该方法使动画停止。
1.public void stop() {
2.musicClip.stop();
3.}
start()和stop()形成一对动作:典型地,start()激活Applet中的某一行为,
参数总是建立该Applet的panel的图形上下文。你能用这个上下文在你的
微信小程序-JAVA实现微信支付功能(微信支付2.0)
微信⼩程序-JAVA实现微信⽀付功能(微信⽀付2.0)微信⼩程序-JAVA实现微信⽀付功能(微信⽀付2.0)⼀.前⾔ 本博客主要介绍JAVA后台与微信⼩程序(UNI-APP或者原⽣微信⼩程序)的微信⽀付的实现,如果是APP或者H5的开发暂时不⽀持,具体应⽤场景如下图:不同场景调⽤的微信⽀付接⼝不⼀致,请务必了解,如果您是开发的APP或者H5,请出门右拐(哈哈),此次介绍的微信⽀付是基于⽀付类型为JSAPI实现的,该⽀付⽅式⽀持微信如上图所说的线下场所、公众号、⼩程序、PC⽹站、移动端⽹站,具体以微信⽀付官⽹为主:https:///wiki/doc/apiv3/wxpay/pages/api.shtml,本此开发使⽤的是微信⽀付的V2版,V3版暂未尝试(有兴趣的可以⾃⼰尝试)⼆.开发前准备与要求1.JAVA后台环境准备①.前往https:///wiki/doc/api/jsapi.php?chapter=11_1,下载JAVA版的SDK,该SDK,帮我们实现了许多参数的封装,避免我们⾃⼰拼接微信接⼝的参数,当然如果你有时间也可以⾃⼰拼装,请求参数,具体拼接还是看第⼀幅图上⾯的微信⽀付官⽹。
②.下载好之后解压,然后打开⾥⾥⾯的readme.md⽂件,具体如下该SDK写了很多的⼯具类,我们在开发的时候直接调⽤官⽅提供的SDK就⾏了,然后打开POM.xml⽂件,将这些SDK所需的JAR包引⼊到项⽬中,不然会报错,如果不想使⽤SLFJ⽇志,可以将相关的代码注释,不影响主体功能的使⽤。
然后将解压好的⽂件⾥⾯的java⽂件导⼊到项⽬中去,这⾥笔者就不演⽰了,你可以单独创建⼀个package将这些java⽂件放进去,然后还需要⼀个IpUtil⼯具类,为后⾯的开发做准备,代码⼊下:③.主业务逻辑代码-配置类(******) 先介绍⼀下,下⾯的代码本地JAVA后台代码的核⼼代码,很重要,请认真阅读: 准备⼀个配置类,该类需要继承SDK中的WXPayConfig类,如下,这个配置类⽐较重要,⾥⾯的参数会决定你微信⽀付接⼝调⽤的成功与否。
编辑器使用Java语言和JavaFX开发的小程序
编辑器使用Java语言和JavaFX开发的小程序随着计算机技术的不断发展,各种各样的应用程序层出不穷。
其中,编辑器是一类非常重要的应用程序,它可以方便地编辑文本、代码等内容。
本文将介绍使用Java语言和JavaFX开发的小程序,该程序旨在提供一个功能强大、易于使用的编辑器。
1. 程序概述该小程序基于Java语言和JavaFX开发,旨在为用户提供一个强大的文本编辑器。
它具有以下主要特点:1.1 支持多种文件类型该编辑器可以处理多种文件类型,包括普通文本文件、代码文件等。
用户可以根据自己的需要选择不同的文件类型,并获得相应的编辑功能。
1.2 语法高亮为了方便用户编写代码,该编辑器实现了语法高亮功能。
它可以根据不同的编程语言,对代码进行高亮显示,使代码结构更加清晰,易于阅读和修改。
1.3 智能代码补全为了提高用户的编程效率,该编辑器还实现了智能代码补全功能。
当用户输入代码时,编辑器可以自动弹出建议,并提供相关的代码片段,减少用户的输入量,提高编程效率。
1.4 代码格式化为了保持代码的规范和一致性,该编辑器提供了代码格式化功能。
用户可以通过点击按钮或使用快捷键,对代码进行格式化,使代码的缩进、空格等方面符合编码规范。
1.5 文件管理除了编辑功能,该编辑器还提供了文件管理功能。
用户可以通过编辑器直接打开、保存和关闭文件,还可以创建、删除和重命名文件。
这样,用户可以方便地管理自己的文档和代码文件。
2. 开发环境该小程序使用Java语言和JavaFX框架进行开发。
Java是一种跨平台的编程语言,可在不同的操作系统上运行。
JavaFX是一种用于构建富客户端应用程序的Java库,可以创建漂亮的用户界面。
为了开发该程序,你需要安装Java开发工具包(JDK)和JavaFX 库。
在准备好开发环境后,你可以使用Java编程语言和JavaFX的相关API来编写程序代码。
3. 实现过程3.1 创建界面首先,我们需要创建一个用户界面,用于展示编辑器的各个功能。
java小程序,模拟电视机和遥控
java⼩程序,模拟电视机和遥控简单说说,程序的主要使⽤是⽤来模拟实现电视机和遥控之间的操作的。
总所周知,电视机关闭之后频道会保存。
这⾥会⽤txt来记录数组,⽤gui模拟电视机和遥控器。
⽽且,每个电视台的⾳量是分开储存的。
分成4个部分组成。
box.java是存放main的,data.java⽤来负责数据的输⼊输出的。
tvbox.java和remote.java分别表⽰的是电视机和遥控器.代码如下:box.java1public class box {23/**4 * @param args5*/6public static void main(String[] args) {7// TODO Auto-generated method stub8new tvbox();9new remote();10 }1112 }简单地调⽤remote()和tvbox()两个class.data.java在C盘创建data.txt和data_channel.txt⽤来存放电视台和各个电视台的频道的数据,开机的时候可以读取.⽤流对每个台的⾳量以及现在在看的电视台进⾏读写.1import java.io.*;2public class data {3public static BufferedReader bufread;4private static String path = "C:/data.txt";5private static String path_channel = "C:/data_channel.txt";6private static File filename = new File(path);7private static File filename_channel = new File(path_channel);8910public static void creatTxtFile() throws IOException{11if (!filename.exists()) {12 filename.createNewFile();13for(int i = 0; i <30; i++)14 tvbox.volume[i] = 10;15 data.write();16 System.err.println(filename + "已创建!");17 }18 }19public static void creatTxtFile_channel() throws IOException{20if (!filename_channel.exists()) {21 filename_channel.createNewFile();22 tvbox.channel_now = 0;23 data.write_channel();2425 System.err.println(filename_channel + "已创建!");26 }27 }2829303132public static String read_test() throws IOException33 {34 BufferedReader in = new BufferedReader(new FileReader(filename));35 String line;36/*while((line = in.readLine()) != null){37 String[] temp = line.split("\t");38 for(int j=0;j<temp.length;j++){39 remoter.volume[j] = Integer.parseInt(temp[j]);40 }41 }*/42//43 line = in.readLine();44 String[] temp = line.split("\t");45for(int j=0; j<temp.length; j++)46 {47 tvbox.volume[j] = Integer.parseInt(temp[j]);49//50 in.close();51 System.err.println(line);52return line;5354 }55public static String read_channel_test() throws IOException56 {57 BufferedReader in = new BufferedReader(new FileReader(filename_channel));58 String line;59/*while((line = in.readLine()) != null){60 String[] temp = line.split("\t");61 for(int j=0;j<temp.length;j++){62 remoter.channel_now = Integer.parseInt(temp[j]);63 }64 }65*/66//67 line = in.readLine();68 String[] temp = line.split("\t");69for(int j=0; j<temp.length; j++)70 {71 tvbox.channel_now = Integer.parseInt(temp[j]);72 }73//7475 in.close();76 System.err.println(line);77return line;78 }7980public static void write_channel() throws IOException{81 String newString="";82 newString += tvbox.channel_now +"\t";83 String filein = newString + "\r\n";84 String string_null = "";85 RandomAccessFile mm = null;86try {87 mm = new RandomAccessFile(filename_channel, "rw");88 mm.writeBytes(string_null);89 mm.writeBytes(filein);90 } catch (IOException e1) {91// TODO ⾃动⽣成 catch 块92 e1.printStackTrace();93 } finally {94if (mm != null) {95try {96 mm.close();97 } catch (IOException e2) {98// TODO ⾃动⽣成 catch 块99 e2.printStackTrace();100 }101 }102 }103 }104105public static void write() throws IOException{106 String newString="";107for(int i = 0; i < 30 ; i++)108 {109 newString += tvbox.volume[i]+"\t";110 }111 String filein = newString + "\r\n";112 String string_null = "";113 RandomAccessFile mm = null;114try {115 mm = new RandomAccessFile(filename, "rw");116 mm.writeBytes(string_null);117 mm.writeBytes(filein);118 } catch (IOException e1) {119// TODO ⾃动⽣成 catch 块120 e1.printStackTrace();121 } finally {122if (mm != null) {123try {124 mm.close();125 } catch (IOException e2) {126// TODO ⾃动⽣成 catch 块127 e2.printStackTrace();128 }129 }130 }131 }133134135136137 }remote.java创建GUI,其中例如gl1=new GridLayout(3,1,0,15);意思就是三⾏⼀列,⽔平距离为0,竖直距离为15.p1.setBounds(170, 45, 60, 150);意思是以左上⾓作为起始坐标,横坐标为170,纵坐标为45,创建⼀个60x150的GUI区域.Bt class⽤来监视GUI的状况,⿏标的反应反馈到Bt class⽤来作为处理的指令,类似switch函数,不过这个switch是⾯向整个GUI区域的⽽不是⼀个个字符的命令. 1import java.awt.*;2import java.awt.event.*;34public class remote extends Frame {56/**7 * @param args8*/9private static final long serialVersionUID = 22;10 GridLayout gl0, gl1,gl2;11 Panel p0,p1,p2;12 Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b_cancel,b_ok,b_turn_on,b_turn_off,b_channel_up,b_channel_down,b_volume_up,b_volume_down, b_random;13 StringBuffer str;1415public remote()16 {17 gl0=new GridLayout(4,5,10,15);18 gl1=new GridLayout(3,1,0,15);19 gl2=new GridLayout(4,1,0,15);2021 b0 = new Button("0");22 b0.setForeground(Color.blue);23 b0.addActionListener(new Bt());24 b1 = new Button("1");25 b1.setForeground(Color.blue);26 b1.addActionListener(new Bt());27 b2 = new Button("2");28 b2.setForeground(Color.blue);29 b2.addActionListener(new Bt());30 b3 = new Button("3");31 b3.setForeground(Color.blue);32 b3.addActionListener(new Bt());33 b4 = new Button("4");34 b4.setForeground(Color.blue);35 b4.addActionListener(new Bt());36 b5 = new Button("5");37 b5.setForeground(Color.blue);38 b5.addActionListener(new Bt());39 b6 = new Button("6");40 b6.setForeground(Color.blue);41 b6.addActionListener(new Bt());42 b7 = new Button("7");43 b7.setForeground(Color.blue);44 b7.addActionListener(new Bt());45 b8 = new Button("8");46 b8.setForeground(Color.blue);47 b8.addActionListener(new Bt());48 b9 = new Button("9");49 b9.setForeground(Color.blue);50 b9.addActionListener(new Bt());51 b_cancel= new Button("C");52 b_cancel.setForeground(Color.blue);53 b_cancel.addActionListener(new Bt());54 b_turn_on = new Button("Turn On");55 b_turn_on.setForeground(Color.blue);56 b_turn_on.addActionListener(new Bt());57 b_turn_off= new Button("Turn Off");58 b_turn_off.setForeground(Color.blue);59 b_turn_off.addActionListener(new Bt());60 b_volume_up = new Button("Volume +");61 b_volume_up.setForeground(Color.blue);62 b_volume_up.addActionListener(new Bt());63 b_volume_down= new Button("Volume -");64 b_volume_down.setForeground(Color.blue);65 b_volume_down.addActionListener(new Bt());66 b_channel_up= new Button("Channel +");67 b_channel_up.setForeground(Color.blue);68 b_channel_up.addActionListener(new Bt());69 b_channel_down= new Button("Channel -");70 b_channel_down.setForeground(Color.blue);71 b_channel_down.addActionListener(new Bt());72 b_ok= new Button("OK");73 b_ok.setForeground(Color.blue);74 b_ok.addActionListener(new Bt());75 b_cancel= new Button("C");76 b_cancel.setForeground(Color.blue);77 b_cancel.addActionListener(new Bt());78 b_random= new Button("搜索");79 b_random.setForeground(Color.blue);80 b_random.addActionListener(new Bt());8182 p0 = new Panel();83 p1 = new Panel();84 p2 = new Panel();8586 str = new StringBuffer();8788 p0.setLayout(gl0);89 p0.add(b7);90 p0.add(b8);91 p0.add(b9);92 p0.add(b4);93 p0.add(b5);94 p0.add(b6);95 p0.add(b1);96 p0.add(b2);97 p0.add(b3);98 p0.add(b_cancel);99 p0.add(b0);100 p0.add(b_ok);101 p0.setBounds(10,45, 150, 150);102103 p1.setLayout(gl1);104 p1.add(b_turn_on);105 p1.add(b_turn_off);106 p1.add(b_random);107 p1.setBounds(170, 45, 60, 150);108109 p2.setLayout(gl2);110 p2.add(b_channel_up);111 p2.add(b_channel_down);112 p2.add(b_volume_up);113 p2.add(b_volume_down);114 p2.setBounds(250, 45, 60, 150);115116 setLayout(null);117 add(p0);118 add(p1);119 add(p2);120 setResizable(false);121122 addWindowListener(new WindowAdapter(){123public void windowClosing(WindowEvent e1)124 {125 System.exit(0);126 }127 });128 setBackground(Color.lightGray);129 setBounds(100,350,320,250);130 setVisible(true);131132 }133class Bt implements ActionListener134 {135/* (non-Javadoc)136 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) 137*/138public void actionPerformed(ActionEvent e2)139 {140try{141if(tvbox.turn)142 {143if(e2.getSource() == b_turn_on)144 {145 tvbox.turn = true;146 data.creatTxtFile();147 data.creatTxtFile_channel();148 data.read_channel_test();149 data.read_test();150 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));151 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 152153 }154else if(e2.getSource() == b_turn_off)155 {156 tvbox.turn = false;157 tvbox.tf_channel.setText(" ");158 tvbox.tf.setText(" ");159 tvbox.tf_volume.setText(" ");160 }161162else if(e2.getSource() == b_channel_up)163 {164 tvbox.channel_now = Integer.parseInt(tvbox.tf_channel.getText());165166if(tvbox.channel_now == 29)167 {168 tvbox.channel_now = 0;169 }170else171 {172 tvbox.channel_now += 1;173 }174 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));175 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 176 tvbox.tf.setText("--");177 str.setLength(0);178 data.write_channel();179 }180else if(e2.getSource() == b_channel_down)181 {182 tvbox.channel_now = Integer.parseInt(tvbox.tf_channel.getText());183184if(tvbox.channel_now == 0)185 {186 tvbox.channel_now = 29;187 }188else189 {190 tvbox.channel_now -= 1;191 }192 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));193 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 194 tvbox.tf.setText("--");195 str.setLength(0);196 data.write_channel();197198 }199else if(e2.getSource() == b_volume_up)200 {201if(tvbox.volume[tvbox.channel_now]<100)202 {203 tvbox.volume[tvbox.channel_now] += 1;204 }205 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 206 data.write();207 tvbox.tf.setText("--");208 str.setLength(0);209 }210else if(e2.getSource() == b_volume_down)211 {212if(tvbox.volume[tvbox.channel_now]>0)213 {214 tvbox.volume[tvbox.channel_now] -= 1;215 }216 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 217 data.write();218 tvbox.tf.setText("--");219 str.setLength(0);220 }221222else if(e2.getSource() == b_random)223 {224 tvbox.channel_now = (int)(Math.random()*30);225 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));226 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 227 tvbox.tf.setText("--");228 str.setLength(0);229 data.write_channel();230231 }232else if(e2.getSource() == b_cancel)233 {234 tvbox.tf.setText("--");235 str.setLength(0);236 }237else if(e2.getSource() == b_ok)238 {239 tvbox.tf.setText("--");240 str.setLength(0);241if(0 <= tvbox.channel && tvbox.channel <= 29)242 {243 tvbox.channel_now = tvbox.channel;244 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));245 }246else247 {248 tvbox.tf.setText("error");249 }250 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 251 data.write_channel();252 }253254else255 {256 tvbox.tf.setText(str.append(e2.getActionCommand()).toString());257 tvbox.channel = Integer.parseInt(tvbox.tf.getText().trim());258 }259 }260else261 {262263264if(e2.getSource() == b_turn_on)265 {266 tvbox.turn = true;267 data.creatTxtFile();268 data.creatTxtFile_channel();269 data.read_channel_test();270 data.read_test();271 tvbox.tf_channel.setText(Integer.toString(tvbox.channel_now));272 tvbox.tf_volume.setText(Integer.toString(tvbox.volume[tvbox.channel_now])); 273274 }275 }276277 }278279280catch (NumberFormatException e)281 {282 tvbox.tf_channel.setText("数字格式异常");283 }284catch(StringIndexOutOfBoundsException e){285 tvbox.tf_channel.setText("字符串索引越界");286 } catch (Exception e) {287// TODO Auto-generated catch block288 e.printStackTrace();289 }290291 }292293 }294295296297298299 }300tvbox.java和remote类似,只是⼀些反馈的JTextField ⽤来显⽰当前的⾳量和频道情况。
时钟计时器使用Java语言和Swing界面库开发的小程序
时钟计时器使用Java语言和Swing界面库开发的小程序时钟计时器是一款使用Java语言和Swing界面库开发的小程序,它可以以时、分、秒的形式显示当前时间,并可以进行计时功能。
本文将介绍该小程序的开发过程,并分享一些有关Java语言和Swing界面库的知识。
一、程序开发环境搭建要使用Java语言和Swing界面库进行开发,首先需要安装Java开发工具包(JDK)和集成开发环境(IDE)。
在安装完成后,创建一个新的Java项目,并导入Swing库。
二、界面设计首先,我们需要设计一个界面来展示时钟和计时功能。
可以使用Swing库提供的组件来创建窗体、标签、按钮等。
1. 窗体设计在主类中创建一个窗体对象,设置标题、尺寸和布局等属性。
并将时钟和计时功能的组件添加到窗体中。
```javaJFrame frame = new JFrame("时钟计时器");frame.setSize(400, 300);frame.setLayout(new BorderLayout());```2. 时钟设计使用标签组件来显示当前时间。
可以使用Java提供的日期和时间类(如Date和Calendar)来获取当前时间,并将其格式化后设置为标签的文本。
```javaJLabel clockLabel = new JLabel();frame.add(clockLabel, BorderLayout.CENTER);// 获取当前时间Date now = new Date();SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");String time = sdf.format(now);// 设置标签文本clockLabel.setText(time);```3. 计时功能设计为计时功能设计按钮组件,并添加监听事件。
在按钮的监听器中,通过定时器类(如Timer)来实现每秒更新计时器的功能。
Java做的一个小程序-随机点名器
Java做的一个小程序,随机点名器1.import java.io.*;2.import java.awt。
*;3.import java.awt.event。
*;4.import java。
util.List;5.import java。
util。
ArrayList;6.7.public class DianName extends Frame{8.9.private String fileName="a。
txt”;10.private File f;11.private FileReader fr;12.private BufferedReader br;13.private List〈String> names=new ArrayList<String>();14.private String strName;15.16.private Label labelName;17.private Button btOK;18.19.public static void main(String[] args){20. DianName dn=new DianName();21. dn。
newFrame();22. dn.read();23.}24.25.public void newFrame(){26. labelName=new Label(”显示姓名");27. btOK=new Button("开始”);28.29.this.setLocation(300,300);30.this.setResizable(false);31.this。
setSize(500,400);32.this。
add(labelName,BorderLayout。
NORTH);33.this。
add(btOK,BorderLayout.SOUTH);34.this。