gpt4 book ai didi

Java Swing 应用程序不再工作

转载 作者:行者123 更新时间:2023-12-01 13:16:18 25 4
gpt4 key购买 nike

我对使用 swing 还很陌生,我有一个问题。我的代码今天早上停止工作,但我不知道为什么。我运行了调试器,它显示了 2 行代码。一个在主类,一个在另一个类。他们都在创建彼此的实例。

这些行是这样的:主类:

OnePlayerFrame OnePFrame = new OnePlayerFrame();

OnePlayerFrame 类:

MainFrame MainClass = new MainFrame();

我希望你能理解我在说什么,正如我所说的,我对 swing 很陌生。

谢谢-马特

好的,这就是全部内容:对了,忘了说了,我可能删除了一行简单的代码而忽略了它,所以如果是简单的事情请保持冷静:)

主类:

package rockpaperscissors;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MainFrame {

public JFrame frame = new JFrame();

private final ImageIcon rock = new ImageIcon("C:/Users/Matthew/Documents/NetBeansProjects/RockPaperScissors/src/assets/rock.jpg");
private final ImageIcon paper = new ImageIcon("C:/Users/Matthew/Documents/NetBeansProjects/RockPaperScissors/src/assets/paper.png");
private final ImageIcon scissors = new ImageIcon("C:/Users/Matthew/Documents/NetBeansProjects/RockPaperScissors/src/assets/scissors.png");

private final JLabel rockLabel = new JLabel();
private final JLabel paperLabel = new JLabel();
private final JLabel scissorsLabel = new JLabel();

private final JPanel panel1 = new JPanel();
private final JPanel panel2 = new JPanel();
private final JPanel panel3 = new JPanel();
private final JPanel empty1 = new JPanel();
private final JPanel empty2 = new JPanel();
private final JPanel empty3 = new JPanel();
private final JPanel empty4 = new JPanel();
private final JPanel empty5 = new JPanel();

OnePlayerFrame OnePlayerFrame = new OnePlayerFrame();

public JButton btn1 = new JButton("1 Player");

private final JTextField text = new JTextField();

private final Font font = new Font("Showcard Gothic Regular", Font.BOLD, 28);


public MainFrame(){

frame.setSize(360, 300);
frame.setAlwaysOnTop(false);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
frame.setLayout(new GridLayout(3, 1));

panel1.setLayout(new GridLayout(1, 3));
panel1.add(rockLabel);
panel1.add(paperLabel);
panel1.add(scissorsLabel);
panel1.setBackground(Color.WHITE);

panel2.setLayout(new GridLayout(2, 3));
panel2.add(empty1);
panel2.add(empty2);
panel2.add(empty3);
panel2.add(empty4);
panel2.add(btn1);
panel2.add(empty5);

panel3.add(text);
panel3.setBackground(Color.WHITE);

empty1.setBackground(Color.WHITE);
empty2.setBackground(Color.WHITE);
empty3.setBackground(Color.WHITE);
empty4.setBackground(Color.WHITE);
empty5.setBackground(Color.WHITE);

text.setText("Rock Paper Scissors");
text.setFont(font);
text.setPreferredSize(new Dimension(360, 80));
text.setEditable(false);
text.setBorder(null);
text.setHorizontalAlignment(JTextField.CENTER);
text.setBackground(Color.WHITE);

rockLabel.setIcon(rock);
paperLabel.setIcon(paper);
scissorsLabel.setIcon(scissors);

btn1.setFocusPainted(false);

btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
frame.dispose();
OnePlayerFrame.startGame1();
}
});
}

public static void main(String[] args) {
new MainFrame();
}
}

这是第二堂课:

package rockpaperscissors;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class OnePlayerFrame {

MainFrame MainClass = new MainFrame();

JFrame gameFrame = new JFrame();

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
JPanel panel7 = new JPanel();
JPanel panel8 = new JPanel();
JPanel panel9 = new JPanel();
JPanel empty1 = new JPanel();
JPanel empty2 = new JPanel();

JTextField playerText1 = new JTextField();
JTextField playerText2 = new JTextField();
JTextField playerText3 = new JTextField();
JTextField compText1 = new JTextField();
JTextField compText2 = new JTextField();
JTextField compText3 = new JTextField();
JTextField pChoose = new JTextField();
JTextField cChoose = new JTextField();

JButton btn1 = new JButton("Rock");
JButton btn2 = new JButton("Paper");
JButton btn3 = new JButton("Scissors");
JButton btn4 = new JButton("Confirm");
JButton btn5 = new JButton("Fight!");
JButton getB = new JButton();

JLabel label1 = new JLabel();
JLabel label2 = new JLabel();

boolean confirmed = false;
boolean hasSelected = false;
boolean runThread = true;



String playerMove;



ImageIcon playerIcon = new ImageIcon("C:/Users/Matthew/Documents/NetBeansProjects/RockPaperScissors/src/assets/question-mark.jpg");
ImageIcon computerIcon = new ImageIcon("C:/Users/Matthew/Documents/NetBeansProjects/RockPaperScissors/src/assets/question-mark.jpg");

Font font = new Font("Showcard Gothic Regular", Font.BOLD, 18);

public OnePlayerFrame(){

gameFrame.setVisible(true);
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameFrame.setSize(500, 400);
gameFrame.setLocationRelativeTo(MainClass.frame);
gameFrame.setLayout(new GridLayout(3, 1));
gameFrame.add(panel1);
gameFrame.add(panel2);
gameFrame.add(panel3);
MainClass.frame.dispose();



panel1.setBackground(Color.WHITE);
panel1.setLayout(new GridLayout(1, 4));
panel1.add(panel4);
panel1.add(panel5);
panel1.add(panel6);
panel1.add(panel7);

panel2.setBackground(Color.WHITE);
panel2.setLayout(new GridLayout(3, 1));
panel2.add(pChoose);
panel2.add(panel8);
panel2.add(btn4);

panel3.setBackground(Color.WHITE);
panel3.add(cChoose);
panel3.add(panel9);
panel3.setLayout(new GridLayout(2, 1));

panel4.setBackground(Color.WHITE);
panel4.add(playerText1);
panel4.add(playerText2);
panel4.add(playerText3);
panel4.setLayout(new GridLayout(3, 1));

panel5.setBackground(Color.WHITE);
panel5.add(label1);

panel6.setBackground(Color.WHITE);
panel6.add(label2);

panel7.setBackground(Color.WHITE);
panel7.add(compText1);
panel7.add(compText2);
panel7.add(compText3);
panel7.setLayout(new GridLayout(3, 1));

panel8.setLayout(new GridLayout(1, 3));
panel8.add(btn1);
panel8.add(btn2);
panel8.add(btn3);

panel9.setLayout(new GridLayout(1, 3));
panel9.setBackground(Color.WHITE);
panel9.add(empty1);
panel9.add(btn5);
panel9.add(empty2);



empty1.setBackground(Color.WHITE);

empty2.setBackground(Color.WHITE);



playerText1.setEditable(false);
playerText1.setBorder(null);
playerText1.setText("Player");
playerText1.setBackground(Color.WHITE);
playerText1.setFont(font);
playerText1.setHorizontalAlignment(JTextField.CENTER);

playerText2.setEditable(false);
playerText2.setBorder(null);
playerText2.setText("Chose");
playerText2.setBackground(Color.WHITE);
playerText2.setFont(font);
playerText2.setHorizontalAlignment(JTextField.CENTER);

playerText3.setEditable(false);
playerText3.setBorder(null);
playerText3.setText("====>");
playerText3.setBackground(Color.WHITE);
playerText3.setFont(font);
playerText3.setHorizontalAlignment(JTextField.CENTER);

compText1.setEditable(false);
compText1.setBorder(null);
compText1.setText("Computer");
compText1.setBackground(Color.WHITE);
compText1.setFont(font);
compText1.setHorizontalAlignment(JTextField.CENTER);

compText2.setEditable(false);
compText2.setBorder(null);
compText2.setText("Chose");
compText2.setBackground(Color.WHITE);
compText2.setFont(font);
compText2.setHorizontalAlignment(JTextField.CENTER);

compText3.setEditable(false);
compText3.setBorder(null);
compText3.setText("<====");
compText3.setBackground(Color.WHITE);
compText3.setFont(font);
compText3.setHorizontalAlignment(JTextField.CENTER);

pChoose.setEditable(false);
pChoose.setBorder(null);
pChoose.setText("Choose your move");
pChoose.setFont(font);
pChoose.setHorizontalAlignment(JTextField.CENTER);
pChoose.setBackground(Color.WHITE);

cChoose.setEditable(false);
cChoose.setBorder(null);
cChoose.setText("Computer is choosing");
cChoose.setFont(font);
cChoose.setHorizontalAlignment(JTextField.CENTER);
cChoose.setBackground(Color.WHITE);



btn1.setRolloverEnabled(true);
btn1.setFocusPainted(false);

btn2.setFocusPainted(false);
btn2.setRolloverEnabled(true);

btn3.setFocusPainted(false);
btn3.setRolloverEnabled(true);

btn4.setFocusPainted(false);
btn4.setRolloverEnabled(true);

btn5.setFocusPainted(false);
btn5.setRolloverEnabled(true);
btn5.setVisible(false);
btn5.setFont(font);



label1.setIcon(playerIcon);

label2.setIcon(computerIcon);
}

public void startGame1(){

new Thread(new Runnable() {
public void run() {
while(confirmed == true || confirmed == false){
if(confirmed == false){
try{
if(confirmed == false){
cChoose.setText("Computer is choosing");
Thread.sleep(500);
}
if(confirmed == false){
cChoose.setText("Computer is choosing.");
Thread.sleep(500);
}
if(confirmed == false){
cChoose.setText("Computer is choosing..");
Thread.sleep(500);
}
if(confirmed == false){
cChoose.setText("Computer is choosing...");
Thread.sleep(500);
}
}
catch(Exception e){
gameFrame.dispose();
}
}
if(confirmed == true){
cChoose.setText("Computer has chosen!");
fightButtonSet();
}
}
}
}).start();


btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(confirmed == false){
playerMove = btn1.getText();
hasSelected = true;
pChoose.setText("You have selected rock");
getB = btn1;
}
else{
pChoose.setText("You have already confirmed " + getB.getText().toLowerCase() + "!");
}
}
});

btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(confirmed == false){
playerMove = btn2.getText();
hasSelected = true;
pChoose.setText("You have selected paper");
getB = btn2;
}
else{
pChoose.setText("You have already confirmed " + getB.getText().toLowerCase() + "!");
}
}
});

btn3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(confirmed == false){
playerMove = btn3.getText();
hasSelected = true;
pChoose.setText("You have selected scissors");
getB = btn3;
}
else{
pChoose.setText("You have already confirmed " + getB.getText().toLowerCase() + "!");
}
}
});

btn4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(hasSelected == true && confirmed == false){
confirmed = true;
pChoose.setText("You have confirmed " + getB.getText().toLowerCase() + "!");
cChoose.setText("Computer has chosen!");

}
else{
if(hasSelected == false){
pChoose.setText("You haven't selected anything yet!");
}
else if (confirmed == true){
pChoose.setText("You have already confirmed " + getB.getText().toLowerCase() + "!");
}
}
}
});
}

public void fightButtonSet(){

btn5.setVisible(true);
btn5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
FIGHT();
}
});
}

public void FIGHT(){
if(getB.getText().equalsIgnoreCase("Rock")){

}
if(getB.getText().equalsIgnoreCase("Paper")){

}
if(getB.getText().equalsIgnoreCase("Scissors")){

}
}



}

最佳答案

我们可以抽象一点你有这个。

public class TestCircularDependency {

static class A{

B b = new B();

}

static class B{

A a = new A();

}

public static void main(String args[]){

A a = new A();

}

}

这将抛出一个StackOverflowError。你有一个循环依赖。问题是你在构造函数中实例化每个实例,然后你就有无限递归。

在java中你可以有循环依赖,但在对象创建中不能。你可以做这样的事情。

public class TestCircularDependency {

static class A{

B b;

}

static class B{

A a;

}

public static void main(String args[]){

A a = new A();
a.b = new B();
b.a= a;
}

}

关于Java Swing 应用程序不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com