我知道它以前已经发布过,但我没有取得任何结果,所以我请求帮助。
我正在尝试将我的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);
}
});
}
}
首先,只有一个类(GUI类)应该扩展JFrame。然而,这并不是问题的根源。其次,即使两个类都扩展了JFrame
(这通常意味着应该实例化一个类),也不会实例化任何一个类。第三,在整个应用程序中应该只有一个main
方法。第四,不完全确定GUI类中的main()
方法在做什么——为什么它要创建一个RCDA_JFrame(根据标题问题,我认为Serial类应该这样做),为什么它要在一个单独的线程中这样做?最后,确保您正在设置JFrame的大小(尽管您可能已经在initComponents
方法中这样做了。)
以下是一些基本代码,允许您从另一个类创建和访问自定义JFrame:
开始类(这是主要类)
public class Start{
private static CustomJFrame myFrame;
public static void main(String[] args){
myFrame = new CustomJFrame();
//you can edit myFrame's properties here.
}
}
CustomJFrame类(JFrame类别)
import javax.swing.JFrame;
public class CustomJFrame extends JFrame{
public CustomJFrame(){
//set its size in px.
setSize(200,200);
//center it on screen.
setLocationRelativeTo(null);
//give it a title.
setTitle("My JFrame");
//set the close operation.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//make it visible.
setVisible(true);
}
}
经过测试,运行良好。
我建议这样做。不需要两种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);
}
}