- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
[编辑]:我现在要将我所有的代码插入其中,因为我已经绝望了,我不知道如何解决我的问题。不仅如此,在我看来(从之前的评论来看),看到完整的代码可能会对那些试图帮助我解决这个问题的人有所帮助。
[原帖开始]:我目前正在 Eclipse 中制作游戏以供学校练习。但是,我有 2 个问题,我似乎无法弄清楚(至少其中一个),我真的需要一些帮助。
我有一个包含 3 个类的项目; main 创建一个框架,仅此而已,真的。第二个类创建一个带有组件的面板,并使用 JTextField 从用户那里获取一个数字;这个数字在 1 到 20 之间,据我所知,我可以捕捉到任何异常。那里没有问题。第三类是第二个面板,其中包含通过单击“继续”打开的组件。我现在需要做的是两件事——这些也是我的问题。1:我需要指定的数字(它已经被转换为int)从类2传递到类3。2:我需要添加 2 个列表,大小由数字指定。
我相信我在尝试 5 小时后解决了问题 1,但我没有找到快速检查的方法,所以我继续解决问题 2,在单击“继续”后,我的第三堂课导致程序崩溃并抛出 NullPointerException。我知道这与列表有关,但我终究无法找出问题所在/问题所在!
下面是一些代码:
第 1 类:
package gedigitaliseerd;
import javax.swing.JFrame; //javax = java extra
public class StartFrame extends JFrame //zeg dat het een systeemklasse is.
{
public StartFrame() //constructor
{
setSize(400, 250); //bepaal de grootte
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //met dit is afsluiten van een progje nooit een probleem
setTitle("Game 2-cousins"); //geef een titel mee in de titelbalk
setResizable(false); //nu kan de gebruiker het venster niet vergroten of verkleinen
//centreer het frame op je monitor
setLocationRelativeTo(null);
//hoe laadt je het paneel in het frame?
//maak een paneelklasse om dat te doen
//dit is dus om een koppeling te maken tussen frame en paneel
add(new StartFramePaneel(this /* deze this is nodig voor het paneel en het sluiten van dit frame. this is de class waar hij op dit moment in zit*/)); //waarom ook alweer al die haken?
setVisible(true);
}
public static void main(String[] args) //main method
{
new StartFrame(); //maak nieuw object. je hoeft niet te zeggen frame pietje is new frame. je hoeft geen naam te gebruiken
}
}
// header, constructor, de rest. is makkelijker voor het oog
[现在整个类] 类 2 (StartFramePaneel) 方法在底部,aantalCharacters
是需要传递的内容。在 ActionEvent
中发生的解析不包含在我下面粘贴的内容中,因为它解析没有问题。我什至可以看到一个弹出窗口,询问您是否希望继续使用您指定的字符数;如果您单击继续按钮。如果您然后单击"is",没有我所有的传递和列表内容,它会完美显示下一个面板,但是如果我添加我在下面粘贴的所有内容,它会在继续后崩溃-->是 包 gedigitaliseerd;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; //voor eventafhandeling
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StartFramePaneel extends JPanel implements ActionListener
{
private JTextField invoerVeld; //goede naamgeving is heel belangrijk
private JLabel vraagVeld1;
private JLabel vraagVeld2;
private JButton rulesButton;
private JButton stopButton;
private JButton continueButton;
private JPanel gridPanel1;
private JPanel gridPanel2;
private JFrame errorFrame;
private JFrame areUSureFrame;
private JFrame main; //nieuw JFrame met de naam main. voor het sluiten van de main OpstartFrame
private JFrame selectionFrame;
private int continueVraag;
private int stopVraag;
public static int aantalCharacters = 0;
//constructor
public StartFramePaneel(JFrame main)
{
setLayout(new GridLayout(2,1)); //verander de layoutmanager naar GridLayout, van 3x3 even grote cellen
//setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); //laat de Grid opvullen van 1,1 naar 1,2 naar 1,3 naar 2,1 etc
//initialiseren (stappenplan punt 2)
this.main = main; //de mainframe wordt nu toegekend aan de thispanel in de hoofdklasse.
stopButton = new JButton ("Stop");
stopButton.addActionListener(this); //(stappenplan punten 3 en 4; this geeft aan dat dit kopieerpaneel hem afhandeld.)
rulesButton = new JButton ("Rules");
rulesButton.addActionListener(this);
continueButton = new JButton ("Continue");
continueButton.addActionListener(this); //"this" betekent dat dit paneel de zaken afhandeld
//initialisatie
invoerVeld = new JTextField(5); //13 is maximale aantal karakters... meestal werkt dat zo. het is in kolommen. een tekst in quites kun je er ook in neerzetten.
invoerVeld.setHorizontalAlignment(JTextField.CENTER); //centreer de text in het invoerveld
vraagVeld1 = new JLabel("How many characters between 1 and 20 should each player have?");
vraagVeld1.setHorizontalAlignment(JLabel.CENTER); //centreer de JLabel in de layout
vraagVeld2 = new JLabel("(If you don't specify a number, 1 will be the default value)");
vraagVeld2.setHorizontalAlignment(JLabel.CENTER);
gridPanel1 = new JPanel(new GridLayout(3,1)); //object gridPanel1 aanmaken, met dezelfde GridLayout als het hoofdpaneel
gridPanel2 = new JPanel(new GridLayout(1,3));
//zichtbaar maken op het eerste (hoofd)paneel .. een paneel heeft een default en een FlowLayout, nu een GridLayout
add (gridPanel1); //in grid rij 1
add (gridPanel2); //in grid rij 2
//voeg Label en TextField toe aan gridPanel1
gridPanel1.add(vraagVeld1);
gridPanel1.add(vraagVeld2);
gridPanel1.add(invoerVeld);
//voeg de knoppen toe aan gridPanel2
gridPanel2.add (stopButton);
gridPanel2.add (rulesButton);
gridPanel2.add (continueButton);
}
//Deze methode MOET opgenomen worden, omdat er gebruik wordt gemaakt van een ActionListener
public void actionPerformed (ActionEvent ae)
{
if (ae.getSource() == continueButton)
{
try //maak een 'try' blokje aan om ongeldige invoeren tegen te gaan.
{
aantalCharacters = Integer.parseInt(invoerVeld.getText()); //het aantal karakters wordt in aantalCharacters opgeslagen,
//wanneer op continue wordt geklikt. Ook wordt de text eerst in een nummer omgezet
}
catch (NumberFormatException ongeldigeInvoer) //specificeer de exception voor ongeldige invoer
{
//JOptionPane.showMessageDialog(errorFrame, "You must use numbers"); //maak een error aan, zodat het progje niet crasht
invoerVeld.setText("");
aantalCharacters = 1;
}
if (invoerVeld.getText() == "0" || aantalCharacters == 0)
{
JOptionPane.showMessageDialog(errorFrame, "You must use numbers between 1 and 20");
invoerVeld.setText("");
}
else if (invoerVeld.getText() == "" || aantalCharacters == 0)//hier zit het probleem
{
invoerVeld.setText("");
aantalCharacters = 0;
//JOptionPane.showMessageDialog(errorFrame, "You must use numbers between 1 and 20");
}
else if (aantalCharacters < 1 || aantalCharacters > 20)
{
JOptionPane.showMessageDialog(errorFrame, "You must use numbers between 1 and 20"); //maak een error aan, zodat het progje niet crasht
invoerVeld.setText("");
aantalCharacters = 0;
}
else
{//hier wordt er een are you sure neergezet, met een actie die volgt op een ja-optie
continueVraag = JOptionPane.showConfirmDialog(areUSureFrame, "Are you sure you want to continue? You selected "+ aantalCharacters + " character(s)");
if (continueVraag == JOptionPane.YES_OPTION)
{
main.setVisible(false); //main is de thispanel in de hoofdklasse en beide worden ze onzichtbaar... geloof ik
selectionFrame = new JFrame();
selectionFrame.setSize(1000, 600);
selectionFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
selectionFrame.setLocationRelativeTo(null);
selectionFrame.setTitle("Game 2-cousins");
selectionFrame.add(new SelectionFramePaneel());
selectionFrame.setVisible(true);
}
if (continueVraag == JOptionPane.NO_OPTION)
{
invoerVeld.setText("");
}
if (continueVraag == JOptionPane.CANCEL_OPTION)
{
invoerVeld.setText("");
}
}
//lege vakjes moeten natuurlijk ingevuld zijn!
//nu moet StartFrame sluiten
//nu moet SelectionFrame opstarten
}
if (ae.getSource() == rulesButton)
{
//hier moet iets met de regelknop worden gedaan. Een nieuw frame met regels moet toevoorschijn komen. Die heb ik nog niet gemaakt.
}
if (ae.getSource() == stopButton)
{
/*stopVraag = JOptionPane.showConfirmDialog(areUSureFrame, "Are you sure you want to exit?");
if (stopVraag == JOptionPane.YES_OPTION)
{
*/System.exit(0); //het programma sluit af door op 'Stop' the drukken
/*}
if (continueVraag == JOptionPane.NO_OPTION)
{
invoerVeld.setText("");
}
if (continueVraag == JOptionPane.CANCEL_OPTION)
{
invoerVeld.setText("");
}*/
}
}
public static void passCharacters(int aantalCharacters) //maak passCharacters aan, zodat deze aangeroepen kan worden in de 3e class
{
int passCharacters = 0;
passCharacters = aantalCharacters;
}
}
[现在整个类 3] 类 3 (SelectionFramePaneel) 声明(不是全部)
package gedigitaliseerd;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; //voor eventafhandeling
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
public class SelectionFramePaneel extends JPanel implements ActionListener
{
//declareer de componenten (stappenplan punt 1)
private JButton rulesButton;
private JButton stopButton;
private JButton continueButton;
private JCheckBox evenTheFieldP1;
private JCheckBox evenTheFieldP2;
private JPanel northPanel;
private JPanel southPanel;
private JPanel centerPanel;
private JPanel eastPanel;
private JPanel westPanel;
private JLabel player1Label;
private JLabel player2Label;
private JButton player1DiceButton;
private JButton player2DiceButton;
private JLabel player1DiceLabel;
private JLabel player2DiceLabel;
private JLabel dummyLabel1;
private JLabel dummyLabel2;
private JLabel dummyLabel3;
private JList<String> player1List;
private JList<String> player2List;
private static String[] characterArray;
private JLabel kant;
private JLabel ras;
private JLabel basisCharacter;
private JLabel speciaalCharacter1;
private JLabel speciaalCharacter2;
private JLabel speciaalCharacter3;
private JLabel extraVeld1;
private JLabel extraVeld2;
private JLabel extraVeld3;
private JLabel extraVeld4;
private int stopVraag;
private int continueVraag;
public static int gekregenCharacters;
public static int index;
public static void newStartFramePaneel() //maak methode voor het startframepaneel, om passCharacters aan te roepen.
{
StartFramePaneel.passCharacters(gekregenCharacters);
//int gezetteCharacters = gekregenCharacters; //hopelijk krijgt gekregenCharacters hier de waarde van aantalCharacters mee
characterArray = new String[gekregenCharacters];
for (int fill = 0; fill < gekregenCharacters; fill++)
{
characterArray[index]="Character "+index+1;
index++;
}
}
//constructor
public SelectionFramePaneel()
{
setLayout(new BorderLayout()); //verander de layoutmanager naar GridLayout, van 3x3 even grote cellen
//setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); //laat de Grid opvullen van 1,1 naar 1,2 naar 1,3 naar 2,1 etc
//initialiseren (stappenplan punt 2)
stopButton = new JButton ("Stop")
{
public Dimension getPreferredSize()
{
return new Dimension(200,100);
}
};
stopButton.addActionListener(this); //(stappenplan punten 3 en 4; this geeft aan dat dit kopieerpaneel hem afhandeld.)
rulesButton = new JButton ("Rules")
{
public Dimension getPreferredSize()
{
return new Dimension(200,100);
}
};
rulesButton.addActionListener(this);
continueButton = new JButton ("Continue")
{
public Dimension getPreferredSize()
{
return new Dimension(200,100);
}
};
continueButton.addActionListener(this); //"this" betekent dat dit paneel de zaken afhandeld
player1Label = new JLabel ("Player 1");
player1Label.setHorizontalAlignment(JLabel.CENTER);
player2Label = new JLabel ("Player 2");
player2Label.setHorizontalAlignment(JLabel.CENTER);
player1DiceLabel = new JLabel ("0");
player1DiceLabel.setHorizontalAlignment(JLabel.CENTER);
player2DiceLabel = new JLabel ("0");
player2DiceLabel.setHorizontalAlignment(JLabel.CENTER);
dummyLabel1 = new JLabel ("");
dummyLabel2 = new JLabel ("");
dummyLabel3 = new JLabel ("");
player1DiceButton = new JButton ("P1 Roll Dice")
{
public Dimension getPreferredSize()
{
return new Dimension(100,50);
}
};
player1DiceButton.addActionListener(this);
player2DiceButton = new JButton ("P2 Roll Dice")
{
public Dimension getPreferredSize()
{
return new Dimension(100,50);
}
};
player2DiceButton.addActionListener(this);
evenTheFieldP1 = new JCheckBox ("Even the playing field P1");
evenTheFieldP2 = new JCheckBox ("Even the playing field P2");
evenTheFieldP2.setHorizontalTextPosition(SwingConstants.LEFT);
evenTheFieldP2.setHorizontalAlignment(SwingConstants.RIGHT);
player1List = new JList<String>(characterArray); //maak de lijsten aan met (hopelijk) de arrays van grootte aantalCharacters->gekregenCharacters
player1List.setVisibleRowCount(10); //zorg dat er standaard 10 regels in del ijsten te zien zijn
player1List.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //zorg dat altijd maar 1 element geselecteerd kan worden
player2List = new JList<String>(characterArray);
player2List.setVisibleRowCount(10);
player2List.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
extraVeld1 = new JLabel();
extraVeld2 = new JLabel();
extraVeld3 = new JLabel();
extraVeld4 = new JLabel();
kant = new JLabel("Side");
kant.setHorizontalAlignment(JLabel.CENTER);
ras = new JLabel("Category");
ras.setHorizontalAlignment(JLabel.CENTER);
basisCharacter = new JLabel("Character");
basisCharacter.setHorizontalAlignment(JLabel.CENTER);
speciaalCharacter1 = new JLabel("");
speciaalCharacter1.setHorizontalAlignment(JLabel.CENTER);
speciaalCharacter2 = new JLabel("");
speciaalCharacter2.setHorizontalAlignment(JLabel.CENTER);
speciaalCharacter3 = new JLabel("");
speciaalCharacter3.setHorizontalAlignment(JLabel.CENTER);
northPanel = new JPanel(new GridLayout(3,3));
southPanel = new JPanel(new GridLayout(1,5));
centerPanel = new JPanel(new GridLayout(6,1));
eastPanel = new JPanel(new GridLayout(3,1));
westPanel = new JPanel(new GridLayout(3,1));
southPanel.setSize(999,150);
northPanel.setSize(999,150); //deze grootte aanpassen als het scherm vergroot wordt.
add (northPanel, BorderLayout.NORTH); //een grid met nieuwe panels, met daarin de dobbelsteenvakjes en player labels en Roll Dice knoppen gaan hierin
add (southPanel, BorderLayout.SOUTH); //de knoppen gaan hierin
add (centerPanel, BorderLayout.CENTER); //de selectionlabels gaan hierin
add (eastPanel, BorderLayout.EAST); //het selectievak met aantal characters voor player 2 gaat hierin
add (westPanel, BorderLayout.WEST); //het selectievak met aantal characters voor player 1 gaat hierin
northPanel.add(player1Label);
northPanel.add(dummyLabel1);
northPanel.add(player2Label);
northPanel.add(player1DiceLabel);
northPanel.add(dummyLabel2);
northPanel.add(player2DiceLabel);
northPanel.add(player1DiceButton);
northPanel.add(dummyLabel3);
northPanel.add(player2DiceButton);
southPanel.add(evenTheFieldP1);
southPanel.add(stopButton);
southPanel.add(rulesButton);
southPanel.add(continueButton);
southPanel.add(evenTheFieldP2);
westPanel.add(player1List);
westPanel.add(extraVeld1);
westPanel.add(extraVeld2);
eastPanel.add(player2List);
eastPanel.add(extraVeld3);
eastPanel.add(extraVeld4);
centerPanel.add(kant);
centerPanel.add(ras);
centerPanel.add(basisCharacter);
centerPanel.add(speciaalCharacter1);
centerPanel.add(speciaalCharacter2);
centerPanel.add(speciaalCharacter3);
}
//Deze methode MOET opgenomen worden, omdat er gebruik wordt gemaakt van een ActionListener
public void actionPerformed (ActionEvent ae)
{
if (ae.getSource() == continueButton)
{
}
if (ae.getSource() == rulesButton)
{
//hier moet iets met de regelknop worden gedaan. Een nieuw frame met regels moet toevoorschijn komen. Die heb ik nog niet gemaakt.
}
if (ae.getSource() == stopButton)
{
/*stopVraag = JOptionPane.showConfirmDialog(areUSureFrame, "Are you sure you want to exit?");
if (stopVraag == JOptionPane.YES_OPTION)
{
*/System.exit(0); //het programma sluit af door op 'Stop' the drukken
/*}
else
{
}*/
}
}
}
我正在将我的模板代码移植到 XTend。在某些时候,我在测试用例中有这种类型的条件处理: @Test def xtendIfTest() { val obj = new FD if (
我是新来的 kotlin , 当我开始 Null Safety 时,我对下面的情况感到困惑. There's some data inconsistency with regard to initia
我的应用程序一直在各种Android版本中保持良好状态。我有用户在Android 4.3、5.0、5.1和6.0上正常运行。但是,具有S7 Edge的用户刚刚更新了Android 7.0,将文本粘贴到
我使用的是最新版本的 LWUIT (1.5)。我在资源编辑器中设计了我的表单,然后将代码生成到 netbeans。问题是如果我想访问除表单之外的任何对象,我会收到此错误: java.lang.Null
更新: 我在 Fedora 21 上运行它。 SonarQube - 5.0。 SonarQube Runner - 2.4 更新 2:Findbugs v3.1,Java 插件 v2.8 更新3:
RecupData 我的类仅在 web 中返回 NullPointerException。我连接到 pgsql db 8.3.7 - 该脚本在“控制台”syso 中运行良好 - 但引发了测试 Web
我在 mac 上使用 Processing 2.08。我正在尝试使用文档中给出的 createShape 函数创建 PShape。 PShape s; void setup(){ size(500
我在 mac 上使用 Processing 2.08。我正在尝试使用文档中给出的 createShape 函数创建 PShape。 PShape s; void setup(){ size(500
每次运行此 jsp 时,都会收到以下错误异常: org.apache.jasper.JasperException: java.lang.NullPointerException root cause
Kotlin 在编译时有一个出色的 null 检查,使用分离到“可空?”和“不可为空”的对象。它有一个 KAnnotator 来帮助确定来自 Java 的对象是否可以为空。但是,如果 not-null
我有一个布局将显示一个TextView,用于显示一个滴答时间。我遵循了此链接中的代码 How to Display current time that changes dynamically for
Elasticsearch 1.4.1版(“lucene_version”:“4.10.2”) 我有一个像这样的文件: $ curl 'http://localhost:9200/blog/artic
这是我从另一个类调用函数的方法Selenium 设置已定义。 public void Transfer() throws Exception { System.out.println("\nTrans
我试图在主类中使用我在此类中创建的函数,但它崩溃并显示“警告:无法在根 0 处打开/创建首选项根节点 Software\JavaSoft\Prefsx80000002。 Windows RegCrea
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 3 年前。 我有一个 Java 代码,它将
我声明了两张牌: Card card1 = new Card('3', Card.Suit.clubs); Card card2 = new Card('T', Card.Suit.diamonds)
我编写了一段代码来解码 Base64 图像并在 javafx 中表示该图像。在我的 url base64 代码中不断变化。这就是我在 javafx 代码中使用任务的原因。但我收到错误:java.lan
我正在尝试使用 arrayList 的 arrayList 在 Java 中实现图形。 每当调用 addEdge 函数时,我都会收到 NullPointerException 。我似乎无法弄清楚为什么
我是 Java/android 的新手,所以很多这些术语都是外国的,但我愿意学习。我不打算详细介绍该应用程序,因为我认为它不相关。我目前的问题是,我使用了博客中的教程和代码 fragment ,并使我
我正在开发一个 Android 应用程序来在 Android developer guide 的帮助下录制视频.我程序上的所有代码都与此页面相同。 我在 之外定义了权限标签。 当应
我是一名优秀的程序员,十分优秀!