Java-模数-从一个表添加到另一个表

Java-模数-从一个表添加到另一个表,java,jtable,row,modulus,Java,Jtable,Row,Modulus,我有一个JTable,其中一列预先填充了30分钟的时隙(6.30-24.00) 现在我有了另一个表,其中有一个电影标题列表,其中包含一列电影的持续时间(以分钟为单位,例如140分钟) 现在我有一个按钮,可以这样做。我编写了一段代码,很有趣,有时有效,有时无效(在我添加了3-4个标题之后)。根据数学公式,它增加了时隙。它给了我: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input str

我有一个JTable,其中一列预先填充了30分钟的时隙(6.30-24.00)

现在我有了另一个表,其中有一个电影标题列表,其中包含一列电影的持续时间(以分钟为单位,例如140分钟)

现在我有一个按钮,可以这样做。我编写了一段代码,很有趣,有时有效,有时无效(在我添加了3-4个标题之后)。根据数学公式,它增加了时隙。它给了我:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "DRAMA"
代码如下:

btnAddProg.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                        try {
                        int dur = Integer.parseInt(progTableModel.getValueAt(listTable.getSelectedRow(), listTable.getSelectedColumn()+1).toString()) / 30;
                        int durT = Integer.parseInt(progTableModel.getValueAt(listTable.getSelectedRow(), listTable.getSelectedColumn()+1).toString());
            if(durT % 30 != 0)
            {
                dur += 1;   
            }   

                for(int i = 0; i < dur; i++)
                {
                    String value = progTableModel.getValueAt(listTable.getSelectedRow(), listTable.getSelectedColumn()).toString();
                                        String value2 = progTableModel.getValueAt(listTable.getSelectedRow(), listTable.getSelectedColumn()+2).toString();
                                        channel1DataTitle.set(chOneTable.getSelectedRow()+i, value);
                                        channel1DataGenre.set(chOneTable.getSelectedRow()+i, value2);
                }
                                        chOneTable.repaint();
                        } catch (IndexOutOfBoundsException f) {

                            JOptionPane.showMessageDialog(frame,
                             "Please select a row in the Channel table!",
                                "Channel row not selected",
                                 JOptionPane.PLAIN_MESSAGE);


                        }


                    }
                });
btnAddProg.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
试一试{
int dur=Integer.parseInt(progTableModel.getValueAt(listTable.getSelectedRow(),listTable.getSelectedColumn()+1.toString())/30;
int durT=Integer.parseInt(progTableModel.getValueAt(listTable.getSelectedRow(),listTable.getSelectedColumn()+1.toString());
如果(durT%30!=0)
{
dur+=1;
}   
对于(int i=0;i

谁能告诉我出了什么问题吗?

您正在尝试解析一个不能转换为数字的字符串。看起来问题在于您正在处理用户选择的任何内容。您需要限制正在处理的数据来自表中的某些列,或者在尝试处理数据之前验证数据。

单击适当列时,该数据有效,单击另一列时失败,不是吗?您已将固定逻辑(解析持续时间编号)应用于变量列(取决于用户单击的确切列)。使用固定编号访问列,不要检查所选列索引。

因为有时用户会选择您期望的内容。其他时候,他们选择的不是数字。如果查看异常,它会告诉您正在尝试将字符串“戏剧”转换为数字。您可能不应该这样做:listTable.getSelectedColumn()+1。相反,您可能希望从所选行中选择特定列。是的,这取决于我单击的位置。我有一个上一个按钮,其中有一个类似的问题,但我看不出如何在这个按钮上应用相同的修复程序。将
listTable.getSelectedColumn()+1替换为duration列的确切索引:)啊,好的,我明白了。完成。谢谢