Java Swing客户端小项目
记录一下两个用java swing写的客户端。
项目1:
关键词:swing jtable
代码如下:
1、主类:
package com.my.agent.client; import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException; import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter; public class AgentClinet implements ActionListener{ JTextField textField = null;
MyTabelModel tm = null;
JFrame jframe = null;
public AgentClinet(){
jframe = new JFrame("");
jframe.setSize(600, 400);
jframe.setBackground(Color.BLUE);
jframe.setResizable(false);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setAlwaysOnTop(true);
jframe.setLayout(new FlowLayout()); //上面按钮
JPanel jpanel = new JPanel();
JButton button = new JButton("添加信息");
button.addActionListener(this);
jpanel.add(button);
button = new JButton("一键启动");
button.addActionListener(this);
jpanel.add(button);
button = new JButton("一键停止");
button.addActionListener(this);
jpanel.add(button);
jframe.add(jpanel); //数据展示
tm = new MyTabelModel(null);
final JTable table = new JTable(tm);
table.setPreferredScrollableViewportSize(new Dimension(550, 220));
JScrollPane s = new JScrollPane(table);
jframe.add(s); //下层按钮
jpanel = new JPanel(new FlowLayout(0));
jpanel.setPreferredSize(new Dimension(580, 30));
JLabel label = new JLabel("单个代理home:");
textField = new JTextField(30);
jpanel.add(label);
jpanel.add(textField); button = new JButton("启动");
button.addActionListener(this);
jpanel.add(button);
button = new JButton("停止");
button.addActionListener(this);
jpanel.add(button); jframe.add(jpanel); label = new JLabel("删除功能暂不支持");
jframe.add(label);
jframe.setVisible(true); table.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
//得到选中的行列的索引值
int r= table.getSelectedRow();
//int c= table.getSelectedColumn();
//得到选中的单元格的值,表格中都是字符串
Object value= table.getValueAt(r, 2);
textField.setText(value.toString());
/* String info=r+"行"+c+"列值 : "+value.toString();
System.out.println(info);*/
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
});
} @Override
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton)e.getSource();
try {
if(btn.getText().equals("添加信息")){
JFileChooser fileChooser = new JFileChooser("目录选择:");
fileChooser.setFileFilter(new FileNameExtensionFilter("", "bat"));
fileChooser.setAcceptAllFileFilterUsed(true);
fileChooser.showOpenDialog(jframe);
if(null != fileChooser.getSelectedFile() ){
String filePath = fileChooser.getSelectedFile().getAbsolutePath();
//代理目录
String str = filePath.substring(0,filePath.lastIndexOf("\\"));
if(MyDao.addLineData(null, str)){
jframe.dispose();
new AgentClinet();
};
} }else if(btn.getText().equals("一键启动")){
String[][] model = tm.getModel();
for (int i = 0; i < model.length; i++) {
Runtime.getRuntime().exec("cmd /c start "+model[i][2]+"\\startup.bat");
}
}else if(btn.getText().equals("一键停止")){
String[][] model = tm.getModel();
for (int i = 0; i < model.length; i++) {
Runtime.getRuntime().exec("cmd /c start "+model[i][2]+"\\stop.bat");
}
}else if(btn.getText().equals("启动")){
Runtime.getRuntime().exec("cmd /c start "+textField.getText()+"\\startup.bat");
}else if(btn.getText().equals("停止")){
Runtime.getRuntime().exec("cmd /c start "+textField.getText()+"\\stop.bat");
}
} catch (IOException e1) {
System.exit(0);
}
} public static void main(String[] args) {
new AgentClinet();
} }
MyTabelModel.java
package com.my.agent.client; import javax.swing.table.AbstractTableModel; public class MyTabelModel extends AbstractTableModel{ private static final long serialVersionUID = 1L; String[] tableHeader = new String[]{"序号","名称","HOME"}; private String[][] model = null; public MyTabelModel(String path) {
model = MyDao.getDataFromFile(path);
} public String[][] getModel() {
return model;
} public void setModel(String[][] model) {
this.model = model;
} @Override
public int getColumnCount() {
return tableHeader.length;
} @Override
public int getRowCount() {
return model.length;
} @Override
public Object getValueAt(int row, int col) {
return model[row][col];
}
/**
* 此方法返回col位置的列的名称
*/
@Override
public String getColumnName(int column) {
return tableHeader[column];
} }
MyTabelModel.java
数据来源,放到一个txt文件里面:
package com.my.agent.client; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class MyDao { private static BufferedWriter bw; public static void main(String[] args) {
getDataFromFile(null);
} public static String[][] getDataFromFile(String dir){
String agentsFile = "";
if(null==dir || "".equals(dir)){
dir = System.getProperty("user.home");
}
File dirF = new File(dir);
if(!dirF.isDirectory()){
throw new RuntimeException("配置的地址不是一个目录");
}else{
agentsFile = dirF.getAbsolutePath()+"/agents.txt";
}
File file = new File(agentsFile);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
}
}
List<String> datas = getLineData(agentsFile);
String[][] ret = new String[datas.size()][];
for (int i = 0; i < datas.size(); i++) {
String[] table = ((i+1)+"&"+datas.get(i).trim()).split("&");
ret[i] = table;
}
/*
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i][0]+"=="+ret[i][1]+"==="+ret[i][2]);
}
*/
return ret;
} public static List<String> getLineData(String path) {
List<String> urls = new ArrayList<String>();
try {
FileReader reader = new FileReader(path);
BufferedReader br = new BufferedReader(reader);
String str = null;
while ((str = br.readLine()) != null) {
if(str!=null && str.contains("&")){
urls.add(str);
}
}
br.close();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return urls;
} public static boolean addLineData(String filename,String filePath){
if(filename==null){
filename = System.getProperty("user.home")+"\\agents.txt";
}
String agentName = filePath.substring(filePath.lastIndexOf("\\")+1);
try {
File file = new File(filename);
if(!file.exists()){
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(filename,true);
bw = new BufferedWriter(fileWriter);
bw.write(agentName+"&"+filePath);
bw.newLine();
bw.flush();
bw.close();
} catch (Throwable e) {
//do noting
return false;
}
return true;
} }
以上是第一个小工具,只是用了txt文件进行数据存储,第二个客户端按数据源分为以下两种:
1.查询MongoDB数据库:
主类:
package com.my.mssage.client; import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class MessageClient implements ActionListener{ JFrame jframe = null;
JTextField pathText = null;
JTextField userNameText = null;
JTextField pwdText = null;
JTextArea textArea = null;
JButton startBtn = null;
JButton stopBtn = null;
JTextField timeText = null; boolean timerRun = false; JLabel dateLabel = new JLabel("监控时间(-至今)");
JTextField dateText = null;
boolean dateshow = false;
public MessageClient(){
jframe = new JFrame("监控");
jframe.setSize(600, 400);
jframe.setBackground(Color.BLUE);
jframe.setResizable(false);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setAlwaysOnTop(true);
jframe.setLayout(new FlowLayout(0));
jframe.getContentPane().add(new JLabel("数据库ip地址:"));
pathText = new JTextField(10);
pathText.setText("");
jframe.getContentPane().add(pathText);
jframe.getContentPane().add(new JLabel("端口:"));
userNameText = new JTextField(10);
jframe.getContentPane().add(userNameText);
jframe.getContentPane().add(new JLabel("文档名称:"));
pwdText = new JTextField(10);
jframe.getContentPane().add(pwdText);
jframe.getContentPane().add(new JLabel("刷新时间(秒):"));
timeText = new JTextField(5);
timeText.setText("300");
jframe.getContentPane().add(timeText); dateText = new JTextField(10);
dateText.setText(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
jframe.getContentPane().add(dateLabel);
jframe.getContentPane().add(dateText);
dateLabel.setVisible(dateshow);
dateText.setVisible(dateshow); JPanel panel = new JPanel(new FlowLayout(2));
startBtn = new JButton("开始监控");
startBtn.addActionListener(this);
panel.add(startBtn);
stopBtn = new JButton("停止监控");
stopBtn.addActionListener(this);
panel.add(stopBtn);
jframe.add(panel);
textArea = new JTextArea(18,53);
JScrollPane scrollPane = new JScrollPane(textArea);
jframe.add(scrollPane); timeText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_F11){
dateshow = !dateshow;
dateLabel.setVisible(dateshow);
dateText.setVisible(dateshow);
}
}
}); jframe.setVisible(true);
} public static void main(String[] args) {
new MessageClient();
} @Override
public void actionPerformed(ActionEvent e) { JButton btn = (JButton)e.getSource();
final Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
String startDate = null;
if(dateshow){
startDate = dateText.getText();
}
if(timerRun){
textArea.setText("开始监控:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n");
List<WorkInfo> list = MongoDao.queryWorkitem(pathText.getText(),
userNameText.getText(), pwdText.getText(), startDate); for (WorkInfo workInfo : list) {
textArea.append(workInfo.getStopTime()+"======"+workInfo.getWorkName()+":"+workInfo.getWorkType()+":"+workInfo.getWorkState()+":"+workInfo.getStateDetail()+"\r\n");
SoundPlay.playSound(workInfo.getWorkType());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
timer.cancel();
this.cancel();
textArea.setText("停止监控......");
}
System.gc();
}
}; if(btn.getText().equals("开始监控")){
timerRun = true;
System.out.println(pathText.getText()+"=="+userNameText.getText()+"=="+pwdText.getText());
timer.schedule(task,0, Long.parseLong(timeText.getText())*1000);
}else if(btn.getText().equals("停止监控")){
timerRun = false;
System.out.println("stop......");
task.cancel();
timer.cancel();
}else{
System.out.println("......");
} }
}
数据查询:
package com.my.mssage.client; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.bson.Document; import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; public class MongoDao { public static void main(String[] args) { } public static List<WorkInfo> queryWorkitem(String ip, String port, String dbname,String startDate) { List<String> list = new ArrayList<String>();
List<WorkInfo> workList = new ArrayList<WorkInfo>();
MongoClient client = new MongoClient(ip,Integer.parseInt(port));
MongoDatabase db = client.getDatabase(dbname); try {
/*
MongoIterable<String> cos = db.listCollectionNames();
for (String name : cos) {
System.out.println(name);
}
*/
MongoCollection<Document> collection = db.getCollection("nSite.wf.workitems");
if(startDate == null || "".equals(startDate)){
startDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}
BasicDBObject query = new BasicDBObject();
query.put("state", "Exception");
DBObject timeQuery = new BasicDBObject();
timeQuery.put("$gt", new SimpleDateFormat("yyyy-MM-dd").parse(startDate));
timeQuery.put("$lt", new Date());
query.put("startTime", timeQuery);
FindIterable<Document> doc = collection.find(query); int i = 0; for (Document document : doc) {
Date tempDate = document.getDate("stopTime");
String stateDetail = document.getString("stateDetails");
WorkInfo workInfo = new WorkInfo(document.getString("name"),
document.getString("activityDefineName"), "出错了");
workInfo.setStopTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tempDate));
workInfo.setStateDetail(stateDetail);
workList.add(workInfo);
i++;
list.add(document.get("name")+"=="+document.get("activityDefineName")+"==出错了");
System.out.println(document.get("name")+"=="+document.get("activityDefineName")+"==出错了");
}
System.out.println(i+"===="+list.size()); } catch (Throwable e) {
throw new RuntimeException(e.getMessage());
}finally {
client.close();
}
return workList;
} }
MongoDao.java
2.查询Mysql数据库:
主类:
package com.my.mssage.client; import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class MysqlClient implements ActionListener{ JFrame jframe = null;
JTextField pathText = null;
JTextField portText = null;
JTextField userNameText = null;
JTextField pwdText = null;
JTextArea textArea = null;
JButton startBtn = null;
JButton stopBtn = null;
JTextField timeText = null; boolean timerRun = false; JLabel dateLabel = new JLabel("监控时间(-至今)");
JTextField dateText = null;
boolean dateshow = false; public MysqlClient(){
jframe = new JFrame("监控");
jframe.setSize(600, 400);
jframe.setBackground(Color.BLUE);
jframe.setResizable(false);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setAlwaysOnTop(true);
jframe.setLayout(new FlowLayout(0));
jframe.getContentPane().add(new JLabel("db地址:端口:"));
pathText = new JTextField(12);
pathText.setText("");
jframe.getContentPane().add(pathText);
jframe.getContentPane().add(new JLabel("db名称:"));
portText = new JTextField(5);
portText.setText("");
jframe.getContentPane().add(portText);
jframe.getContentPane().add(new JLabel("db用户名:"));
userNameText = new JTextField(5);
jframe.getContentPane().add(userNameText);
jframe.getContentPane().add(new JLabel("db密码:"));
pwdText = new JTextField(5);
jframe.getContentPane().add(pwdText);
jframe.getContentPane().add(new JLabel("刷新时间(秒):"));
timeText = new JTextField(6);
timeText.setText("300");
jframe.getContentPane().add(timeText); dateText = new JTextField(10);
dateText.setText(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
jframe.getContentPane().add(dateLabel);
jframe.getContentPane().add(dateText);
dateLabel.setVisible(dateshow);
dateText.setVisible(dateshow); JPanel panel = new JPanel(new FlowLayout(2));
startBtn = new JButton("开始监控");
startBtn.addActionListener(this);
panel.add(startBtn);
stopBtn = new JButton("停止监控");
stopBtn.addActionListener(this);
panel.add(stopBtn);
jframe.add(panel);
textArea = new JTextArea(18,53);
JScrollPane scrollPane = new JScrollPane(textArea);
jframe.add(scrollPane);
timeText.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_F11){
dateshow = !dateshow;
dateLabel.setVisible(dateshow);
dateText.setVisible(dateshow);
}
}
}); jframe.setVisible(true);
} public static void main(String[] args) {
new MysqlClient();
} @Override
public void actionPerformed(ActionEvent e) { JButton btn = (JButton)e.getSource(); final Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
String startDate = null;
if(dateshow){
startDate = dateText.getText();
}
if(timerRun){ textArea.setText("开始监控:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n");
List<WorkInfo> list = NSDao.query(pathText.getText(), portText.getText(),
userNameText.getText(), pwdText.getText(), startDate);
for (WorkInfo workInfo : list) {
textArea.append(workInfo.getStopTime()+"======"+workInfo.getWorkName()+":"+workInfo.getWorkType()+":"+workInfo.getWorkState()+":"+workInfo.getStateDetail()+"\r\n");
SoundPlay.playSound(workInfo.getWorkType());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
timer.cancel();
this.cancel();
textArea.setText("停止监控......");
}
System.gc();
}
}; if(btn.getText().equals("开始监控")){
timerRun = true;
System.out.println(pathText.getText()+"=="+userNameText.getText()+"=="+pwdText.getText());
timer.schedule(task,0, Long.parseLong(timeText.getText())*1000);
}else if(btn.getText().equals("停止监控")){
timerRun = false;
System.out.println("stop......");
task.cancel();
timer.cancel();
}else{
System.out.println("......");
}
}
}
数据来源:
package com.my.mssage.client; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class NSDao { private static String driver = "com.mysql.jdbc.Driver"; static Connection conn = null;
static Statement statement = null;
static PreparedStatement ps = null;
static ResultSet rs = null;
static List<String> list = null; /*
* 连接数据库
*/
public static void connDB(String iport,String dbname,String user,String pwd) {
try {
String url = "jdbc:mysql://"+iport+"/"+dbname;
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url, user, pwd);
if (!conn.isClosed()) {
System.out.println("Succeeded connecting to MySQL!");
} statement = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
} /*
* 关闭数据库
*/
public static void closeDB() {
if(rs != null ){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} /*
* 查询数据表
*/
public static List<WorkInfo> query(String iport,String dbname,String user,String pwd,String startDate){
List<WorkInfo> workList = new ArrayList<WorkInfo>();
connDB(iport,dbname,user,pwd);
if(startDate == null || "".equals(startDate)){
startDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}
list = new ArrayList<String>();//返回所有记录
String str_query = "";
try {
String sql = "select workname,activitydefname,stoptime,statedetail,createtime from wf_workitem where currentstate = 5 "
+ " and "
+" starttime BETWEEN '"
+startDate
+"' and '"
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
+"' order by createtime";
rs = statement.executeQuery(sql);
while(rs.next()){
WorkInfo workInfo = new WorkInfo(rs.getString(1),
rs.getString(2), "出错了");
workInfo.setStopTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rs.getDate(3)));
workInfo.setStateDetail(rs.getString(4));
str_query = rs.getString(1)+"=="+rs.getString(2)+"==出错了";
System.out.println(str_query);
list.add(str_query);
workList.add(workInfo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeDB();
}
return workList;
} public static void main(String[] args) {
List<WorkInfo> workList = null;
for (int i = 0; i < workList.size(); i++) {
System.out.println(list.get(i));
}
} }
3、共有代码bean:
package com.my.mssage.client; public class WorkInfo { private String workName; private String workType; private String workState; private String stopTime; private String stateDetail; public WorkInfo(String workName,String workType,String workState,
String stopTime,String stateDetail){
this.workName = workName;
this.workType = workType;
this.workState = workState;
this.stopTime = stopTime;
this.stateDetail = stateDetail;
} public WorkInfo(String workName,String workType,String workState){
this.workName = workName;
this.workType = workType;
this.workState = workState;
} public String getStopTime() {
return stopTime;
} public void setStopTime(String stopTime) {
this.stopTime = stopTime;
} public String getStateDetail() {
return stateDetail;
} public void setStateDetail(String stateDetail) {
this.stateDetail = stateDetail;
} public String getWorkName() {
return workName;
} public void setWorkName(String workName) {
this.workName = workName;
} public String getWorkType() {
return workType;
} public void setWorkType(String workType) {
this.workType = workType;
} public String getWorkState() {
return workState;
} public void setWorkState(String workState) {
this.workState = workState;
} }
声音播放:
package com.my.mssage.client; import java.io.File; import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine; public class SoundPlay { public static void playSound(String type){ try {
String dir = System.getProperty("user.home")+"\\jkaudio";
File file = new File(dir);
switch (type) {
case "打包":
file = new File(dir+"\\1.wav");
break;
case "送演播室":
file = new File(dir+"\\2.wav");
break;
case "审片回退通知":
file =new File(dir+"\\3.wav");
break;
case "自动技审":
file =new File(dir+"\\4.wav");
break;
case "TitleToEditsphere":
file =new File(dir+"\\5.wav");
break;
default:
file = new File(dir+"\\6.wav");
break;
} System.out.println(file.getAbsolutePath());
AudioInputStream cin = AudioSystem.getAudioInputStream(file);
AudioFormat format = cin.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
line.open(format);//或者line.open();format参数可有可无
line.start();
int nBytesRead = 0;
byte[] buffer = new byte[512];
while (true) {
nBytesRead = cin.read(buffer, 0, buffer.length);
if (nBytesRead <= 0)
break;
line.write(buffer, 0, nBytesRead);
}
line.drain();
line.close();
} catch (Throwable e) {
System.out.println(e.getMessage());
// do noting
e.printStackTrace();
}
} public static void main(String[] args) {
for (int i = 1; i < 5; i++) {
playSound(i+"");
}
} }
以上!
Java Swing客户端小项目的更多相关文章
- Java Swing窗体小工具实例 - 原创
Java Swing窗体小工具实例 1.本地webserice发布,代码如下: 1.1 JdkWebService.java package server; import java.net.InetA ...
- java客房管理小项目,适合java小白练手的项目!
java客房管理小项目 这个客房管理小项目,适合java初学者练手.功能虽然不多,但是内容很齐全! 喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私 ...
- JAVA Swing开发单机版项目
一.序 最近公司做的项目里出现了一个新的需求,项目大部分是为金融业定制开发的数据集成平台,包括数据的采集,处理,使用. 数据的采集方式不固定,有机构化数据,有非结构话数据,还有附件等其它文件形式. 对 ...
- java基础部分小项目
贪吃蛇项目 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.even ...
- java 购物商城小项目训练
java web 模拟购物车练习(项目一) 首页(index.jsp) <div align="center" class="index"> < ...
- 27.Java 飞机游戏小项目
开篇 游戏项目基本功能开发 飞机类设计 炮弹类设计 碰撞检测设计 爆炸效果的实现 其他功能 计时功能 游戏项目基本功能开发 这里将会一步步实现游戏项目的基本功能. 使用 AWT 技术画出游戏主窗口 A ...
- Java基础自学小项目
实现一个基于文本界面的<家庭记账软件> 需求:能够记录家庭的收入,支出,并能够收支明细表 主要涉及一下知识点: - 局部变量和基本数据类型 - 循环语句 - 分支语句 - 方法调用和返回值 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- Java Swing简单的加法器
package test; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class FrameDe ...
随机推荐
- webkit 渲染机制
最近看了< webkit技术内幕 >,虽然并不能完全看懂,但是对浏览器的渲染机制也算是有了一个比较完整的认识. 我们从浏览器地址栏输入网址开始到web页面被完整的呈现在眼前,大概的经过了这 ...
- layer弹出层中H5播放器全屏出错解决 & 属性poster底图占满<video>的方法
1. 在layer弹窗组件中 如果使用了flash播放器,全屏是正常的 但若使用了HTML5的播放器,全屏失效 举个栗子 <!DOCTYPE html> <html> < ...
- HR从业者的下一个十年该怎么做?
众所周知,目前我们所处的以互联网为代表的新经济时代,有两个重要的特征一是客户价值至上,二是人力资本主权.围绕这两个基本特征,我们需要重新架构我们的商业模式和创新人力资源管理思维.模式.工具和方法. 人 ...
- WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。
Web 要访问来自 Web 的文件,你可以使用标准的绝对 HTTP URI: <img src="http://www.contoso.com/images/logo.png" ...
- 【排序算法】希尔排序算法 Java实现
希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
- Algorithms(4th)谢路云译大纲总结(附实现源码)
前言: 此算法书可以说是Java程序开发者的福音.里面涉及近50种计算机领域的经典算法,几位作者花了近40年的时间才完成这本著作.秉着对作者的敬仰与对算法的兴趣,我多次翻阅此书,而且常常被书中的经典算 ...
- 架构师之路——里氏替换原则LSP
定义: 如果对每一个对类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型. 内容: 里氏替换原则通 ...
- 卷积神经网络(CNN)模型结构
在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...
- 同一环境下新建Standby RAC库
需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...
- php根据用户输入单词,匹配相似单词
最近在使用一款app背单词的时候,会在某个单词下面,列出与之相类似的单词.于是我在想这个功能是如何做的,自己使用php版本,做了个简单的例子. 大致思路如下: 1.生成英文单词库,并将单词放置redi ...