A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹宇 中级黑马   /  2013-5-26 11:08  /  1877 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看毕老师的视频,跟着自己做了个简单的记事本图形界面程序,封装成JAR 可是点击就是不运行。。

代码如下。
  1. /*
  2. 需求:制作一个简单的记事本小程序,可以打开文件和保存文件。带有简单的图形化界面。

  3. 思路:一个类封装操作事件。一个类封装组建初始化。
  4. */
  5. //package TextGui;
  6. import java.io.*;
  7. import java.awt.*;
  8. import java.awt.event.*;
  9. public class MyTextProgram
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 new Mydiscreteness().start();
  14.         }


  15. }

  16. class Mydiscreteness                        //事件类,封装事件和处理方式和各个组件对象
  17. {
  18.        
  19.         //文件对象
  20.         private File file;       
  21.         //主窗口
  22.         private Frame framemain;               
  23.         //菜单bar
  24.         private MenuBar mainmenu;
  25.         //文件菜单隶属MenuBar
  26.         private Menu filemenu;
  27.         //菜单项打开隶属文件菜单
  28.         private MenuItem openitem;
  29.         //菜单项保存隶属文件菜单
  30.         private MenuItem saveitem;
  31.         //菜单项创建新文件隶属于文件菜单
  32.         private MenuItem newfileitem;
  33.         //菜单项退出隶属文件菜单
  34.         private MenuItem exititem;
  35.         //文本操作区域
  36.         private TextArea textarea;
  37.         //文本条输入路径
  38.         private TextField textfield;
  39.         //按钮转到,隶属主窗口
  40.         private Button gotobutton;
  41.         //路径错误对话框,隶属于主窗体
  42.         private Dialog errordia;
  43.         //打开文件对话框窗体,隶属于菜单项打开
  44.         private FileDialog opendia;
  45.         //保存文件对话框窗体,隶属于菜单项保存
  46.         private FileDialog savedia;
  47.         //保存文件对话框窗体,隶属于菜单项新建
  48.         private FileDialog newfiledia;

  49.         //构造函数
  50.         //Mydiscreteness()
  51.         //{
  52.         //        start();
  53.         //}
  54.         //程序真正运行时的方法
  55.         public void start()
  56.         {
  57.                 /*
  58.                         初始化各个组件对象并基本设置
  59.                 */

  60.                 //主窗口设置
  61.                 framemain = new Frame("我的记事本程序");
  62.                 framemain.setBounds((1366-800)/2,(768-640)/2,800,640);
  63.                 framemain.setVisible(true);
  64.                 //framemain.setLayout(new FlowLayout());
  65.                 /*
  66.                 frame2 = new Window(framemain);
  67.                 frame2.setBounds((1366-800)/2,(768-640)/2,50,640);
  68.                 frame2.setVisible(true);
  69.                 frame2.setLayout(new FlowLayout());
  70.                 framemain.add(frame2);
  71.                 */
  72.                 //菜单bar和子菜单逻辑关系设置
  73.                 mainmenu = new MenuBar();
  74.                 filemenu = new Menu("文件");
  75.                 newfileitem = new MenuItem("新建");
  76.                 openitem = new MenuItem("打开");
  77.                 saveitem = new MenuItem("保存");
  78.                 exititem = new MenuItem("退出");
  79.                 framemain.setMenuBar(mainmenu);
  80.                 mainmenu.add(filemenu);
  81.                 filemenu.add(newfileitem);
  82.                 filemenu.add(openitem);
  83.                 filemenu.add(saveitem);
  84.                 filemenu.add(exititem);
  85.                
  86.                 //文本操作区域设置
  87.                 textarea = new TextArea();

  88. /*
  89.                 //文本输入条设置
  90.                 textfield = new TextField(30);

  91.                 //按钮设置
  92.                 gotobutton = new Button("打开文件");

  93.                 frame2.add(textfield);
  94.                 frame2.add(gotobutton);
  95. */
  96.                 framemain.add(textarea);
  97.                
  98.                

  99.                 myEvent();//调用事件处理方式
  100.        
  101.        
  102.        
  103.        
  104.        
  105.         }

  106.         public void myEvent()
  107.         {
  108.                 //先添加菜单项新建文件的操作事件
  109.                 newfileitem.addActionListener(new ActionListener()
  110.                 {
  111.                         public void actionPerformed(ActionEvent ae_newfile)
  112.                         {
  113.                                 newfiledia = new FileDialog(framemain,"新建",FileDialog.SAVE);
  114.                                 newfiledia.setVisible(true);
  115.                                 String filedir = newfiledia.getDirectory();//获取对话框返回的目录
  116.                                 String filename = newfiledia.getFile();//获取对话框返回的文件名称
  117.                                 //System.out.println(filedir+filename);
  118.                                 try
  119.                                 {
  120.                                         if (filedir!=null && filename!=null)
  121.                                         {
  122.                                                 file = new File(filedir,filename);
  123.                                                 file.createNewFile();
  124.                                         }
  125.                                         else
  126.                                                 return ;
  127.                                        
  128.                                 }
  129.                                 catch (IOException ioe)
  130.                                 {}                //暂时没想到处理方式
  131.                         }
  132.                 });

  133.                 //添加打开文件的操作事件
  134.                 openitem.addActionListener(new ActionListener()
  135.                 {
  136.                         public void actionPerformed(ActionEvent ae_open)
  137.                         {
  138.                                 opendia = new FileDialog(framemain,"打开",FileDialog.LOAD);
  139.                                 opendia.setVisible(true);
  140.                                 String filedir = opendia.getDirectory();
  141.                                 String filename = opendia.getFile();
  142.                                 try
  143.                                 {
  144.                                         if (filedir!=null && filename!=null)
  145.                                         {
  146.                                                 textarea.setText("");
  147.                                                 file = new File(filedir,filename);
  148.                                                 BufferedReader bufr = new BufferedReader(new FileReader(file));
  149.                                                 String line = null;
  150.                                                 while(  (line = bufr.readLine())  !=  null  )
  151.                                                 {
  152.                                                         textarea.append(line);
  153.                                                         textarea.append("\r\n");
  154.                                                 }
  155.                                         }       
  156.                                 }
  157.                                 catch (IOException ioe)
  158.                                 {}
  159.                         }
  160.                 });

  161.                 //为保存添加事件
  162.                 saveitem.addActionListener(new ActionListener()
  163.                 {
  164.                         public void actionPerformed(ActionEvent ae_save)
  165.                         {
  166.                                 if (file==null)
  167.                                 {
  168.                                         savedia = new FileDialog(framemain,"保存",FileDialog.SAVE);
  169.                                         savedia.setVisible(true);

  170.                                         String filedir = savedia.getDirectory();
  171.                                         String filename = savedia.getFile();
  172.                                        
  173.                                         try
  174.                                         {
  175.                                                 if (filedir!=null && filename!=null)
  176.                                                 {
  177.                                                         file = new File(filedir,filename);
  178.                                                         file.createNewFile();

  179.                                                         BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
  180.                                                         bufw.write(textarea.getText());
  181.                                                         bufw.close();
  182.                                                 }
  183.                                                 else
  184.                                                         return ;
  185.                                         }
  186.                                         catch (IOException ioe)
  187.                                         {}
  188.                                        

  189.                                 }

  190.                                 try
  191.                                 {
  192.                                         BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
  193.                                         bufw.write(textarea.getText());
  194.                                         bufw.close();
  195.                                 }
  196.                                 catch (IOException ioe)
  197.                                 {}
  198.                                
  199.                                
  200.                        
  201.                        
  202.                        
  203.                         }
  204.                 });

  205.                 //为退出菜单项添加事件
  206.                 exititem.addActionListener(new ActionListener()
  207.                 {
  208.                         public void actionPerformed(ActionEvent ae_exit)
  209.                         {
  210.                                 System.exit(0);       
  211.                         }
  212.                
  213.                 });

  214.                 //为窗体添加事件,点×关闭程序功能

  215.                 framemain.addWindowListener(new WindowAdapter()
  216.                 {
  217.                         public void windowClosing(WindowEvent we_exit)
  218.                         {
  219.                                 System.exit(0);
  220.                         }
  221.                 });
  222.        
  223.        
  224.         }
  225.        



  226.        
  227. }
复制代码
我将 pcakage TextGui;这句注释掉,可以用CMD运行,但是我一封装成 jar  就不能运行

jar的配置信息我也配了
添加了  Main-Class: TextGui.MyTextProgram

空格和 回车都没忘记,
但是就是双击jar无法运行。

WIN7系统,jar的打开方式 设置的是 javaw.exe 这个程序。。

还请大神帮忙看看,是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览

WIN7系统双击Jar文件无法运行,下面提供两种解决方法:
第一种方法:
步骤一:新建一个文本文档,输入内容"javaw -jar %1 ",并保存为批处理文件,例如"run.bat "。
步骤二:右键点击.jar格式的文件 ,选择其打开方式 为上面建的run.bat 。
此时jar就能运行了....
第二种方法:
第一种方法可以解决问题,但是有些不足之处,下面介绍一种更好的方法:通过修改注册表来解决该问题。
步骤一:打开注册表,开始->运行(或者用快捷键WIN+R),输入regedit,确定;
步骤二:找到HKEY_CLASSES_ROOT\Applications \javaw.exe,一开始没有的话,就在资源管理器中找到javaw.exe文 件,如我的电脑中为D:\Program Files\Java\jre\bin\javaw.exe,运行下,或找个Jar文件,选择打开方式,输入D:\Program Files\Java\jre\bin\javaw.exe,再选择打开就行了;
步骤三:进入HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command,修改默认的键值为 "D:\Program Files\Java\jre\bin\javaw.exe" -jar "%1" 。

我用的是第二种方案,后来就给解决来,楼主可以借鉴下~~~

评分

参与人数 2技术分 +1 黑马币 +5 收起 理由
曹宇 + 5 很给力!
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
yinbolove576 发表于 2013-5-26 12:55
WIN7系统双击Jar文件无法运行,下面提供两种解决方法:
第一种方法:
步骤一:新建一个文本文档,输入内 ...

大神啊大神啊,搞定了,谢谢你!
回复 使用道具 举报
曹宇 发表于 2013-5-26 13:02
大神啊大神啊,搞定了,谢谢你!

俺也只是菜鸟一枚罢了,共同学习嘛,呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马