【问题标题】:Why does this code work in Vista but not 7?为什么此代码在 Vista 中有效,但在 7 中无效?
【发布时间】:2011-09-09 10:38:54
【问题描述】:

由于某种原因,每次有人在 Vista 中运行该程序时,它都能完美运行,但一旦我将它移到 Windows 7 PC 上,它就会停在 ActionListener 的 Action Performed Method 中间,这意味着我可以点击我的选择,但它永远不会说选择的尺寸。 有没有办法解决这个问题?

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 的计算机。执行后,代码在此之后无法继续执行,即它从未打印出“已选择大小”字样。程序的其余部分从 C:\Users\?\AppData\TimeLineMacroProgram 文件夹中引入一个 csv 文件,然后在同一目录中创建一个图像。但这是当前被破坏的代码部分。每当 GUI 弹出时,我选择 9" 选项并单击完成,它应该将 9 作为参数传递,然后打印出“Size Selected”,但它不仅会处理窗口。请帮助。

【问题讨论】:

  • 我只能怀疑 JDK 中的一个错误 -- 你是否在两者中使用完全相同的 JDK 版本?
  • 不考虑使用类文件将其作为程序导出到其他计算机,唯一类似的问题就是 JRE
  • 程序是否挂起、终止或出错?
  • 对不起,我说的是 JRE。
  • 我在 Win7 上获得了“已选择尺寸”(注释掉 TimeTables)。 Java 7(测试版)。

标签: java windows-7 windows-vista toolkit screen-resolution


【解决方案1】:

猜测:

如果宽度和高度文本字段没有内容,则动作侦听器会退出:您在两个 NumberFormatExceptions 之后返回。这将阻止显示“选择的大小”,并且不会处理框架。如果您得到“成功获得屏幕分辨率”的输出,然后它似乎停止工作,这可能就是原因。但是,如果您遇到这种情况,然后单击其他内容,然后单击“完成”,则会选择打印尺寸。

【讨论】:

  • @if_zero_equals_one 如果您在两个 NumberFormatExceptions 之后没有从 actionPerformed 方法返回,则会被处理。
  • 框架被释放,没有其他事情发生 =/
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2021-08-16
  • 2021-07-05
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多