Java 试图在JTabbedPane上动态生成包含内容的选项卡,但线程中出现异常;AWT-EventQueue-0“;

Java 试图在JTabbedPane上动态生成包含内容的选项卡,但线程中出现异常;AWT-EventQueue-0“;,java,swing,awt,indexoutofboundsexception,jtabbedpane,Java,Swing,Awt,Indexoutofboundsexception,Jtabbedpane,我试图根据用户提供的输入动态生成选项卡及其包含的文本字段。所示代码中的输入不是CPFlows。但是,当我运行代码时,我总是遇到以下异常: Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:635) at java.util.ArrayList.ge

我试图根据用户提供的输入动态生成选项卡及其包含的文本字段。所示代码中的输入不是CPFlows。但是,当我运行代码时,我总是遇到以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:635)
    at java.util.ArrayList.get(ArrayList.java:411)
    at javax.swing.JTabbedPane.setTitleAt(JTabbedPane.java:1316)
    at myproject.ns2GUI.trafficInfoInit(ns2GUI.java:622)
    at myproject.ns2GUI.flowDetailsContinueActionPerformed(ns2GUI.java:567)
    at myproject.ns2GUI.access$200(ns2GUI.java:16)
    at myproject.ns2GUI$3.actionPerformed(ns2GUI.java:343)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
屏幕上什么也不显示

我已经在下面显示了代码。有人能帮忙吗

package myproject;
import java.awt.*;
import java.awt.CardLayout;
import javax.swing.*;


public class ns2GUI extends javax.swing.JFrame {

    private CardLayout laycard;

    public int noTCPFlows,noUDPFlows,totalFlows;


    public ns2GUI() {
        initComponents();
        laycard = new CardLayout();
        mainPanel.setLayout(laycard);
        mainPanel.add("scenarioParameters",scenarioParameters);
        mainPanel.add("nodeVisualization",nodeVisualization);
        mainPanel.add("flowDetails",flowDetails);
        mainPanel.add("trafficInfo",trafficInformation);
        laycard.show(mainPanel,"scenarioParameters");
    }

    public void goScenarioParams() {
        laycard.show(mainPanel,"scenarioParameters");
    }

    public void goNodeVisualization() {
        laycard.show(mainPanel,"nodeVisualization");
    }

    public void goFlowDetails() {
        laycard.show(mainPanel,"flowDetails");
    }

    public void goTrafficInfo() {
        laycard.show(mainPanel,"trafficInfo");
    }



    private void scenarioParamsClearActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        // TODO add your handling code here:
        simTime.setText(" ");
        noNodes.setText(" ");
        tSizeX.setText(" ");
        tSizeY.setText(" ");
        initEnergy.setText(" ");
        transmitPower.setText(" ");
        recPower.setText(" ");
    }                                                   

    private void scenarioParamsOkActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
        goFlowDetails();
    }                                                

    private void enterDetailsActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
        srcSinkPanel.removeAll();
        srcSinkPanel.setLayout(new GridLayout(0,1));
        noTCPFlows = Integer.parseInt(noTcpFlows.getText());
        noUDPFlows = Integer.parseInt(noUdpFlows.getText());
        totalFlows = noTCPFlows + noUDPFlows;
        String tcpLabel = "TCP Flow ";
        String udpLabel = "UDP Flow ";
        String source = "source";
        String sink = "sink";
        String panel = "panel";

        int gridSize = 3;
        int i = 0;

            //loop for TCP flows
            for(int k=0;k<noTCPFlows; k++) {
                JLabel jL = new JLabel(tcpLabel + k);
                JTextField jT1 = new JTextField(source + k,10);
                JTextField jT2 = new JTextField(sink + k,10);
                jT1.setText(" ");
                jT2.setText(" ");
                String panelName = panel + i++;
                JPanel jP = new JPanel();
                jP.add(jL);
                jP.add(jT1);
                jP.add(jT2);
                jP.setLayout( new GridLayout( 1, gridSize ) );
                srcSinkPanel.add(jP);
            }

            //loop for UDP flows
            for(int j=0;j<noUDPFlows; j++) {
                JLabel jL = new JLabel(udpLabel + j);
                JTextField jT1 = new JTextField(source + j,10);
                JTextField jT2 = new JTextField(sink + j,10);
                jT1.setText(" ");
                jT2.setText(" ");
                String panelName = panel + i++;
                JPanel jP = new JPanel();
                jP.add(jL);
                jP.add(jT1);
                jP.add(jT2);
                jP.setLayout( new GridLayout( 1, gridSize ) );
                srcSinkPanel.add(jP);
            }

            //add the Source Sink panel
            srcSinkPanel.revalidate();


    }                                            

    private void flowDetailsBackActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        goScenarioParams();
    }                                               

    private void flowDetailsContinueActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        // TODO add your handling code here:
        goTrafficInfo();
        trafficInfoInit();
    }                                                   

    public void trafficInfoInit() {
        String tabName = "tab";
        String tcpLabel = "TCP Flow";
        String udpLabel = "UDP Flow ";
        String[] flowType = {"CBR","FTP","Exponential"};
        int countTcp = 1;
        int countUdp = 1;

        //Main Panel contents
        JPanel[] jP = new JPanel[noTCPFlows];
        JLabel[] jL =new JLabel[noTCPFlows];
        JComboBox[] jCb = new JComboBox[noTCPFlows];

        //option panels
        JPanel[] cbrParams = new JPanel[noTCPFlows];
        JPanel[] expoParams = new JPanel[noTCPFlows];
        JPanel[] ftpParams = new JPanel[noTCPFlows];

        //CBR Contents
        JLabel[] jL1Cbr = new JLabel[noTCPFlows];
        JLabel[] jL2Cbr = new JLabel[noTCPFlows];
        JLabel[] jL3Cbr = new JLabel[noTCPFlows];
        JLabel[] jL4Cbr = new JLabel[noTCPFlows];
        JTextField[] cbrPacketSize = new JTextField[noTCPFlows];
        JTextField[] cbrRate = new JTextField[noTCPFlows];
        JTextField[] cbrInterPacketInt = new JTextField[noTCPFlows];
        JTextField[] cbrMaxPackets = new JTextField[noTCPFlows];

        //Expo contents
        JLabel[] jL1Expo = new JLabel[noTCPFlows];
        JLabel[] jL2Expo = new JLabel[noTCPFlows];
        JLabel[] jL3Expo = new JLabel[noTCPFlows];
        JLabel[] jL4Expo = new JLabel[noTCPFlows];
        JTextField[] expoPacketSize = new JTextField[noTCPFlows];
        JTextField[] expoRate = new JTextField[noTCPFlows];
        JTextField[] expoBurstTime = new JTextField[noTCPFlows];
        JTextField[] expoIdealTime = new JTextField[noTCPFlows];

        //FTP Contents
        JLabel[] jL1Ftp = new JLabel[noTCPFlows];
        JLabel[] jL2Ftp = new JLabel[noTCPFlows];
        JTextField[] ftpMaxPackets = new JTextField[noTCPFlows];
        JTextField[] ftpMoreCountPackets = new JTextField[noTCPFlows];

        JPanel[] jP2 = new JPanel[noTCPFlows];
        CardLayout[] layPanelCard = new CardLayout[noTCPFlows];

        for( int i = 0; i<noTCPFlows; i++) {

            //create a new tab & set title
            jP[i] = new JPanel();
            jP[i].setLayout(new GridLayout(2,2));

            countTcp++;
            //create the flow type label and combo box
            jL[i] = new JLabel("Flow Type:");
            jCb[i] = new JComboBox(flowType);

            //create the options panels

            //CBR Panel
            cbrParams[i] = new JPanel();
            jL1Cbr[i] = new JLabel("Packet Size");
            cbrPacketSize[i] = new JTextField();
            jL2Cbr[i] = new JLabel("Rate");
            cbrRate[i] = new JTextField();
            jL3Cbr[i] = new JLabel("Inter Packet Interval");
            cbrInterPacketInt[i] = new JTextField();
            jL4Cbr[i] = new JLabel("Maximum Packets");
            cbrMaxPackets[i] = new JTextField();
            cbrParams[i].add(jL1Cbr[i]);
            cbrParams[i].add(cbrPacketSize[i]);
            cbrParams[i].add(jL2Cbr[i]);
            cbrParams[i].add(cbrRate[i]);
            cbrParams[i].add(jL3Cbr[i]);
            cbrParams[i].add(cbrInterPacketInt[i]);
            cbrParams[i].add(jL4Cbr[i]);
            cbrParams[i].add(cbrMaxPackets[i]);

            //Expo Panel
            expoParams[i] = new JPanel();
            jL1Expo[i] = new JLabel("Packet Size");
            expoPacketSize[i] = new JTextField();
            jL2Expo[i] = new JLabel("Rate");
            expoRate[i] = new JTextField();
            jL3Expo[i] = new JLabel("Burst Time");
            expoBurstTime[i] = new JTextField();
            jL4Expo[i] = new JLabel("Ideal Time");
            expoIdealTime[i] = new JTextField();
            expoParams[i].add(jL1Expo[i]);
            expoParams[i].add(cbrPacketSize[i]);
            expoParams[i].add(jL2Expo[i]);
            expoParams[i].add(cbrRate[i]);
            expoParams[i].add(jL3Expo[i]);
            expoParams[i].add(cbrInterPacketInt[i]);
            expoParams[i].add(jL4Expo[i]);
            expoParams[i].add(cbrMaxPackets[i]);

            //FTP Panel
            ftpParams[i] = new JPanel();
            jL1Ftp[i] = new JLabel("Max Number Packets");
            ftpMaxPackets[i] = new JTextField();
            jL2Ftp[i] = new JLabel("More Count Packets");
            ftpMoreCountPackets[i] = new JTextField();


            //create a CardLayout for the options presented
            layPanelCard[i] = new  CardLayout();
            jP2[i].setLayout(layPanelCard[i]);
            jP2[i].add("cbrParams",cbrParams[i]);
            jP2[i].add("expoParams",expoParams[i]);
            jP2[i].add("ftpParams",ftpParams[i]);
            layPanelCard[i].show(jP2[i],"cbrParams");

            //add it all to the tab
            jP[i].add(jL[i]);
            jP[i].add(jCb[i]);
            jP[i].add(jP2[i]);

            //add the tab to the tabbedPane

            trafficInfo.addTab(tabName+i,jP[i]);
           //trafficInfo.setTitleAt(countTcp,tcpLabel);

        }
        trafficInfo.updateUI();
    }

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ns2GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ns2GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ns2GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ns2GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ns2GUI().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     

}
包我的项目;
导入java.awt.*;
导入java.awt.CardLayout;
导入javax.swing.*;
公共类ns2GUI扩展了javax.swing.JFrame{
私人卡;
公共int-noTCPFlows、noUDPFlows、totalFlows;
公共ns2GUI(){
初始化组件();
laycard=新卡布局();
主面板。设置布局(laycard);
主面板。添加(“场景参数”,场景参数);
添加(“节点可视化”,节点可视化);
主面板。添加(“flowDetails”,flowDetails);
主面板。添加(“trafficInfo”,trafficInformation);
显示(主面板,“场景参数”);
}
公共无效goScenarioParams(){
显示(主面板,“场景参数”);
}
公共空间可视化(){
laycard.show(主面板,“节点可视化”);
}
公共数据流详细信息(){
laycard.show(主面板,“流程详细信息”);
}
公共信息{
laycard.show(主面板,“trafficInfo”);
}
private void scenarioParamsClearActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
simTime.setText(“”);
noNodes.setText(“”);
tSizeX.setText(“”);
tSizeY.setText(“”);
initEnergy.setText(“”);
transmitPower.setText(“”);
recPower.setText(“”);
}                                                   
private void ScenarioParamSokaActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
goFlowDetails();
}                                                
私有无效enterDetailsActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
srcSinkPanel.removeAll();
setLayout(新的GridLayout(0,1));
noTCPFlows=Integer.parseInt(noTCPFlows.getText());
noUDPFlows=Integer.parseInt(noUDPFlows.getText());
totalFlows=noTCPFlows+noUDPFlows;
字符串tcpLabel=“TCP流”;
字符串udpLabel=“UDP流”;
字符串source=“source”;
字符串sink=“sink”;
字符串panel=“panel”;
int gridSize=3;
int i=0;
//TCP流的循环
对于(int k=0;k

看起来
countTcp
有点不正确。可能没有正确初始化已修复!我忘记在JPanel数组声明之后初始化JPanel

//did this
JPanel[] jP2 = new JPanel[noTCPFlows];

//rest of the code

//forgot to add this line
JPanel jP2[i] = new JPanel();
初始化JPanel修复了所有问题。
谢谢你的建议!

谢谢你的回复。我更改了标签并检查了它。甚至对这一行进行了注释并尝试了。仍然不起作用。很抱歉我的错误。问题是countTcp index。stacktrace说你正在尝试将标题设置为tab 1,但有0个tab。我尝试对该行进行注释,但仍然没有成功。我将编辑提问并发布整个程序。不要使用
updateUI()
方法。更改LAF时会使用该方法。数组太多。对于相关数据,应创建一个自定义对象来存储此数据。然后将该对象添加到ArrayList(因为ArrayList比数组更具动态性)。此外,您的GUI看起来相当复杂,因为您正在为所有数据创建单独的Swing组件。也许您应该使用。此外,发布的代码无法编译。您需要发布一个。修复了!问题是其中一个JPanel未初始化。感谢大家的尝试!
//did this
JPanel[] jP2 = new JPanel[noTCPFlows];

//rest of the code

//forgot to add this line
JPanel jP2[i] = new JPanel();