gpt4 book ai didi

java - JFreeChart 从另一个 JDialog 接收方程产生 "AWT-EventQueue-0"java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:35:50 36 4
gpt4 key购买 nike

问题是,在将整个方程发送到 JFreeChart here 时遇到问题我试图仅发送 x^3、x^2... 等参数。

仍然出现错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at calc.kalkulator.OknoFunkcji.getDane(OknoFunkcji.java:24)
at calc.kalkulator.OknoFunkcji.<init>(OknoFunkcji.java:37)
at calc.kalkulator.PanelFunkcji.actionPerformed(PanelFunkcji.java:103)
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.plaf.basic.BasicButtonListener.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.pumpEventsForFilter(Unknown Source)
at java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at calc.kalkulator.mainApp.actionPerformed(mainApp.java:299)
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)

为什么我不能使用解析的 double ?当我使用代码中设置的变量作为某些值时,它可以工作...这是我的 JDialog 代码 (PanelFunkcji.java):

    package calc.kalkulator;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

class PanelFunkcji extends JDialog implements ActionListener {
private JLabel lA, lB, lC, lD;
private JTextField tA, tB, tC, tD;
private JButton bOK, bCancel;
private OknoFunkcji oknoFunkcji;
private JComboBox comboBox;
public double dA, dB, dC, dD;






public PanelFunkcji(JFrame owner) {
super(owner, "Wprowadzanie funkcji", true);
setSize(300, 300);
setLayout(null);

comboBox = new JComboBox();
comboBox.setBounds(10, 10, 270, 20);
add(comboBox);
comboBox.setVisible(false);

bOK = new JButton("OK");
bOK.setBounds(10, 40, 130, 20);
add(bOK);
bOK.addActionListener(this);

bCancel = new JButton("Anuluj");
bCancel.setBounds(150, 40, 130, 20);
add(bCancel);
bCancel.addActionListener(this);

lA = new JLabel("A = ");
lA.setBounds(10, 70, 40, 20);
add(lA);

tA = new JTextField("0");
tA.setBounds(50, 70, 60, 20);
add(tA);

lB = new JLabel("B = ");
lB.setBounds(10, 100, 40, 20);
add(lB);

tB = new JTextField("0");
tB.setBounds(50, 100, 60, 20);
add(tB);

lC = new JLabel("C = ");
lC.setBounds(10, 130, 40, 20);
add(lC);

tC = new JTextField("0");
tC.setBounds(50, 130, 60, 20);
add(tC);

lD = new JLabel("D = ");
lD.setBounds(10, 160, 40, 20);
add(lD);

tD = new JTextField("0");
tD.setBounds(50, 160, 60, 20);
add(tD);

}

public double getA() {
//if (Double.parseDouble(tA.getText()) != null)
return Double.parseDouble(tA.getText());
//else return 0;
}

public double getB() {
return Double.parseDouble(tB.getText());
}

public double getC() {
return Double.parseDouble(tC.getText());
}

public double getD() {
return Double.parseDouble(tD.getText());
}

@Override
public void actionPerformed(ActionEvent e) {
Object z = e.getSource();
if(z == bOK) {
if (oknoFunkcji == null) {
oknoFunkcji = new OknoFunkcji("Wykres");
}
oknoFunkcji.setVisible(true);
setVisible(false);
}
else if (z == bCancel) {
setVisible(false);
}

}



}

这是我修改后用于我的应用程序的示例:

 package calc.kalkulator;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.function.Function2D;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;

class OknoFunkcji extends ApplicationFrame {

private static PanelFunkcji panelFunkcji;
private static double a;
private static double b;
private static double c;
private static double d;

public void getDane () {
a = panelFunkcji.getA();
b = panelFunkcji.getB();
c = panelFunkcji.getC();
d = panelFunkcji.getD();
}


public OknoFunkcji(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
//chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
chartPanel.setSize(500, 270);
setContentPane(chartPanel);
getDane();




}

/**
* Tworzy chart.
*
* @param dataset - zbiór danych.
*
* @return Zwraca instancję charta.
*/
private static JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
" ", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);

XYPlot plot = (XYPlot) chart.getPlot();
plot.getDomainAxis().setLowerMargin(0.0);
plot.getDomainAxis().setUpperMargin(0.0);
return chart;
}

/**
* Creates a sample dataset.
*
* @return A sample dataset.
*/
public static XYDataset createDataset() {
XYDataset result = DatasetUtilities.sampleFunction2D(new X2(),
-10.0, 10.0, 40, "f(x)");
return result;
}

public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}

static class X2 implements Function2D {

public double getValue(double x) {
return a*x*x*x + b*x*x + c*x + d;
}

}



}

出于某种奇怪的原因,无论我做什么,我都会得到 NullPointerException...

最佳答案

错误在这段代码中:

private static PanelFunkcji panelFunkcji;   //1
private static double a;
private static double b;
private static double c;
private static double d;

public void getDane()
{
a = panelFunkcji.getA(); //9
b = panelFunkcji.getB();
c = panelFunkcji.getC();
d = panelFunkcji.getD();
}

public OknoFunkcji(String title)
{
super(title);
JPanel chartPanel = createDemoPanel();
//chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
chartPanel.setSize(500, 270);
setContentPane(chartPanel);
getDane(); //22
}

您在第 1 行声明了变量 panelFunkcji,并在第 9 行使用它。但是,您从未实例化该变量。这就是导致 NullPointerException 的原因。

要修复它,请添加以下行

panelFunkcji = new PanelFunkcji(chartPanel);

OknoFunkcji 构造函数第 22 行之前的任何位置。

关于java - JFreeChart 从另一个 JDialog 接收方程产生 "AWT-EventQueue-0"java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285453/

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