当前位置: 首页 > 知识库问答 >
问题:

每次运行一个类时,它都会打开一个新的框架

漆雕修能
2023-03-14

我已经添加了一个actionlistener到一个jmenuproject,它调用一个类,该类读取一个excel文件并在一个jframe中打开一个jgraph。我还添加了另一个actionlistener到不同的jmenuproject,为相同的exel文件调用相同的类,但不同的excel表(不同的int参数)。然而,当我运行我的主框架时,我点击菜单项,我一次只能打开其中一个。我必须关上一个来打开另一个。我需要更改它,以便每当用户单击它时,每次都会出现一个新的不同的框架/窗口。

public class ReadExcel {

//reads excel file sheet and saves some strings in arrays
public static ArrayList<String> RM = new ArrayList<String>() ;
...




public static void excel(String excelfile, Integer sheetno) {
...
}
}
public class graphgen extends JFrame {

//creates a graph based on ReadExcel arrays


public graphgen() {

        gen();

    }

    public void gen(){

    }

public static void main(String[] args)
    {


        graphgen frame = new graphgen();
        p2.add(graphComponent, BorderLayout.CENTER);
        frame.setLayout(new BorderLayout());
        frame.add(p2, BorderLayout.CENTER);
        frame.pack();
        frame.setResizable(true);
        frame.setSize(1600, 1200);
        frame.setVisible(true);


    }

}

具有菜单栏的主类:

   menuItem = new JMenuItem("MenuItem1",KeyEvent.VK_B);
    menuItem.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent event2) {

                                    new ReadExcel();
                                 ReadExcel.excel(".xls", 0);
                                    new graphgen();
                                    graphgen.main(null);
                                }
                            });     
                        subsubmenu1.add(menuItem);


    menuItem = new JMenuItem("MenuItem2",KeyEvent.VK_C);
    menuItem.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent event2) {

                                    new ReadExcel();
                                   ReadExcel.excel(".xls", 1);
                                    new graphgen();
                                    graphgen.main(null);
                                }
                            });     
                        subsubmenu1.add(menuItem);

public static void main(String[] args)
            {


                GUIquery frame = new GUIquery();
                p.add(graphComponent, BorderLayout.CENTER);
                frame.setLayout(new BorderLayout());
                frame.add(p, BorderLayout.CENTER);
                frame.setJMenuBar(GUIquery.createMenuBar());
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setResizable(true);
                frame.setSize(1600, 1200);
                frame.setVisible(true);


            }

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: multiple points
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at graphgen.gen(graphgen.java:645)
    at graphgen.<init>(graphgen.java:62)
    at GUIquery$9.actionPerformed(GUIquery.java:713)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

共有2个答案

马渊
2023-03-14

对于您显示的错误,它是存在的,因为在代码中的某个点(位于graphgen.gen(graphgen.java:645)),您正在解析一个字符串,并将其转换为双精度。但是,字符串不是有效的双精度——因为它有多个小数点(.)-所以这是一个错误。您应该打印出(通过System.out.println())您试图转换的内容,并分析字符串的错误。

我建议你把所有的源代码都打包,使用Dropbox或Google Drive等文件共享服务,并发布链接,因为与错误相关的代码在这里不存在

姜弘化
2023-03-14

(其中涉及一些猜测。)

您在事件调度器线程调用actionPerformed方法中完成所有工作;这是负责处理事件和绘制UI的线程。因此,当您在这种方法中工作时,无法处理其他事件(如按钮或菜单单击)。

要实现这一点,您需要将工作放入单独的线程中,例如。。

public void actionPerformed(ActionEvent event2) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            new ReadExcel();
            ReadExcel.excel(".xls", 0);
            new graphgen();
            graphgen.main(null);
        }
    }).start();
}

如果这样打开一个新窗口,这取决于Graggen中的代码。如果这段代码为每次调用静态main方法打开一个新窗口,并且如果代码正确处理Swing线程,那么它将这样做,但是我们不能查看这段代码。

通过调用静态main方法调用其他Java代码总是可疑的。您应该有一个可以使用的公共的、文档化的API。

 类似资料:
  • 每当从我的要素文件开始执行新方案时,就会启动一个新浏览器。我希望浏览器只在我的第一个场景执行时启动一次,在场景的其余部分,不应打开新的浏览器。 我已经把我的浏览器打开代码写进了类下的注释中。

  • 因此,我在一个react项目中使用selenium-webdriver运行selenium测试。每次我运行测试时,它都会打开一个新的chrome窗口,这非常令人恼火,因为我最终打开了一百万个chrome窗口。是否可能强制selenium使用已经打开的浏览器窗口? 编辑:这里有一个测试代码的简单示例。

  • 我使用eclipse与javafx。我创建了一个项目和eclipse生成Main.java和application.css(这是空的)。后来我创建了一些. fxml文件使用场景bulider。然而,当我试图运行应用程序时,它只是打开一个空盒子,而不考虑我在场景生成器中创建了什么。 我做错了什么?主要的爪哇: Testing.fxml:

  • 我已经跟踪了许多如何使用Dagger实现依赖注入的示例。 上次我得到这个错误时,我彻底检查了新添加的活动和我添加的上一个活动,没有问题。 https://github.com/erikjhordan-rey/dagger2-mvp-sample/issues/1 https://github.com/google/dagger/issues/942 Android错误:找不到符号类DaggerAp

  • 问题内容: 我有一个主JFrame,其中具有用于不同功能的各种面板,人们可以在其中进行计算。我想在用户单击第一个计算按钮时打开一个新的JFrame并用作“输出”窗口(如果您熟悉它们,则类似于SPSS输出窗口)。 New JFrame将是完全独立的,并且将具有其自己的菜单栏。简单的JDialog并不是解决之道。 问题答案: 无法抗拒,简单地不同意答案); 和 我想在用户单击第一个计算按钮时打开一个新