java Swing程序如何打包成一个可执行程序

写了一个Java Swing小程序 如何打包成可执行程序呀?里面有图片和数据库

4个回答

eclipse不是有导出jar运行文件功能么

如果不用别的工具的话,直接导出成可执行的jar包就行了。
不过现在有好的的小工具,能够把程序打成一个单独jar文件或是做成exe的等等功能。

直接导出jar包,记得打开的时候用java那个打开,不是解压的那个。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java swing 程序导出jar 相关问题

各位大神,我一直都在做BS程序,最近弄一个CS程序,在Eclipse中运行没有任何问题,但是导出时出现了一些问题,如下: 1 将整个CS项目导出可执行的jar时,不能执行 2 导出的jar文件解压后发现里面中文名称的图片乱码了 谢谢!!!

java 程序打包问题

swing程序如何打包,如果应用的类库比较多,如何应用maven进行打包,并生成一个bat可执行文件,必须要手工编写pom.xml吗?

Java程序设计-文本分析程序

Ps:微信号lqs2207,有现成的程序最好。感谢大神 编写一个文本分析程序。要求:可以统计字词的频率。文本来源可以选择本地文件,也可以是网址。如果能统计出热点词或关键词,或者能判断文章的相似度,可酌情加分。要求: (1)程序要有较好的可读性:要有适当的中文注释,变量名/函数名/类名要合适,建议控件名使用匈牙利命名法。 (2)程序要有较清晰的逻辑结构:注意类与类之间的关系,注意函数的简洁,必要时使用重构的手段改进代码。 (3)程序要有较好的可扩充性:注意接口、抽象类的使用,注意常数的定义、注意用户参数的可配置,必要时使用设计模式。 (4)程序要有一定的健壮性:注意卫语句,注意异常的定义、捕获与抛出,注意用正则表达式等方法对用户输入进行检查,程序最好加上JUnit测试。 (5)程序要有较好的易用性:注意图形化界面元素的使用,注意界面的美观,鼓励有创意的界面,必要时可以使用第三方库(在项目报告中要注明)。 (6)程序的基本功能调试通过才进行提交;如果使用数据库,则要提供相关的库、文件或创建库表的sql脚本。 (7)在提交源程序的同时,还需要撰写一个简要的项目报告(参看三、附件——项目报告模板),描述一下程序的功能,程序的特色,程序的模块结构,所用到的技术,以及尚未完成的功能(或者你认为可以扩展的方面)。如果有需求分析文档、设计文档等更好。如果程序中参考了别人框架或程序,要注明来源,并注明哪部分是你添加或修改的。可以写上你开发程序的体会,包括遇到的困难及解决方法。 二、课程设计上传说明 请将以下内容压缩打包后以附件的方式上传(附件大小不能超过10M),需包含以下内容: (1)可以使用Eclipse顺利编译的项目源码; (2)可以直接运行的.exe文件; (3)项目报告(参看三、附件——项目报告模板); (4)需求分析文档(可选)。 三、附件——项目报告模板 课程考试 BK140A《JAVA程序设计》结课设计 项目报告 姓名 所属服务站 用户名 1.程序的运行环境、安装步骤 (1)运行环境:例如,Windows 7,JDK1.8,Mysql (2)依赖的第3方库:是否需要其他的支持文件(比如是否需要事先安装第3方的某些软件)等 (3)运行步骤: 一个典型示例: 1)安装JDK。 2)安装MySql。 3)执行数据库脚本 4)安装第3方软件,步骤是:xxxx 5)使用Eclipse运行项目或双击jar文件 6)如果有密码,则是xxxxx 2.程序开发平台 (1)程序文件数;代码行数:约XXXX行 (2)开发环境:Eclipse,字符编码GBK(默认) 3.程序已经实现功能清单: 列表你已经实现的功能清单,推荐给出屏幕截图,底下再给出简要文字说明。 4.程序算法说明及面向对象实现技术方案 (1)软件架构及面向对象技术方案  程序中有几大模块或者有几个层次……  程序中设计了哪几个类,类之间有何关系:继承、组合、实现某接口……(如果有类系图就更好了)  …… (2)数据存储与算法说明:  你是如何保存数据的?数据库中创建了几个表?表中有哪些字段?表之间建立了关联吗?  如果使用文件,则文件的格式是…… 5.技术亮点、关键点及其解决方案 展示出你开发的程序中最精彩得意的亮点,在开发中你遇到了哪些技术困难,又是如何解决的……

Java Swing可运行的jar双击启动不能保存文件

各位,最近用NetBeans做一个Java Swing项目,但是于到了这样一个奇怪的问题。我的代码里有一段用FileOutputStream来写文件的代码,如果在命令行上用java -jar方式运行,那么不会有任何问题,文件可以被正常的写入。但是如果双击.jar文件运行的话,程序也不会报错,但是就是找不到那个用FileOutputStream生成的文件……这是什么原因呀?我在程序后面也加上了flush(),也试过了close(),但是还是这个情况,有点不解…… 谢谢大家了:-)

我swing了一个登陆界面,在eclipse中运行时显示正常,但是生成jar并运行jar后,背景不显示。

![图片说明](https://img-ask.csdn.net/upload/201904/14/1555249560_377777.jpg)![图片说明](https://img-ask.csdn.net/upload/201904/14/1555249570_781286.jpg) 我swing了一个登陆界面,在eclipse中运行时显示正常,但是生成jar并运行jar后,背景不显示。 ``` public class Login extends JFrame { JPanel contentPane; JPasswordField passwordField; public static void main(String[] args) { Login frame = new Login(); } public Login() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(600, 300, 600, 400); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); //组件 JLabel label1 = new JLabel("\u6B22\u8FCE\u767B\u9646\u7A3B\u7530\u7EFC\u5408\u79CD\u517B\u4FE1\u606F\u670D\u52A1\u7CFB\u7EDF"); label1.setForeground(Color.BLACK); label1.setFont(new Font("微软雅黑", Font.BOLD, 30)); label1.setHorizontalAlignment(SwingConstants.CENTER); label1.setBounds(34, 51, 511, 53); contentPane.add(label1); JLabel label2 = new JLabel("\u7528\u6237\u540D"); label2.setFont(new Font("宋体", Font.PLAIN, 20)); label2.setForeground(Color.BLACK); label2.setHorizontalAlignment(SwingConstants.CENTER); label2.setBounds(77, 136, 72, 32); contentPane.add(label2); JLabel label3 = new JLabel("\u5BC6\u7801"); label3.setForeground(Color.BLACK); label3.setFont(new Font("宋体", Font.PLAIN, 20)); label3.setHorizontalAlignment(SwingConstants.CENTER); label3.setBounds(77, 208, 72, 32); contentPane.add(label3); setVisible(true); setTitle("登陆"); //登陆界面布局 JButton button1=new JButton("登陆"); button1.setBounds(147, 284, 113, 27); contentPane.add(button1); JTextField textField=new JTextField(); textField.setBounds(177, 140, 302, 24); contentPane.add(textField); textField.setFont(new Font("宋体",Font.PLAIN,20)); textField.setColumns(10); JPasswordField passwordField=new JPasswordField(); passwordField.setBounds(177, 214, 302, 24); passwordField.setFont(new Font("宋体",Font.PLAIN,20)); contentPane.add(passwordField); JButton button2 = new JButton("清除"); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textField.setText(""); passwordField.setText(""); } }); button2.setBounds(330, 284, 113, 27); contentPane.add(button2); //设置背景 ImageIcon imageIcon=new ImageIcon("src/picture/1.jpg"); JLabel label=new JLabel(imageIcon); label.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight()); getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); JPanel panel=(JPanel)getContentPane(); panel.setOpaque(false); JPanel panel2=new JPanel(); panel2.setOpaque(false); panel2.setLayout(null); //登陆功能 textField.setText("admin"); passwordField.setText("123"); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String str=textField.getText(); char ch[]=passwordField.getPassword(); String pass=new String(ch); /* boolean bool1= str=="admin"; boolean bool2= pass=="123"; System.out.println(bool1); System.out.println(bool2); */ if (str.equals("admin") && pass.equals("123") ){ mainpage p=new mainpage(); dispose(); } else { JOptionPane.showMessageDialog(null, "用户名或密码错误!","登陆失败!",JOptionPane.PLAIN_MESSAGE); } } }); } } ```

eclipse导出的java程序jar包无法运行

毕业设计邮件系统,用java编写的,但导出的jar包无法运行 直接双击jar包如下截图 ![图片说明](https://img-ask.csdn.net/upload/201512/18/1450439490_550582.png) 用开始运行cmd运行截图如下 ![图片说明](https://img-ask.csdn.net/upload/201512/18/1450439536_52626.png)

可执行Jar读取文件乱码

写了一个读取文本文件(UTF-8编码)的类,其中使用 BufferedReader in = new BufferedReader(new FileReader(file)); 进行文件读取,在Eclipse中运行时没有中文乱码现象,但由Eclipse导出为可执行Jar后读取文件出现乱码,请问是什么原因?

如何用java在界面上显示出进度条,此进度条可以描述出某一任务的执行进度。

在网上找了很多demo,但是都没有可以描述出任务执行进度的进度条,因为任务的具体执行时间不确定,所以不知道该怎么实现。请问有人知道该如何实现吗?毕设要用到这块,麻烦了。。。

java如何停止当前正在运行的线程,新手求解答

最近想做一个无线数据监控服务端,用java做的,面板Jframe设置了一个Jpanel,我称这个为Jpanel 1 ,在Jpanel 1中我定义了一个多选JCheckbox,有四种监控方式可选:Bluetooth,Wifi,GPRS,Zigbee。还定义了一个JButton,分为开始ON,结束OFF,然后在JPanel 1中定义了JPanel 2,JPanel 2 中我定义了JScrollPane,scrollAndSetCursor用于实现滚动以及光标相关效果,程序运行的大致过程是这样的,我先选择监控方法,(方法是多选的,我想能够同步实现这几个方法),然后点击ON按钮就开始运行服务器程序了, **重点来了** , **我现在的问题是** ,停止按钮OFF不知道怎么设置方法能够让程序停止当前的线程,我想实现的是点击OFF后,当前的监控方式运行全部停止,(就跟刚开始巡行这个程序一样,可以重新开始选择监控方式,在重新点击ON又可以重新运行),现在就是不知道怎么在jbArray[1](ON按钮的监控事件)中定义,感觉自己写的jbArray[0](ON按钮)也有问题。(我其实是想实现这四种方法可以同步运行,互不干扰,多线程运行)希望各位哥哥姐姐帮帮忙,帮我改一改jbArray[0](按钮的监听事件)以及实现jbArray[1](OFF结束当前监控方式线程事件),谢谢各位了,代码稍微有点长,我全贴上来了,辛苦各位了 package SystemTray; import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.Rectangle; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.Timer; import java.util.TimerTask; import javax.microedition.io.StreamConnection; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import BluetoothChatServer.*; import GPRSChatServer.*; import WifiChatServer.*; import ZigbeeChatServer.*; public class SystemTrayDemo extends JFrame { protected JTextArea ta = new JTextArea(20,42); protected Timer timer = new Timer(); protected boolean jbarry = false; protected TrayIcon trayIcon = null; protected SystemTrayDemo(){ this.setTitle("Data monitoring server"); TrayInit(); WinInit(); //取得当前屏幕的宽度和高度 int width=Toolkit.getDefaultToolkit().getScreenSize().width; int height=Toolkit.getDefaultToolkit().getScreenSize().height; //设置窗体大小 this.setSize(610, 470); //设置窗体初始显示的位置 this.setLocation((width-610)/2, (height-470)/2); this.setResizable(false);//设置窗体不可调整大小 //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭方式,关闭窗体时同时结束程序 final JPanel jp1 = new JPanel(); jp1.setLayout(null);//不设置的话是无法设置jp2的大小。等同于窗口的大小。 JPanel jp2=new JPanel(); jp2.setBounds(110,20,480,390); //jp2.setBounds(new Rectangle(110,15,450,350));//设置jp2的左边距、上边距、长度、高度,在jp1没设置setLayout(null);是无效的 //jp2.setBackground(Color.gray);//设置框体的背景色 //jp2.setBorder(BorderFactory.createEtchedBorder(Color.black, Color.BLUE)); //设置框体的边框 final JScrollPane jsp = new JScrollPane(ta); jp2.add(jsp,BorderLayout.CENTER); jp1.add(jp2); /*ta.setText("Start.....\n"); TimerTask task = new TimerTask(){ public void run(){ ta.append("Time: " + (System.currentTimeMillis() / 1000) + "\n"); scrollAndSetCursor(); } }; time.schedule(task, 0, 1000);*/ //super(); //enableEvents(AWTEvent.WINDOW_EVENT_MASK); //创建标签数组 JLabel[] jlArray = {new JLabel("Switch"),new JLabel("Mode")}; //创建复选框数组 final JCheckBox[] jcbArray = {new JCheckBox("Bluetooth",true),new JCheckBox("Wifi"),new JCheckBox("GPRS"), new JCheckBox("Zigbee")}; //创建按钮数组 final JButton[] jbArray = {new JButton("ON"),new JButton("OFF")}; //设置布局管理器 for(int i=0;i<4;i++){ //设置复选按钮的大小位置 jcbArray[i].setBounds(10,185+i*30,80,30); //将复选按钮添加到JPanel中 jp1.add(jcbArray[i]); //设置标签与普通按钮的大小位置 if(i>1){ continue; } //continue后的语句不在执行。。 jlArray[i].setBounds(30,20+i*140,80,30); jbArray[i].setBounds(10,50+i*45,80,30); //将标签与普通按钮添加到JPanel中 jp1.add(jlArray[i]); jp1.add(jbArray[i]); } this.add(jp1); //为普通按钮注册动作事件监听器。 //开始按钮 **感觉这地方有问题,如何修改?????** jbArray[0].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { jbArray[0].setEnabled(jbarry); int result= JOptionPane.showConfirmDialog(null,"Start monitoring program now?","Message",JOptionPane.YES_NO_OPTION); if(result==0){ //是 StringBuffer temp0 = new StringBuffer(); for(int i = 0;i<4;i++){ if(jcbArray[i].isSelected()){ String tmpstr; tmpstr = jcbArray[i].getText()+" monitoring method "; ta.append(tmpstr + "\n"); temp0.append(tmpstr); } } if(temp0.length()==0){ JOptionPane.showMessageDialog(null,"The monitoring method can't be empty!","Message",JOptionPane.WARNING_MESSAGE); jbArray[0].setEnabled(!jbarry); } //蓝牙线程 Thread Bluetooth = new Thread(){ public void run() { if(jcbArray[0].isSelected()){ new BluetoothRemoteServer(); } } }; //Bluetooth.setName("Bluetooth"); //String name0 = Bluetooth.getName(); //ta.append(name0+" start\n"); Bluetooth.start(); //Wifi线程 Thread Wifi = new Thread(){ public void run() { if(jcbArray[1].isSelected()){ new WifiRemoteServer(); } } }; //Wifi.setName("Wifi"); // String name1 = Wifi.getName(); // ta.append(name1+" start\n"); Wifi.start(); //GPRS线程 Thread GPRS = new Thread(){ public void run() { if(jcbArray[2].isSelected()){ new GPRSRemoteServer(); } } }; //GPRS.setName("GPRS"); //String name2 = GPRS.getName(); //ta.append(name2+" start\n"); GPRS.start(); //Zigbee线程 Thread Zigbee = new Thread(){ public void run() { if(jcbArray[3].isSelected()){ new ZigbeeRemoteServer(); } } }; //Zigbee.setName("Zigbee"); //String name3 = Zigbee.getName(); //ta.append(name3+" start\n"); Zigbee.start(); } if(result==1){ //否 jbArray[0].setEnabled(!jbarry); } } }); //结束按钮 **如何实现点击jbArray[1]后能够停止前面jbArray[0]中选择的监控方式的线程?????** jbArray[1].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int result= JOptionPane.showConfirmDialog(null,"End monitoring program now?","Message",JOptionPane.YES_NO_OPTION); if(result==0){ //是 for(int i=0; i<jcbArray.length; i++){ jcbArray[i].setSelected(false); } ta.setText(null); //后续功能完善 jbArray[0].setEnabled(!jbarry); } if(result==1){ //否 } } }); } //托盘的功能选项设置 public void TrayInit(){ if(SystemTray.isSupported()){ //检查当前系统是否支持系统托盘 SystemTray tray = SystemTray.getSystemTray();//获取表示桌面托盘区的 SystemTray 实例。 URL imageUrl=SystemTrayDemo.class.getResource("java.png"); ImageIcon icon = new ImageIcon(imageUrl); //Image image = Toolkit.getDefaultToolkit().getImage("D:\\kissjava.gif"); PopupMenu popupMenu = new PopupMenu(); //为托盘添加右键菜单 MenuItem exitItem = new MenuItem("Exit"); //退出exitItem按钮 exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ System.exit(0); }catch(Exception ex) { ex.printStackTrace(); } } }); popupMenu.add(exitItem); //创建带指定图像、工具提示和弹出菜单的 TrayIcon trayIcon = new TrayIcon(icon.getImage(), "System is running", popupMenu); trayIcon.addMouseListener(new java.awt.event.MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2){ showIT(true); } } }); try{ tray.add(trayIcon); // 将 TrayIcon 添加到 SystemTray。 } catch (AWTException e) { System.err.println(e); } }else{ JOptionPane.showMessageDialog(null,"The operating system does not support tray","Message",JOptionPane.ERROR_MESSAGE); } } //窗体的菜单功能选项设置 public void WinInit(){ JMenuBar menubar = new JMenuBar();//为窗体添加菜单功能 setJMenuBar(menubar); //开关option选项 /*前端添加小图标 * JMenu option = new JMenu("开关"); * Icon startIcon = new ImageIcon("image/bluetooth.png"); JMenuItem start = new JMenuItem("开始",startIcon); */ //设置setting选项 JMenu setting = new JMenu("Setting"); JMenu language = new JMenu("Language"); setting.add(language); JMenuItem language1 = new JMenuItem("中文"); language.add(language1); JMenuItem language2 = new JMenuItem("English"); language.addSeparator(); language.add(language2); JMenu update = new JMenu("Update"); setting.addSeparator(); setting.add(update); JMenuItem update1 = new JMenuItem("Version update"); update.add(update1); update1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"please send the mail to zhouwenquan2012552061@Gmail.com","Message",JOptionPane.PLAIN_MESSAGE); } }); //关于help选项 JMenu help = new JMenu("Help"); JMenuItem about = new JMenuItem("About"); help.add(about); //后续功能完善 about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null," Copyright @2013 popcorn\n All Right Reserved\n author popcorn\n version 1.0","Message",JOptionPane.PLAIN_MESSAGE); } }); menubar.add(setting); menubar.add(help); } /** 该方法用于实现滚动以及光标相关效果 */ public void scrollAndSetCursor(){ // ta.requestFocus(); ta.setSelectionStart(ta.getText().length()); } public void showIT(boolean visable){ if(this.isVisible() != visable) this.setVisible(visable); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable(){ public void run(){ new SystemTrayDemo().setVisible(true);//设置窗体显示 } }); } }

Java图形类是如何绘图的

如题,java图形库为awt和swing,这些类库中元件均为继承关系,基础类分别是Component与JComponent,当我们继承自这些组件的类运行时,桌面便开始绘制并形成图形,关于这个绘图的“动作”在类库中我一直没找到,在component中有个Graphics有关的变量,似乎是做边框的,而Graphics只是个接口,并没有作图“动作”的实现,后面所有的组件也没有发现对这个接口的实现。还有一个Piont类,继承自Piont2D,似乎是描点的,里面有想x,y坐标的成员变量,但也同样没有画的“动作”,前后都没找到具体实现。 抽象类Graphics里面有个drawLine()方法,应该是画直线的,里面各种坐标的定义也都是全的,这个drawLine()方法依然无定义,而且前后各组件中再也没找到这个方法的实现。 只有两种原因:1,的确存在一个画图的“动作”,应该是一种方法。2,不存在这个动作,编译器在读取到这些点啊线啊的接口类的时候会“明白”我们的意思,直接调用我们在这些类中的想x,y等坐标来绘制图形。 那么,如果是情况1,请问这个动作方法在哪呢,我一个都没找到。如果是情况2,那么这个编译器难道会侦听么,一单发现这些点啊线的类参数有变化,接开始执行画图操作。 请问大牛图形的”画“究竟是如何实现的呢。

利用Java的socket编程,实现本地聊天(只模拟发送数字)

源码如下: package myqq; import java.io.BufferedInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Chat { public static void main(String[] args){ SendMessage sendMessage = new SendMessage(); ReceiptMessage receiptMessage = new ReceiptMessage(); sendMessage.start(); receiptMessage.start(); } } class SendMessage extends Thread{ public void run() { System.out.println("发送线程已启动!"); try{ Socket c = new Socket("127.0.0.1", 9000); Scanner input = new Scanner(System.in); OutputStream os = c.getOutputStream(); int msg = 0; while(msg!=886){ msg = input.nextInt(); os.write(msg); } os.close(); c.close(); }catch (Exception e) { System.out.println("服务器异常,停止服务"); e.printStackTrace(); } } } class ReceiptMessage extends Thread{ public void run() { System.out.println("接收线程已启动!"); try{ ServerSocket ss = new ServerSocket(9000); System.out.println("服务器端开始监听9000端口"); //获取输入流 Socket s = null; InputStream is = new BufferedInputStream(null); int msg = 0; do{ s = ss.accept(); is = s.getInputStream(); msg = is.read(); System.out.println(msg); } while(msg!=886); is.close(); s.close(); }catch (Exception e) { System.out.println("服务器异常,停止服务"); e.printStackTrace(); } } } 问题:编译能通过,执行时报错![图片说明](https://img-ask.csdn.net/upload/201701/10/1484042256_84246.png) 这个什么问题啊?

java 实现省市区三级联动时jcombobox的监听问题

如题,想要通过读取Excel文件(一列id,一列地区名称)来实现,但是目前可以实现省市两级, 在区上遇到了combobox框的监听问题。希望通过选中下拉框的选项,调取该选项对应的id,来传给下一级来筛序,在调试的过程中发现程序会自动执行市级组合框的监听,结果是找不到匹配的选项。 贴上代码: ```java package area; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.FileInputStream; import java.io.InputStream; /** * Created by zhigeek on 2016/11/8. */ public class SecondComboboxDemo { Frame frame = new JFrame("JComboBox Demo"); JComboBox jcb1, jcb2, jcb3; JTextArea ta = new JTextArea(0, 30); // 用于显示结果的文本区 String[] No1 = null, No2 = null; String[] itemList; String[] itemList2; String[] itemList3; JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JPanel p4 = new JPanel(); JPanel p5 = new JPanel(); Border etched = BorderFactory.createEtchedBorder(); // 创建边框 Border border = BorderFactory.createTitledBorder(etched, "Uneditable JComboBox"); // 表框加上标题 public static void main(String args[]) { SecondComboboxDemo cbd = new SecondComboboxDemo(); //String[] No1 = getNo1Lever(); //String[] No2 = getNo2Lever(1); cbd.go(); } public static String[] getNo1Lever() { InputStream is; String[] no1List = null; int j = 0; try { is = new FileInputStream("中国各地区代码表.xls"); jxl.Workbook workbook = Workbook.getWorkbook(is); Sheet rs = workbook.getSheet(0); int row = rs.getRows(); no1List = new String[35]; for (int i = 0; i < row; i++) { Cell cell = rs.getCell(0, i); int cellsize = Integer.parseInt(cell.getContents()); if (cellsize / 10 <= 9) { Cell cell2 = rs.getCell(1, i); //System.out.println(cell2.getContents()); no1List[j] = cell2.getContents(); j++; } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return no1List; } public static String[] getNo2Lever(int no1) { InputStream is; String[] no2List = null; try { is = new FileInputStream("中国各地区代码表.xls"); jxl.Workbook workbook = Workbook.getWorkbook(is); Sheet rs = workbook.getSheet(0); int row = rs.getRows(); int j = 0; no2List = new String[50]; for (int i = 0; i < row; i++) { Cell cell = rs.getCell(0, i); int Cell2 = Integer.parseInt(cell.getContents()); if (Cell2 / 100 == no1 && Cell2 / 100 < 99) { Cell cell2 = rs.getCell(1, i); //System.out.println(cell2.getContents()); no2List[j] = cell2.getContents(); j++; } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return no2List; } public static String[] getNo3Lever(int no2) { InputStream is; String[] no3List = null; try { is = new FileInputStream("中国各地区代码表.xls"); jxl.Workbook workbook = Workbook.getWorkbook(is); Sheet rs = workbook.getSheet(0); int row = rs.getRows(); int cell3 = 0; int j = 0; no3List = new String[50]; for (int i = 0; i < row; i++) { Cell cell = rs.getCell(0, i); //int cellsize=cell.toString().length(); int Cell2 = Integer.parseInt(cell.getContents()); if (Cell2 / 100 == no2) { Cell cell2 = rs.getCell(1, i); //System.out.println(cell2.getContents()); no3List[j] = cell2.getContents(); j++; } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return no3List; } public void go() { // 创建内部JPanel容器 itemList = getNo1Lever(); jcb1 = new JComboBox(itemList); jcb1.setSelectedIndex(0); // 设置第4个可选项为当前的显示项 // // p1.add(jcb1); // p1.setBorder(border); // 添加4个可选项 itemList2 = getNo2Lever(11); jcb2 = new JComboBox(itemList2); // 将jcb2设置为可编辑的 jcb2.setEditable(true); //itemList3 = getNo3Lever(0); jcb3 = new JComboBox(); // 将jcb2设置为可编辑的 jcb3.setEditable(true); p1.add(jcb1); border = BorderFactory.createTitledBorder(etched, " 省直辖市"); p1.setBorder(border); p2.add(jcb2); border = BorderFactory.createTitledBorder(etched, " 区市"); p2.setBorder(border); p5.add(jcb3); border = BorderFactory.createTitledBorder(etched, "县"); p5.setBorder(border); JScrollPane jp = new JScrollPane(ta); p3.setLayout(new BorderLayout()); p3.add(jp); border = BorderFactory.createTitledBorder(etched, "Results"); p3.setBorder(border); ActionListener a1 = new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox jcb = (JComboBox) e.getSource(); if (jcb == jcb1) { int no1 = 0; InputStream is; try { is = new FileInputStream("中国各地区代码表.xls"); jxl.Workbook workbook = Workbook.getWorkbook(is); Sheet rs = workbook.getSheet(0); int row = rs.getRows(); for (int i = 0; i < row; i++) { Cell cell = rs.getCell(0, i); Cell cell2 = rs.getCell(1, i); if (cell2.getContents().equals(jcb1.getSelectedItem())) { int cell3 = Integer.parseInt(cell.getContents()); no1 = cell3; break; } else{ } } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jcb2.removeAllItems(); // 去除所有选项 p2.remove(jcb2); itemList2 = getNo2Lever(no1); jcb2 = new JComboBox(itemList2); jcb2.setEditable(true); p2.add(jcb2); border = BorderFactory.createTitledBorder(etched, "Editable JComboBox"); } } }; jcb2.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { int no2 = 0; InputStream is2; //String[] no1List = null; try { is2 = new FileInputStream("中国各地区代码表.xls"); jxl.Workbook workbook = Workbook.getWorkbook(is2); Sheet rs = workbook.getSheet(0); int row = rs.getRows(); for (int i = 0; i < row; i++) { Cell cell = rs.getCell(0, i); Cell cell2 = rs.getCell(1, i); //int cellsize=Integer.parseInt(cell.getContents()); //String a=jcb.getSelectedItem(); if (cell2.getContents().equals(jcb2.getSelectedItem())) { int cell3 = Integer.parseInt(cell.getContents()); no2 = cell3; } } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } jcb3.removeAllItems(); // 去除所有选项 p5.remove(jcb3); itemList3 = getNo3Lever(no2); jcb3 = new JComboBox(itemList3); jcb3.setEditable(true); p5.add(jcb3); border = BorderFactory.createTitledBorder(etched, "Editable JComboBox"); } } }); jcb1.addActionListener(a1); //jcb2.addActionListener(a2); p4.setLayout(new GridLayout(0, 1)); p4.add(p1); p4.add(p2); p4.add(p5); Container cp = ((JFrame) frame).getContentPane(); cp.setLayout(new GridLayout(0, 1)); cp.add(p4); cp.add(p3); ((JFrame) frame).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } ``` 这是excel文件的存储格式 ![图片说明](https://img-ask.csdn.net/upload/201611/10/1478786496_180362.png) 求好心人解答

一个简单的java图形绘制

题目大意:做一个简单的交通灯,要求框架里有三个单选按钮(red,green,yellow),一组交通指示灯(三个灯泡)。选择单选按钮后,相应的灯会亮,一次只能亮一种灯。 以下是我的程序,执行以后面板上有按钮,可就是没有图像,求各位指点啊 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TrafficLight extends JFrame { PaintPanel paintPanel=new PaintPanel();//申请画图面板,按钮面板和三个单选按钮 JPanel buttons=new JPanel(); JRadioButton red=new JRadioButton("red"); JRadioButton green=new JRadioButton("green"); JRadioButton yellow=new JRadioButton("yellow"); TrafficLight() { ButtonGroup ni=new ButtonGroup();//将单选按钮加入按钮组 ni.add(red); ni.add(green); ni.add(yellow); buttons.setLayout(new FlowLayout());//将单选按钮加入按钮面板 buttons.add(red); buttons.add(green); buttons.add(yellow); setLayout(new BorderLayout());//将按钮面板和画图面板加入框架 add(paintPanel,BorderLayout.NORTH); add(buttons,BorderLayout.SOUTH ); red.addActionListener(new ActionListener(){//为三个单选按钮设置监听 public void actionPerformed(ActionEvent e){repaint();}}); yellow.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){repaint();}}); green.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){repaint();}}); } public class PaintPanel extends JPanel { protected void paintComponent(Graphics g) { super.paintComponents(g); g.drawRect(getWidth()/2-10,20, 20, 60);//按要求绘制交通灯 if(!red.isSelected()) g.drawOval(getWidth()/2,30,15,15);//亮红灯 else g.fillOval(getWidth()/2,30,15,15);//熄灭红灯 if(!green.isSelected()) g.drawOval(getWidth()/2,50,15,15);//亮绿灯 else g.fillOval(getWidth()/2,50,15,15);//熄灭绿灯 if(!yellow.isSelected()) g.drawOval(getWidth()/2,70,15,15);//亮黄灯 else g.fillOval(getWidth()/2,70,15,15);//熄灭黄灯 } } public static void main(String [] args)//主函数 { TrafficLight mine=new TrafficLight(); mine.setTitle("TrafficLight"); mine.setSize(800,500); mine.setVisible(true); } }

JAVA,点击鼠标后移除按钮,的程序。我想知道如何能做到,以及我这样不能做到的原因。

抱歉,第一次使用CSDN问答,格式不太规范请多多见谅。 在做三连棋游戏,发现问题,逐步筛选,最后确定了是这个问题。 public void actionPerformed(ActionEvent e){ container.remove(spots[0]); } 此代码无效,鼠标点击时就会发生错误。 而container.remove(spots[0]);这行代码放在其他方法中不会出现任何问题。 以下是缩减后的完整代码,可直接复制到记事本中测试。 ---------- import javax.swing.*; import java.awt.*; import java.awt.event.*; public class demo extends JFrame implements ActionListener{ //定义按钮 JButton spots[] = new JButton[1]; Container container; //构造方法 public demo(){ super("按钮"); setSize(120,140); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //装载组件的容器 Container container = getContentPane(); //设置布局管理器为空布局 container.setLayout(null); spots[0] = new JButton(); //设置按钮的位置与大小 spots[0].setBounds(8, 3, 100, 100); //将按钮添加到容器中 container.add(spots[0]); //按钮加入动作监听器 spots[0].addActionListener(this); } //动作监听时执行该方法 public void actionPerformed(ActionEvent e){ container.remove(spots[0]); } //在main函数中运行 public static void main (String[] args){ new demo(); } } 呃,格式还是有些掌握不好。

关于工程打成jar包以后找不到main函数不能运行

用SWT作一个小东西 项目主体在MyEclipse中运行没有错误,打jar包过程也没有提示报错,但是打成jar包以后无法运行 报错提示:Could not find the Mian.Program will exit. 项目引用了几个其他的外部jar包,如数据库连接的jar包。 求解,有没有前辈们可以给我回答

JFrame的JButton点击事件无法正确显示另外的界面

网上找了个程序,自己改,是一个小游戏,本来只有一个游戏界面,我想添加一个登录页面,结果就刚加了个界面就卡住了。从Fishlord类中使用main()函数可以正确显示,但是通过另外一个JFrame通过JButton点击事件调用Fishlord时无法显示,而且连右上角的关闭按钮都不能点击! 代码在下面: 这个界面有按钮,点击按钮跳转到下面那个iframe,在JButton点击事件里使用new的方法 package fishhh; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class Login { private static JFrame frame; public static void main(String[] args) throws Exception { // 窗体大小 frame = new JFrame(); frame.setSize(800, 480); frame.setLayout(null);//设置布局管理器为空 JButton button = new JButton("登 录"); button.setBounds(new Rectangle(280, 210, 220, 30));//参数分别是坐标x,y,宽,高 frame.add(button); JTextField tfUser = new JTextField(); tfUser.setBounds(new Rectangle(280, 140, 220, 25)); frame.add(tfUser); JPasswordField tfPwd = new JPasswordField(); tfPwd.setBounds(new Rectangle(280, 170, 220, 25)); frame.add(tfPwd); // 显示窗体 frame.setVisible(true); ImageIcon img = new ImageIcon("bg.jpg");// 这是背景图片 JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。 frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE)); imgLabel.setBounds(0, 0, frame.getWidth(), frame.getHeight()); Container cp = frame.getContentPane(); cp.setLayout(null); ((JPanel) cp).setOpaque(false); // 这样就能显示出背景图片出来了 button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //创建新的窗口 frame.setVisible(false); try { new Fishlord(); } catch (Exception e1) { e1.printStackTrace(); } } }); } public void close(){ frame.dispose(); } } 跳转到这个界面 package fishhh; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; public class Fishlord { public static void main(String[] args) throws Exception { new Fishlord(); } public Fishlord() throws Exception{ JFrame frame = new JFrame("捕鱼达人"); Pool pool = new Pool(); frame.add(pool); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭窗口时关闭程序 frame.setSize(800, 480); frame.setLocationRelativeTo(null);// 设置窗口居中,必须放在setSize之后 frame.setResizable(false);// 不允许用户改变窗口大小 frame.setVisible(true); pool.action(); } } class Pool extends JPanel { BufferedImage background = null; Fish fish = null;; Fish[] fishs = new Fish[9]; Net net = null; int score = 0; int fontsize = 20; Font font = new Font("楷体", Font.BOLD, fontsize); Pool() throws IOException { // background = ImageIO.read(new File("bg.jpg")); //读取工程目录图片 background = ImageIO.read(getClass().getResourceAsStream("/images/bg.jpg")); /** * 1)getClass().getResourceAsStream()方法读取的是src/images包下的图片 2)background * = ImageIO.read(new File("images/bg.jpg")); * 这个方法读取的是工程CatchFish/images文件夹下的图片 */ for (int i = 0; i < 9; i++) { fish = new Fish("fish0" + (i + 1)); fishs[i] = fish; fish.start(); } } public void paint(Graphics g) { // paint什么时候调用? // System.out.println("paint"); g.drawImage(background, 0, 0, null); for (int i = 0; i < fishs.length; i++) { Fish tempfish = fishs[i]; g.drawImage(tempfish.fishimage, tempfish.x, tempfish.y, null); } if (net.show) { g.drawImage(net.netimage, net.x - net.width / 2, net.y - net.height / 2, null); } g.setFont(font); g.setColor(Color.white); g.drawString("SCORE:", 10, 20); g.setColor(Color.red); g.drawString(" " + score, 10, 20); } public void action() throws Exception { net = new Net(); MouseAdapter m = new MouseAdapter() { public void mouseEntered(MouseEvent e) { net.show = true; } public void mouseExited(MouseEvent e) { net.show = false; } // 在鼠标移动时候执行 public void mouseMoved(MouseEvent e) { // MouseEvent 鼠标事件:鼠标事件发生时间地点人物 long time = e.getWhen(); int x = e.getX(); int y = e.getY(); // Object o=e.getSource();//发生事件的物体pool net.x = x; net.y = y; } public void mousePressed(MouseEvent e) { catchFish();// catch:抓鱼 在鼠标按下的时候,进行抓鱼操作 } }; // 在当前方法中代表当前的 这个(this)pool对象 this.addMouseListener(m); // 处理这个pool对象鼠标动作 this.addMouseMotionListener(m); net.show = true;// 调试代码 while (true) { // System.out.println("repaint"); repaint(); try { Thread.sleep(80); } catch (Exception e) { e.printStackTrace(); } } } protected void catchFish() { // 鱼在不在网的范围内?在的话就让鱼消失 for (int i = 0; i < fishs.length; i++) { fish = fishs[i]; if (fish.contains(net.x, net.y)) {// 判断在不在网的范围 fish.getOut(); score += fish.width / 10; } } } } class Fish extends Thread { int x, y, index = 0, width, height, step; BufferedImage fishimage; BufferedImage[] fishimages = new BufferedImage[9]; Random r; Fish(String fishname) throws IOException { // System.out.println("Fish()"); for (int i = 0; i < 9; i++) { // BufferedImage tempfishimage = ImageIO.read(new File(fishname + // "_0" // + (i + 1) + ".png")); BufferedImage tempfishimage = ImageIO.read(getClass() .getResourceAsStream( "/images/" + fishname + "_0" + (i + 1) + ".png")); fishimages[i] = tempfishimage; } fishimage = fishimages[index]; r = new Random();// 不写数字表示的是int范围内的一个数字 width = fishimage.getWidth(); height = fishimage.getHeight(); x = 790; y = r.nextInt(470 - height); step = r.nextInt(4) + 1; } public void run() { while (true) { try { Thread.sleep(50); index++; fishimage = fishimages[index % fishimages.length]; // 现在要动,所以要改变图片?300 x = x - step; if (x <= 0 || y <= 0 || y >= 480) getOut(); } catch (Exception e) { } } } // 检查(netx,nety)的坐标是否在鱼的范围之内 public boolean contains(int netx, int nety) { int dx = netx - x; int dy = nety - y; return dx >= 0 && dx <= width && dy >= 0 && dy <= height; } void getOut() { Random r = new Random(); x = 790; y = r.nextInt(470 - height); step = r.nextInt(4) + 1; } } class Net { // 网的位置随着鼠标指针的移动而移动 BufferedImage netimage = null; int x = 0, y = 0, width, height; boolean show;// 是否显示当前网对象 Net() throws Exception { // netimage = ImageIO.read(new File("net09.png")); netimage = ImageIO.read(getClass().getResourceAsStream( "/images/net09.png")); show = false; width = netimage.getWidth(); height = netimage.getHeight(); } }

想问一下如何在日历系统里插入图片

大二萌新做课设风景日历制作系统,图片不会插入,希望向各位大佬求助 ``` import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; public class MyCalendar extends JApplet { //定义星期天到星期六全局变量 public static final String WEEK_SUN = "星期日"; //星期标签名称 public static final String WEEK_MON = "星期一"; public static final String WEEK_TUE = "星期二"; public static final String WEEK_WED = "星期三"; public static final String WEEK_THU = "星期四"; public static final String WEEK_FRI = "星期五"; public static final String WEEK_SAT = "星期六"; public static final Color background = Color.white; //设置背景颜色 public static final Color foreground = Color.black; //设置前景颜色 public static final Color headerBackground = Color.blue; //设置题头星期的背景颜色 public static final Color headerForeground = Color.white; //设置题头星期的前景颜色 public static final Color selectedBackground = Color.green; //设置被选中的日期的背景颜色 public static final Color selectedForeground = Color.white; //设置被选中的日期的前景颜色 private JPanel cPane; //日历面板 private JLabel yearsLabel; //"年份"标签 private JSpinner yearsSpinner; //年调控,年份组合框 private JLabel monthsLabel; //"月份"标签 private JComboBox monthsComboBox;//12月下拉框 private JTable daysTable; //用来显示日期的table,日表格 private AbstractTableModel daysModel;//天单元表格 private Calendar calendar; //日历对象 //函数定义 public MyCalendar() { //构造函数 cPane = (JPanel) getContentPane(); } public void init() { //初始化,对所有的空间进行布局,面板界面函数 cPane.setLayout(new BorderLayout()); //使用border布局管理器 calendar = Calendar.getInstance();//默认方式,以本地的时区和地区来构造Calendar yearsLabel = new JLabel("年份: ");//设置年份标签显示 yearsSpinner = new JSpinner();//构造年份spinner组合框 yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000")); yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR))); //增加监听 监听年份的改变 yearsSpinner.addChangeListener(new ChangeListener() {//注册该组合框的事件监听器 public void stateChanged(ChangeEvent changeEvent) { int day = calendar.get(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue()); int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day); updateView();//更新显示 } }); JPanel yearMonthPanel = new JPanel();//定义年月面板 cPane.add(yearMonthPanel, BorderLayout.NORTH);//添加年月面板到日历面板的南面(最上方) yearMonthPanel.setLayout(new BorderLayout());//边布局模式 yearMonthPanel.add(new JPanel(), BorderLayout.CENTER); JPanel yearPanel = new JPanel();//构建年份面板 yearMonthPanel.add(yearPanel, BorderLayout.WEST);//年份面板添加到年月面板西部(左边) yearPanel.setLayout(new BorderLayout());//设置年份面板为边布局并添加年份标签和组合框 yearPanel.add(yearsLabel, BorderLayout.WEST); yearPanel.add(yearsSpinner, BorderLayout.CENTER); monthsLabel = new JLabel("月份: "); //设置月份标签显示 monthsComboBox = new JComboBox(); //向月份下拉框中增加内容 for (int i = 1; i <= 12; i++) { //构造下拉框的12个月份 monthsComboBox.addItem(new Integer(i)); } monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));//下拉框当前月份为选中状态 monthsComboBox.addActionListener(new ActionListener() { //注册月份下拉框的事件监听器 public void actionPerformed(ActionEvent actionEvent) { int day = calendar.get(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex()); int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day); updateView();//更新面板显示 } }); JPanel monthPanel = new JPanel();//定义月份面板 yearMonthPanel.add(monthPanel, BorderLayout.EAST);//添加月份面板到年月面板的东面(右面) monthPanel.setLayout(new BorderLayout());//月份面板设为边布局方式 monthPanel.add(monthsLabel, BorderLayout.WEST);//添加月份名称标签到月份面板西面(左面) monthPanel.add(monthsComboBox, BorderLayout.CENTER);//添加月份下拉框到月份面板中间 daysModel = new AbstractTableModel() { //设置7行7列 public int getRowCount() { //设置7行 return 7; } public int getColumnCount() { //设置列7 return 7; } public Object getValueAt(int row, int column) { if (row == 0) { //第一行显示星期 return getHeader(column); } row--; Calendar calendar = (Calendar) MyCalendar.this.calendar.clone(); calendar.set(Calendar.DAY_OF_MONTH, 1); int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1; int index = row * 7 + column; int dayIndex = index - moreDayCount + 1; if (index < moreDayCount || dayIndex > dayCount) { return null; } else { return new Integer(dayIndex); } } }; daysTable = new CalendarTable(daysModel, calendar);//构造日表格 //设置每个call可以被选中 daysTable.setCellSelectionEnabled(true);//设置表格单元格可选择 daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String text = (value == null) ? "" : value.toString(); JLabel cell = new JLabel(text); cell.setOpaque(true);//绘制边界内的所有像素 if (row == 0) {//第一行显示星期,设置为星期的前景色和背景色 cell.setForeground(headerForeground); cell.setBackground(headerBackground); } else { if (isSelected) {//日期单元格如果选中,则设置为日期选中的前、背景色 cell.setForeground(selectedForeground); cell.setBackground(selectedBackground); } else { //设置日期单元格的普通前、背景色 cell.setForeground(foreground); cell.setBackground(background); } } return cell; } }); updateView(); cPane.add(daysTable, BorderLayout.CENTER);//添加日面板到日历面板中间 } public static String getHeader(int index) {//设置第一行星期的显示 switch (index) { case 0: return WEEK_SUN; case 1: return WEEK_MON; case 2: return WEEK_TUE; case 3: return WEEK_WED; case 4: return WEEK_THU; case 5: return WEEK_FRI; case 6: return WEEK_SAT; default: return null; } } public void updateView() {//更新面板显示方法 daysModel.fireTableDataChanged(); daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH), calendar.get(Calendar.WEEK_OF_MONTH)); daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1, calendar.get(Calendar.DAY_OF_WEEK) - 1); } //设置日历的table public static class CalendarTable extends JTable {//表格类 private Calendar calendar; public CalendarTable(TableModel model, Calendar calendar) {//构造方法 super(model); this.calendar = calendar; } public void changeSelection(int row, int column, boolean toggle, boolean extend) {//选择表格单元格时 super.changeSelection(row, column, toggle, extend); if (row == 0) {//选择为第一行(星期)时不改变单元格 return; } Object obj = getValueAt(row, column); if (obj != null) { calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue()); } } } //让applet作为一个可执行的程序来运行 public static void main(String[] args) { JFrame frame = new JFrame("Calendar Application"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyCalendar myCalendar = new MyCalendar(); myCalendar.init(); frame.getContentPane().add(myCalendar); frame.setSize(400, 250); frame.show(); } } ```

有没有大神能指点一下哪里错了。。。。

package Frame; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.*; import db.DButil; public class login extends JFrame implements ActionListener{ private JPanel jp=new JPanel(); //创建标签数组 private JLabel[] jlArray={new JLabel("用户名"), new JLabel("密 码"),new JLabel("")}; private JButton jb1; private JButton jb2; private JButton jb3; private JTextField jtf=new JTextField(); private JPasswordField jpf=new JPasswordField(); //布局构造实现方法 public login(){ Icon icon1=new ImageIcon("login.jpg"); Icon icon2=new ImageIcon("reset.jpg"); Icon icon3=new ImageIcon("zhuce.jpg"); JPanel jp=new JPanel(){ protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); Image img = icon.getImage(); g.drawImage(img, 0, 0, icon.getIconWidth(), icon.getIconHeight(), icon.getImageObserver()); }}; jp.setLayout(null); jb1=new JButton(icon1); jb2=new JButton(icon3); jb3=new JButton(icon2); jlArray[0].setBounds(70,120,90,32); jb1.setBounds(365,110,130,60); jb2.setBounds(365,170,130,60); jlArray[1].setBounds(70,170,90,32); //将标签与按钮添加到JPanel容器中 jp.add(jlArray[0]); jp.add(jlArray[1]); jp.add(jb1); jp.add(jb2); jb1.addActionListener(this); jb2.addActionListener(this);//为按钮注册动作事件监听器 //添加修改密码的按钮 jb3.setBounds(365,230,130,60); jp.add(jb3); jp.add(jtf); jtf.setBounds(140,120,180,30);//设置文本框位置 jp.add(jpf); jpf.setBounds(140,170,180,30);//设置密码框位置 jpf.setEchoChar('*'); //密码显示字符形式 jpf.addActionListener(this); //为密码框注册动作事件监听器 this.setVisible(true);//设置窗体的可见性 jpf.addActionListener(this); //为密码框注册动作事件监听器 //设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器 jlArray[2].setBounds(70,220,300,30); jp.add(jlArray[2]); this.setTitle("登陆");//设置窗体标题 this.setBounds(450,200,500,318);//设置窗体的大小 this.setResizable(false);//设置窗体不让用户调整大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true);//设置窗体的可见性 this.add(jp);//将窗体添加到面板中 jp.setBackground(Color.blue); } public static void main(String[] args) { new login();//创建登陆窗体 } public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //得到用户名与密码 String user=jtf.getText().trim(); String pwd=String.valueOf(jpf.getPassword());//返回密码的字符串表示方式 String sql=""; if(e.getSource()==jtf){//事件源为文本框,切换焦点到密码框 jpf.requestFocus(); } else if(e.getSource()==jb1||e.getSource()==jpf){ //判断用户名和密码是否匹配 查询数据库 if(DButil.check(user, pwd)){ //登陆成功 MainFrame mf=new MainFrame(jtf.getText());//主窗体 this.dispose(); } else{ //登陆失败 jlArray[2].setText("对不起,非法的用户名和密码"); this.clear(); } } else if(e.getSource()==jb2) {//事件源为注册按钮 if(user.equals("")||pwd.equals("")) {//如果注册的用户名为空或者密码为空 jlArray[2].setText("用户名和密码都不得为空!!!"); this.clear();//清空输入文本框 } else { sql="select uid from user where uid='"+user+"'"; if(DButil.isExist(sql)) {//用户名已经存在 jlArray[2].setText("对不起,用户名已存在!!!"); this.clear();//清空输入文本框 } else { sql="insert into user values('"+user+"','"+pwd+"')"; if(DButil.update(sql)>0) {//注册成功 jlArray[2].setText("恭喜您!!!注册成功,请登陆"); } } } } else if(e.getSource()==jb3)//修改密码的监听 { //判断是否已经输入用户名和密码 if(user.equals("")||pwd.equals("")) { jlArray[2].setText("修改密码先输入正确的用户名和密码!!!"); this.clear();//清空输入文本框 } //判断是否输入了正确的用户名和密码 else if(DButil.check(user,pwd)) { //正确的用户名和密码 String password=JOptionPane.showInputDialog(this,"修改密码:","请输入新密码", JOptionPane.PLAIN_MESSAGE); //得到新的密码为空 if(password==null||password.equals("")) { JOptionPane.showMessageDialog(this,"密码不得为空!!!","错误", JOptionPane.WARNING_MESSAGE); } else {//密码不为空 sql="update user set pwd='"+password+"' where uid='"+user+"'";//更新密码的SQL if(DButil.update(sql)>0) {//密码修改成功 this.clear();//清空输入文本框 jlArray[2].setText("恭喜您!!!密码修改成功,请用新密码登陆"); } } } else { JOptionPane.showMessageDialog(this,"用户名或者密码错误!!!","错误", JOptionPane.WARNING_MESSAGE); this.clear();//清空输入文本框 } } } package Frame; import javax.swing.*; import javax.swing.table.DefaultTableModel; import db.DButil; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.io.*; import java.util.*; public class MainFrame extends JFrame implements ActionListener,ItemListener { private String uname=null;//当前用户的名字 private boolean isInsert=false;//是否为添加默认为否 private JPanel topjp=new JPanel();//界面上半部分的JPanel容器 private JButton jba=new JButton("模糊查询"); private JButton jbs=new JButton("查找"); private JTextField jtfs=new JTextField();//按给出信息查找联系人信息 private JRadioButton jrbxm=new JRadioButton("按姓名查找",true); private JRadioButton jrbbh=new JRadioButton("按学号查找",false); private ButtonGroup bg=new ButtonGroup();//单选按钮组 private JPanel jpbr=new JPanel();//单选按钮面板 private JPanel jpyInfo=new JPanel();//右侧显示个人信息的面板 private JTextArea jta=new JTextArea(); // 模糊查询得到的信息文本区 private JLabel[] jlInfo={new JLabel("学号:"),new JLabel("姓名:"), new JLabel("性别:"),new JLabel("出生日期:"), new JLabel("电话号码:"),new JLabel("QQ:"), new JLabel("Email:"),new JLabel("地址:"), new JLabel("添加相片")}; private JButton[] jbInfo={new JButton("编辑"),new JButton("保存"), new JButton("浏览"), new JButton("上传"),}; private JLabel jlPhoto=new JLabel();//显示图像的JLabel控件 private JTextField[] jtfInfo=new JTextField[10]; private JTextField jtfPhoto=new JTextField();//添加照片到相册的路径 private JFileChooser jfcPic=new JFileChooser();//上传图像的文件选择器 private DefaultTableModel tableModel; private JTable table; //性别部分 private JRadioButton jrbMale=new JRadioButton("男",true); private JRadioButton jrbFemale=new JRadioButton("女"); private ButtonGroup bgGender=new ButtonGroup(); private JPanel jpGender=new JPanel();//单选按钮面板 private JLabel jlDetail=new JLabel();//右侧显示一幅图片的标签 private JSplitPane jspOuter=//上下分割的JSplitPane new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); //系统托盘部分 private PopupMenu popup=new PopupMenu(); private SystemTray tray;//定义SystemTray成员变量 private TrayIcon trayIcon;//定义TrayIcon成员变量 private MenuItem exit=new MenuItem("退出程序");//定义菜单 public void initJps() {//界面上半部分的初始化 topjp.setLayout(null);//设置topjp布局管理器为null //设置按钮大小并添加到JPanel面板里 jba.setBounds(5,10,120,26); jba.addActionListener(this);//为模糊查询按钮注册事件监听器 topjp.add(jba); jbs.setBounds(130,10,80,26); jbs.addActionListener(this);//为查找按钮注册事件监听器 topjp.add(jbs);//添加按钮到topjp面板里 //设置jtfs文本框大小并添加到jps面板里 jtfs.setBounds(215,10,120,26); jtfs.addActionListener(this);//为文本框注册事件监听器 topjp.add(jtfs); //设置单选按钮大小和位置并添加到jpbr面板里同时添加到bg单选按钮组里 jrbxm.setBounds(5,3,50,26); jrbxm.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbxm); jpbr.add(jrbxm); jrbbh.setBounds(60,3,50,26); jrbbh.addItemListener(this); bg.add(jrbbh); jpbr.add(jrbbh); jpbr.setBounds(360,10,200,26); topjp.add(jpbr); } public void initInfo() {//初始化信息界面 jpyInfo.setLayout(null);//设置布局管理器为空 jpyInfo.setBounds(50,50,380,360);//设置信息面板的大小和位置 jlPhoto.setBounds(220,10,150,170);//设置联系人图像JLabel的大小和位置 jlPhoto.setBorder(BorderFactory.createLineBorder(Color.BLACK));//将JLbel的边框线显现出来 jpyInfo.add(jlPhoto);//将显示联系人照片的JLabel添加到信息面板 tableModel=new DefaultTableModel(); Vector vector1 = new Vector(); DButil db = new DButil(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); tableModel.setDataVector(null, vector1); System.out.print(123); table=new JTable(tableModel); //table.addMouseListener((MouseListener) this); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane js=new JScrollPane(table); //添加相片部分的控件 jtfPhoto.setBounds(80,250,200,26);//设置得到照片路径的文本框的大小和位置 jpyInfo.add(jtfPhoto);//将得到照片路径的文本框添加到信息面板 jbInfo[2].setBounds(285,250,80,26); jbInfo[2].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[2]); //上传按钮 jbInfo[3].setBounds(380,250,80,26); jbInfo[3].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[3]); for(int i=0;i<9;i++)//添加JLabel,并设置大小和位置 { jlInfo[i].setBounds(20,10+i*30,60,26); jpyInfo.add(jlInfo[i]); } for(int i=0;i<10;i++) {//初始化一些文本框 jtfInfo[i]=new JTextField(); } //学号 jtfInfo[0].setBounds(80,10,135,26); jpyInfo.add(jtfInfo[0]); //姓名 jtfInfo[1].setBounds(80,40,135,26); jpyInfo.add(jtfInfo[1]); //出生日期 jtfInfo[3].setBounds(80,100,135,26); jpyInfo.add(jtfInfo[3]); //电话号码 jtfInfo[4].setBounds(80,130,135,26); jpyInfo.add(jtfInfo[4]); //QQ jtfInfo[5].setBounds(80,160,135,26); jpyInfo.add(jtfInfo[5]); //Email jtfInfo[6].setBounds(80,190,135,26); jpyInfo.add(jtfInfo[6]); //地址文本框的添加 jtfInfo[7].setBounds(80,220,285,26); jpyInfo.add(jtfInfo[7]); //模糊查询信息文本区的添加 js.setBounds(0,350,600,100); jpyInfo.add(js); //编辑、保存按钮 jbInfo[0].setBounds(160,300,80,26); jbInfo[0].addActionListener(this); jpyInfo.add(jbInfo[0]); jbInfo[1].setBounds(260,300,80,26); jbInfo[1].addActionListener(this); jpyInfo.add(jbInfo[1]); //性别部分 jrbMale.setBounds(5,3,50,26); jrbMale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbMale); jpGender.add(jrbMale); jrbFemale.setBounds(60,3,50,26); jrbFemale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbFemale); jpGender.add(jrbFemale); jpGender.setBounds(60,70,125,26); jpyInfo.add(jpGender); } public void clearInfo()//清空信息面板 { for(int i=0;i<10;i++) { jtfInfo[i].setText("");//清空文本框 } jlPhoto.setIcon(null);//清空图像 } public void setjtaArea(String information){ if(information.isEmpty()){ JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { jta.setText(information); } } public void setInfo(Vector<String> pInfo)//将信息向量设置到信息面板中 {//将信息向量按规则填到信息面板里 this.clearInfo(); if(pInfo.size()==0) { JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { for(int i=0;i<2;i++) {//显示联系人编号和姓名 jtfInfo[i].setText(pInfo.get(i)); } if(pInfo.get(2).equals("男")) {//显示性别 jrbMale.setSelected(true); } else {//显示性别 jrbFemale.setSelected(true); } for(int i=3;i<9;i++) {//显示出生日期、电话号码和QQ jtfInfo[i].setText(pInfo.get(i)); } } } public Vector<String> getInfo()//从信息面板得到用户输入的信息 { Vector<String> pInfo=new Vector<String>(); pInfo.add(jtfInfo[0].getText().trim());//添加pid pInfo.add(jtfInfo[1].getText().trim());//添加pname String gender=jrbMale.isSelected()?"男":"女"; pInfo.add(gender);//添加性别 pInfo.add(jtfInfo[3].getText().trim());//出生日期 pInfo.add(jtfInfo[4].getText().trim());//电话号码 pInfo.add(jtfInfo[5].getText().trim());//QQ pInfo.add(jtfInfo[6].getText().trim());//Email pInfo.add(jtfInfo[7].getText().trim());//地址 String photoPath=jtfPhoto.getText().trim();//得到照片路径 pInfo.add(photoPath);//照片路径 return pInfo; } public void monitorSaveButton() //监听保存按钮的方法 { String sql=""; String pid=jtfInfo[0].getText().trim();//得到联系人的编号 String pname=jtfInfo[1].getText().trim();//得到联系人的姓名 String gender=jrbMale.isSelected()?"男":"女"; String s1=jtfInfo[3].getText().trim(); String s2=jtfInfo[4].getText().trim(); String s3=jtfInfo[5].getText().trim(); String s4=jtfInfo[6].getText().trim(); String s5=jtfInfo[7].getText().trim(); String s6=jtfPhoto.getText().trim(); String sqla="select * from contacts where pid='"+pid+"'";//判断此编号是否存在的SQL String sqlb="select * from contacts where pname='"+pname+"'";//判断此姓名是否存在的SQL boolean isIdExist=DButil.isExist(sqla);//得到编号是否存在 boolean isNameExist=DButil.isExist(sqlb);//得到姓名是否存在 if(!(pid.equals(" ")||pname.equals(" "))) { if(isIdExist||isNameExist){ JOptionPane.showMessageDialog(this,"联系人已存在"+ " , 添加联系人失败","错误",JOptionPane.WARNING_MESSAGE); } else { sql="insert into contacts values (?,?,?,?,?,?,?,?,?,?)"; String[] paras={pid,pname,gender,s1,s2,s3,s4,s5,s6,null}; if(DButil.update(sql,paras)>0){ JOptionPane.showMessageDialog(this,"联系人保存成功","提示", JOptionPane.INFORMATION_MESSAGE); } } } } public void setEditable(boolean Editable)//设置信息窗口是否可编辑 { jrbFemale.setEnabled(Editable);//设置性别是否可编辑 jrbMale.setEnabled(Editable);//设置性别是否可编辑 for(int i=0;i<8;i++) { jtfInfo[i].setEditable(Editable);//设置文本框是否可编辑 } } public void monitorSearchButton()//监听查找按钮的方法 { String name=jtfs.getText().trim(); String sql="";//声明查找字符串 if(name.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else { if(jrbxm.isSelected()==true) {//按姓名查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pname='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } else {//按编号查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pid='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } } this.setEditable(false);//设置面板不可编辑 } public void monitorRandomSearchButton(String information){ //监听模糊查询按钮 String adress=jba.getText().trim(); String sql="";//声明查找字符串 if(adress.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else{ sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where padress like '%天河区%'"; } } public MainFrame(String uname) { //主窗体构造器 this.uname=uname;//设置用户名 this.initJps();//界面上半部分的搭建 this.initInfo(); jspOuter.setDividerLocation(46);//设置分割窗体JSplitPane的位置 jspOuter.setTopComponent(topjp);//设置窗体上半部分的控件 jspOuter.setBottomComponent(jpyInfo);//设置下半部分的控件 //设置窗体关闭按钮执行的动作 this.add(jspOuter); this.addWindowListener( new WindowAdapter() { @SuppressWarnings("deprecation") public void WindowClosing(WindowEvent e) { //将窗体隐藏 MainFrame.this.hide(); } } ); //设置主窗体的图标、标题、大小以及可见性 this.setResizable(false);//设置窗体不让调整大小 this.setTitle(uname+"的通讯录"); this.setBounds(420,80,618,550); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jbInfo[1]) {//保存按钮的监听 this.monitorSaveButton(); } else if(e.getSource()==jba) {//模糊查询按钮的监听 DButil db = new DButil(); Vector vector1 = new Vector(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); String ad = jtfs.getText().trim(); tableModel.setDataVector(db.getData(ad),vector1); } else if(e.getSource()==jbInfo[2]) {//打开图像文件路径 jfcPic.showOpenDialog(this); if(jfcPic.getSelectedFile()!=null) { jtfPhoto.setText(""+jfcPic.getSelectedFile()); } } else if(e.getSource()==jbInfo[0]) {//编辑按钮的监听 this.setEditable(true);//设置信息面板可编辑 } else if(e.getSource()==jbs||e.getSource()==jtfs) {//查找,按按钮或者在文本框里敲回车 this.monitorSearchButton(); } } public void itemStateChanged(ItemEvent e) { } public static void main(String[] args){ } } package db; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Vector; public class DButil { private static String jdbcName="org.gjt.mm.mysql.Driver";//声明驱动类字符串 //声明数据库连接字符串 private static String dbUrl="jdbc:mysql://127.0.0.1:3306/maillist"; private static String dbUserName="root"; private static String dbPassword="admin"; private static Connection con=null;//声明数据库连接对象引用 private static Statement stat=null;//声明语句对象引用 private static PreparedStatement pstmt=null; private static ResultSet rs=null;//声明结果集对象引用 private static PreparedStatement psInsert=null;//声明预编译语句对象引用 public static Connection getConnection()//得到数据库连接的方法 { System.out.println("连接中.."); try { Class.forName(jdbcName);//加载驱动类 con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//得到连接 System.out.println("成功连接"); } catch(Exception e){e.printStackTrace();} return con;//返回连接 } public static boolean check(String user,String pwd)//登陆验证 { boolean flag=false; try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("select pwd from user where uid='"+user+"'"); rs.next(); String spwd=rs.getString(1);//得到密码 if(spwd.equals(pwd)) { flag=true;//密码匹配,登陆成功 } } catch(Exception e) { flag=false;//有任何异常发生,登陆失败 } finally{DButil.closeCon();}//关闭数据库连接 return flag; } //某条记录是否存在 public static boolean isExist(String sql) { boolean flag=false;//设置返回值 try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 if(rs.next()) { flag=true;//存在,设置返回值为true } } catch(Exception e) { e.printStackTrace(); flag=false;//发生任何异常,置返回结果为false } finally{DButil.closeCon();}//关闭数据库连接 return flag;//返回结果 } public static int update(String sql,String[] paras)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); pstmt=con.prepareStatement(sql); for(int i=0; i<paras.length;i++){ pstmt.setString(i+1, paras[i]); } count=pstmt.executeUpdate(); } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } public static int update(String sql)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); stat=con.createStatement(); count=stat.executeUpdate(sql);//执行更新 } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } //====================添加联系人================================= public static String insertPerson(String uid,Vector<String> pInfo) { String isPathNull="isNotNull";//传过来的图像是不是合法,默认不为空 try{ con=getConnection();//得到数据库连接 if(pInfo.get(8).equals("")||pInfo.get(8)==null) {//照片路径为空,则不插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,uid)"+ "values(?,?,?,?,?,?,?,?,?)"); } else {//照片路径不为空,则插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,pphoto,uid)"+ "values(?,?,?,?,?,?,?,?,?,?,?)" ); File f=new File(pInfo.get(8));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(11,b);//设置pphoto参数的数据 } for(int i=0;i<8;i++) {//设置公共信息 psInsert.setString(i+1,pInfo.get(i)); } psInsert.setString(10,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//图片路径不对 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭数据库连接 return isPathNull; } public static String updatePerson(String uid,Vector<String> pInfo){ String isPathNull="isNotNull";//传过来的path是不是合法 try{ con=getConnection(); if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//更新时候,如果照片路径为空,则不更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,birthday=?,pnumber=?,"+ "pQQ=?,pemail=?,padress=?,pphoto=?,uid=? where pid='"+pInfo.get(0).trim()+"'"); } else {//如果照片路径不为空,则更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid='"+pInfo.get(0).trim()+"'"); File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(10,b); } for(int i=1;i<8;i++){//设置公共的信息部分 psInsert.setString(i,pInfo.get(i)); } psInsert.setString(9,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//路径不合法 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭连接 return isPathNull; } public Vector getData(String ad){ Vector vector=new Vector(); try { //陈述对象 con=getConnection();//得到数据库连接 stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//创建语句对象 rs=stat.executeQuery("select * from contacts where padress LIKE '%"+ad+"%'"); ResultSetMetaData rm=rs.getMetaData(); //循环打印出数据库表中数据 int n=rm.getColumnCount(); while(rs.next()){ Vector ve=new Vector(); for(int i=1;i<n+1;i++){ String s=rs.getString(i); ve.add(s); } vector.add(ve);//Vector对象接收表中数据 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{if(rs!=null){ try { rs.close();//关闭结果集 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(stat!=null){ try { stat.close();//关闭陈述对象 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close();//关闭连接 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return vector; } public static Vector<String> getPerInfo(String sql)//得到联系人信息 { Vector<String> pInfo=new Vector<String>(); try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 while(rs.next()) { for(int i=1;i<10;i++) { System.out.println(rs.getString(i)); pInfo.add(rs.getString(i));//将联系人信息添加到返回向量 } } } catch(Exception e) { e.printStackTrace(); } finally{DButil.closeCon();}//关闭数据库连接 return pInfo;//返回信息集合 } public static void closeCon()//关闭数据库连接的方法 { try { if(rs!=null){rs.close(); rs=null;}//如果结果集不为空关闭结果集并赋值null if(stat!=null){stat.close(); stat=null;}//如果语句对象不为空关闭语句对象并赋值null if(con!=null){con.close(); con=null;}//如果连接不为空关闭连接并赋值null } catch(Exception e){e.printStackTrace();} } public static void main(String[] args){ DButil DB=new DButil(); System.out.println(DB.getConnection()); } } }

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

如何在虚拟机VM上使用串口

在系统内核开发中,经常会用到串口调试,利用VMware的Virtual Machine更是为调试系统内核如虎添翼。那么怎么搭建串口调试环境呢?因为最近工作涉及到这方面,利用强大的google搜索和自己

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

北京师范大学信息科学与技术学院笔试10复试真题

北京师范大学信息科学与技术学院笔试,可以更好的让你了解北师大该学院的复试内容,获得更好的成绩。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Tomcat服务器下载、安装、配置环境变量教程(超详细)

未经我的允许,请不要转载我的文章,在此郑重声明!!! 请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装! 安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542 Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d...

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

[已解决]踩过的坑之mysql连接报“Communications link failure”错误

目录 前言 第一种方法: 第二种方法 第三种方法(适用于项目和数据库在同一台服务器) 第四种方法 第五种方法(项目和数据库不在同一台服务器) 总结 前言 先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈), 在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

期末考试评分标准的数学模型

大学期末考试与高中的考试存在很大的不同之处,大学的期末考试成绩是主要分为两个部分:平时成绩和期末考试成绩。平时成绩和期末考试成绩总分一般为一百分,然而平时成绩与期末考试成绩所占的比例不同会导致出现不同

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问