2011-06-06 98 views
1

由于某种原因,每次有人在Vista中运行该程序时,它都可以完美运行,但只要将它移到Windows 7 PC上,它就会停止在ActionListener的Action Performed Method中,这意味着我可以点击我的选择,但它永远不会说大小选择。 有什么办法解决这个问题吗?为什么这个代码在Vista中工作,但不是7?

import java.io.*; 
import java.util.*; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
public class SizerFrame extends JFrame { 
    ButtonGroup buttons = new ButtonGroup(); 
    JTextField width = new JTextField(2); 
    JTextField height = new JTextField(2); 
    double inchesPerTimeline = 2.1; 
    public SizerFrame() 
    { 
     super("Timeline Application"); 
     Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 
     setBounds(screen.width/2-125,screen.height/2-90,250,180); 
     getContentPane().setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 
     int[] gridX = new int[]{0,0,0,0}; 
     int[] gridY = new int[]{0,1,2,3}; 
     int[] gridW = new int[]{1,1,2,5}; 
     String[] titles = new String[]{"6\"","9\"","10\"","Custom"}; 
     String[] actions = new String[]{"6","9","10","C"}; 
     for (int a = 0; a < 4; a++) 
     { 
      JRadioButton current = new JRadioButton(titles[a]); 
      current.setActionCommand(actions[a]); 
      c.gridx = gridX[a]; 
      c.gridy = gridY[a]; 
      c.gridwidth = gridW[a]; 
      buttons.add(current); 
      getContentPane().add(current,c); 
     } 
     c.gridwidth = 1; 
     String[] title = new String[]{"  ","Width","Height"}; 
     gridX = new int[]{9,10,12}; 
     for (int a = 0; a< 3; a++) 
     { 
      c.gridx = gridX[a]; 
      getContentPane().add(new JLabel(title[a]),c); 
     } 
     c.gridx = 11; 
     getContentPane().add(width,c); 
     c.gridx = 13; 
     getContentPane().add(height,c); 
     c.gridx = 11; 
     c.gridy = 0; 
     c.gridwidth = 2; 
     JButton button = new JButton("Done"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       ButtonModel x = buttons.getSelection(); 
       String size = "XXX"; 
       System.out.println("Getting screen resolution"); 
       int screenRes = Toolkit.getDefaultToolkit().getScreenResolution(); 
       System.out.println("Successfully got screen resolution"); 
       if (x!=null) 
        size = x.getActionCommand(); 
       try{ 
        TimeTable.width = new Integer(size)*screenRes; 
        TimeTable.height = (int)((TimeTable.titleCount+1)*inchesPerTimeline*screenRes); 
       } 
       catch(NumberFormatException ex) 
       { 
        try{ 
         TimeTable.width = (int)(new Double(width.getText().trim())*screenRes); 
         TimeTable.height = (int)(new Double(height.getText().trim())*screenRes); 
        } 
        catch (NumberFormatException except) 
        { 
         return; 
        } 
       } 
       TimeTable.ready = true; 
       System.out.println("Size selected"); 
       dispose(); 
      } 
     }); 
     getContentPane().add(button,c); 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent winEvt){ 
       System.exit(0); 
      } 
     }); 
     setVisible(true); 
    } 
} 

简要说明: 我有一个在Windows Vista用完的Excel宏,我试图将其分发到运行Windows 7在执行的计算机代码没有永远继续也就是说,它在这之后执行打印出“Size selected”字样。程序的其余部分从C:\ Users \?\ AppData \ TimeLineMacroProgram文件夹中导入一个csv文件,稍后在同一目录中创建一个映像。但是这是目前破解的代码的一部分。每当GUI弹出时,我选择9“的选项,并单击完成,应该通过9作为参数,然后打印出”大小选择“,但它不是它只处理窗口。请帮助。

+0

我只能怀疑JDK中存在一个错误 - 您是否在两个版本中使用完全相同的JDK版本? – Liv 2011-06-06 16:21:22

+0

不考虑它作为一个程序导出到其他使用类文件的计算机,唯一类似的问题将是JRE – 2011-06-06 16:22:38

+0

程序是否挂起,终止或错误? – Shaded 2011-06-06 16:23:47

回答

0

Longshot猜测:

如果宽度和高度文本字段没有内容,则会从您的动作侦听器退出:您在两个NumberFormatExceptions后返回,这将阻止显示“Size selected”,并且不处理该帧。你得到了输出“成功获得屏幕分辨率”,然后它似乎停止工作,这可能是为什么,但如果你遇到这种情况,然后点击其他的东西,然后完成,它会打印大小选择

+0

,但点击完成后框架将被丢弃 – 2011-06-06 18:36:01

+0

@ if_zero_equals_one如果你在两个NumberFormatExceptions之后没有从actionPerformed方法返回,那么它会被处理掉 – Atreys 2011-06-06 20:17:12

+0

该框架被放置,并且没有其他事情发生= / – 2011-06-06 20:28:18

相关问题