Почему этот код работает в Vista, а не 7? - PullRequest
1 голос
/ 06 июня 2011

По какой-то причине каждый раз, когда у меня кто-то запускает эту программу в Vista, она работает безупречно, но как только я перевожу ее на ПК с Windows 7, она останавливается в середине действия 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);
    }
}

Краткое объяснение: у меня есть макрос, который работает в Excel в Windows Vista, и я попытался распространить его на компьютер под управлением Windows 7. После выполнения код не удалсяпродолжить выполнение после этой точки, т.е. он никогда не распечатывал слова «Размер выбран».Остальная часть программы вносит файл csv из папки C: \ Users \? \ AppData \ TimeLineMacroProgram, а затем создает изображение в том же каталоге.Но это та часть кода, которая в настоящее время не работает.Всякий раз, когда появляется GUI, я выбираю опцию для 9 "и нажимаю кнопку" Готово ", которая должна передать значение 9 в качестве параметра, а затем распечатывает" Выбранный размер ", но это не только выводит окно. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 06 июня 2011

Долгосрочная догадка:

Существует выход из прослушивателя действий, если текстовые поля ширины и высоты не имеют содержимого: вы возвращаетесь после двух исключений NumberFormatException. Это предотвратит отображение «Выбранный размер» и не удалит кадр. Если вы получили сообщение «Успешно получено разрешение экрана», а затем оно перестало работать, возможно, поэтому. Но если вы испытаете это, а затем щелкните что-то другое, а затем нажмите Готово, будет выбран размер печати. ​​

...