แทรกตัวแปรจากคลาสหนึ่งลงในคลาสด้วย JFreeChart เพื่อลงจุดตัวแปรนี้ได้อย่างไร

อัปเดตคำถาม[อัปเดต]*: * - ในโค้ด Termometr แสดง 0 - หน้าจอ

ทำไมฉันไม่สามารถแทรกตัวแปร temp จาก DBData.java ลงใน final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp)); ใน Tempo.java ได้ [ฉันต้องการวางไว้ในชุดข้อมูล ฉันต้องการแผนภูมิพล็อตเช่นเทอร์โมมิเตอร์ที่มีค่า temp จาก DBData.java ]

ฉันรู้ว่าใน DBData.java ใน void ConnectDB() TemperaturaPow คือ String ดังนั้นฉันจึงแยกวิเคราะห์เป็นสองเท่า ฉันพยายามแยกวิเคราะห์ temp เป็นจำนวนเต็ม แต่ไม่มีผลลัพธ์

ใน Tempo.java ฉันสามารถใช้ System.out.println(dbData.temp) และ IDEA แสดงให้ฉันเห็นตัวอย่าง 9.0 แต่ JFreeChart Termometr กำลังแสดงค่า "0" เป็นศูนย์

Tempo.java

public class Tempo extends ApplicationFrame {

public Tempo(final String title){

    super(title);

    DBData dbData = new DBData();
    final double temp = dbData.temp;

    final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp)); <<<-------

    final ThermometerPlot plot = new ThermometerPlot(dataset);
    final JFreeChart chart = new JFreeChart("Termometr",JFreeChart.DEFAULT_TITLE_FONT,plot,false);

    plot.setThermometerStroke(new BasicStroke(2.0f));
    plot.setThermometerPaint(Color.lightGray);

    final ChartPanel chartPanel = new ChartPanel(chart);
    setContentPane(chartPanel);
}
public static void main(String[] args){
    DBData dbData = new DBData();
    dbData.ConnectDB();
    final Tempo demo = new Tempo("Thermometr demo");
    demo.pack();
    demo.setVisible(true);
   System.out.println(dbData.temp);

}

}

DBData.java

public class DBData {

    public double temp;
    private Connection con;
    private Statement st;
    private ResultSet rs;

    void ConnectDB(){

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://XXX
                    "passs");
            st = con.createStatement();
            System.out.println("Połączono z BD");

            String query = "SELECT * FROM X ORDER BY id DESC LIMIT 1";
            rs = st.executeQuery(query);
            System.out.println("Records from MySQL");

            while (rs.next()) {
                String TemperaturaPow = rs.getString("TemperaturaPow");
                System.out.println(TemperaturaPow);
                temp = Double.parseDouble(TemperaturaPow); <<<----------
                System.out.println(temp);


            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        }
    }

    void initialize(){
        ConnectDB();
    }

}

[อัปเดต]*

ฉันเพิ่ม try ใน DBData.java เพื่อตรวจสอบว่าแยกวิเคราะห์เป็นสองเท่าหรือไม่

while (rs.next()) {
                String TemperaturaPow = rs.getString("TemperaturaPow");
                System.out.println(TemperaturaPow);
                temp = Double.parseDouble(TemperaturaPow); <<<----------
                System.out.println(temp);
                try{
                    temp = Integer.parseInt(TemperaturaPow);
                }catch (NumberFormatException e){
                    System.out.println("Error parse: " + e);
                }
Intellji prints for me :

Error parse: java.lang.NumberFormatException: For input string: "7.7"
0.0
0.0
If I use :

try{
                    temp = Double.parseDouble(TemperaturaPow);
                }catch (NumberFormatException e){
                    System.out.println("Error parse: " + e);
                }

Intellji พิมพ์ให้ฉัน:

7.7 7.7 แต่เทอร์โมมิเตอร์วาดไม่ได้ - รับค่า null หรือ 0 ?


person TomaszBag    schedule 23.02.2017    source แหล่งที่มา
comment
อาจซ้ำกับ การเปลี่ยนสีปรอทในเทอร์โมมิเตอร์ใน JFreeChart   -  person trashgod    schedule 24.02.2017
comment
ลิงก์ นี่เป็นหัวข้อที่คล้ายกัน แต่ฉันไม่เข้าใจ :/ คำถามคือเหตุใด DefaultValueDataset dataset ใน Tempo.java จึงไม่สามารถใช้ตัวแปร temp จากคลาสอื่นและวาดแผนภูมิ/แสดงอุณหภูมิในเทอร์โมมิเตอร์ - เทอร์โมมิเตอร์แสดง 0 :)   -  person TomaszBag    schedule 25.02.2017


คำตอบ (1)


วิธีแก้ปัญหาสำหรับตัวอย่างนี้คือ:

ใน DBData.java เรามีวิธีที่รับข้อมูลจาก MySQL = ConnectDB() เมธอดนี้ต้องเป็น public double ConnectDB() และเมธอดนี้ต้องส่งคืนตัวแปร temp:

public double DBConnect(){
...code...
return temp;
}

ในชั้นเรียนที่ฉันมีโค้ดสำหรับวาดแผนภูมิ เราจำเป็นต้อง:

DBData dbData = new DBData();
double temp = dbData.ConnectDB();

จากนั้นเราก็สามารถแทรกอุณหภูมิตัวแปรลงในชุดข้อมูลได้

   final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));

ทำงาน JFreeChart เหมือนเทอร์โมมิเตอร์ หน้าจอของแผนภูมิการทำงาน

person TomaszBag    schedule 25.02.2017