如何从另一个Java类[Netbeans]调用JFrame

时间:2015-11-16 03:14:59

标签: java swing netbeans jframe

我知道它之前已发布过,但我无法取得任何成果,所以我正在寻求帮助。

我正在尝试将我的JFrame类调用到将要设置Comm端口的主类。框架是使用Netbeans软件中的设计创建的。 我的问题是为什么我的主Java文件无法打开在另一个类中创建的框架?

以下是缩短的代码:

主要课程为SerialTest

package javaapplication1;

import javaapplication1.RCDA_JFrame;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;

public class SerialTest extends JFrame implements SerialPortEventListener {

    public static void main(String[] args) throws Exception {

                JFrame RCDA_JFrame = new JFrame();
                RCDA_JFrame.setVisible(true);
    }
}

我的GUI类是RCDA_JFrame

package javaapplication1;

import java.io.IOException;
//import java.io.OutputStream;
import javaapplication1.SerialTest;

public class RCDA_JFrame extends javax.swing.JFrame {
    //private OutputStream SerialOut;
    public RCDA_JFrame() {
        initComponents();
    }

    public static void main(String args[]) {

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

2 个答案:

答案 0 :(得分:1)

首先,只有一个类(GUI类)应该扩展JFrame。但是,这不会导致问题。其次,即使两个都扩展<div pseudo="-webkit-input-placeholder" style="display: none !important; text-overflow: clip;">First Name</div> (通常意味着应该实例化一个),这两个类都不会被实例化。第三,在整个应用程序中,您应该只有一个JFrame方法。第四,不完全确定GUI类中的main方法正在做什么 - 为什么它创建一个RCDA_JFrame(我虽然Serial类应该根据标题问题这样做),为什么呢在单独的线程中执行此操作?最后,请确保您正在设置JFrame的大小(尽管您可能已经在main()方法中执行此操作。)

以下是一些基本代码,可让您从其他类创建和访问自定义JFrame:

启动课程(这是主课程)

initComponents

CustomJFrame类(JFrame类)

public class Start{
    private static CustomJFrame myFrame;
    public static void main(String[] args){
        myFrame = new CustomJFrame();
        //you can edit myFrame's properties here.
    }
}

经过测试并且工作正常。

答案 1 :(得分:0)

我建议做这样的事情。无需两种main方法。

import javax.swing.*;

public class SerialTest{

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(RCDA_JFrame::new);
    }
}

这个

public class RCDA_JFrame extends JFrame {

    public RCDA_JFrame() {
        initComponents();
    }

    public void initComponents(){
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        pack();
        setVisible(true);
    }
}