2016-08-02 33 views
0

Ich habe meine Entwicklungsumgebung auf Eclipse Neon aktualisiert und m2e eingeführt, um Projektabhängigkeiten zu verwalten. in einem Projekt waren die ursprünglichen (sehr alten) Versionen von JFreeChart nicht verfügbar auf Maven, so habe ich die neuesten Versionen von JFreeChart und JCommon eingefügt.Der Typ org.jfree.data.general.Series kann nicht aufgelöst werden

Ich habe jetzt einen Compiler-Fehler, wie unten beschrieben:

The type org.jfree.data.general.Series cannot be resolved. 
It is indirectly referenced from required .class files. 

ich eine Reihe von Fragen und Antworten dazu gefunden haben, aber sie scheinen das Fehlen von JCommon zu beziehen. Ich habe JCommon in meinen Abhängigkeiten, und ich habe überprüft, dass die spezifische Klasse, die bezeichnet wird, tatsächlich in der Datei jfreechart.jar mit 7-zip ist. Unten ist das Codefragment mit dem Fehler, der bei der letzten else-Anweisung results.add(…) auftritt.

public XYDataset getMetricHistogramData(Timestamp t1, Timestamp t2){ 
    int index1=-1; 
    Timestamp startTime,endTime; 
    TimePeriodValues results = new TimePeriodValues(this.type.name()); 
    final TimePeriodValuesCollection results1 = new TimePeriodValuesCollection(); 

    if (t1.before(earliest)||t1.after(latest)||(readings.size()<=1)) return null; // won't find a value for the timestamp t1 
    if (t2.before(earliest)||t2.after(latest)) return null; // won't find a value for the timestamp t2 

    for(int i = 0;i<readings.size();i++){ 
     if (readings.get(i).timestamp().equals(t1)){ 
      index1=i; 
      break; 
     } 
     if (readings.get(i).timestamp().after(t1)){ 
      index1=i-1; 
      break; 
     }  
    } 
    // index1 now contains the index of the starting timestamp 
    for (int i=index1; i<(readings.size()-1); i++){ 
     startTime = readings.get(i).timestamp(); 
     if(startTime.after(t2)) break; 
     //endTime = new Timestamp(Math.abs(readings.get(i+1).timestamp().getTime()-Timestamped.SECOND_IN_MS)); 
     endTime = readings.get(i+1).timestamp(); 
     if (endTime.before(startTime)) 
      SmartPower.getMain().getFrame().displayLog("Bad Timestamps "+startTime + " - " + endTime+"\n\r"); 
     else results.add(new SimpleTimePeriod(startTime, endTime), readings.get(i).value()); 
    } 
    results1.addSeries(results); 
    return results1; 
} 

Das ist mein pom.xml Datei

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>SmartPower</groupId> 
    <artifactId>SmartPower</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
     <directory>src</directory> 
     <excludes> 
      <exclude>**/*.java</exclude> 
     </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.5.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <!-- https://mvnrepository.com/artifact/org.eclipse.persistence/javax.persistence --> 
    <dependency> 
     <groupId>org.eclipse.persistence</groupId> 
     <artifactId>javax.persistence</artifactId> 
     <version>2.1.1</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.jfree/jfreechart --> 
    <dependency> 
     <groupId>org.jfree</groupId> 
     <artifactId>jfreechart</artifactId> 
     <version>1.0.19</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.jfree/jcommon --> 
    <dependency> 
     <groupId>org.jfree</groupId> 
     <artifactId>jcommon</artifactId> 
    <version>1.0.23</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/com.jgoodies/forms --> 
    <dependency> 
     <groupId>com.jgoodies</groupId> 
     <artifactId>forms</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.apache.derby/derby --> 
    <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derby</artifactId> 
     <version>10.12.1.1</version> 
</dependency> 

    </dependencies> 
</project> 

Neon war ein sauberes etwa eine Woche vor installieren auf Windows 10.

Alle Zeiger geschätzt würde.

Antwort

1

Ich bin mir nicht sicher, wo die Dinge schief gehen. Die Klasse org.jfree.data.general.Series ist tatsächlich in jfreechart-1.0.19.jar enthalten. Sie könnten versuchen, über die Befehlszeile mit der Option -verbose wie vorgeschlagen here zu starten, um nach verirrten JARs zu suchen. Mit Hilfe der 1.0.19 release,

$ java -verbose -cp .:lib/jfreechart-1.0.19.jar:lib/jcommon-1.0.23.jar Test 
… 
[Loaded org.jfree.data.general.SeriesDataset from file:lib/jfreechart-1.0.19.jar] 
[Loaded org.jfree.data.xy.XYDataset from file:lib/jfreechart-1.0.19.jar] 
… 

Mit Versionen zitiert erzeugt die folgende vereinfachte Beispiel die folgende Tabelle ohne Fehler:

image

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.data.time.Day; 
import org.jfree.data.time.TimePeriodValues; 
import org.jfree.data.time.TimePeriodValuesCollection; 
import org.jfree.data.xy.XYDataset; 

/** 
* @see https://stackoverflow.com/a/38725689/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new ChartPanel(ChartFactory.createTimeSeriesChart(
      "Title", "Domain", "Range", createDataset())) { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(640, 480); 
      } 
     }); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private XYDataset createDataset() { 
     TimePeriodValues results = new TimePeriodValues("Data"); 
     results.add(new Day(1, 8, 2016), 1); 
     results.add(new Day(2, 8, 2016), 2); 
     return new TimePeriodValuesCollection(results); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
+0

Ist dies nicht hilfreich ist, geben Sie bitte Ihre Frage bearbeiten schließen a [mcve], die das von Ihnen beschriebene Problem aufweist. – trashgod

+0

Dies weist auf das Problem mit der Eclipse-Umgebung und nicht mit den JAR-Dateien hin. Ich denke, ich habe in der ursprünglichen Frage alle Einzelheiten dazu angegeben. Ich werde versuchen, Sie Code-Fragment in meiner Umgebung. – gjwo

+0

Ich habe ein Testpaket in meine Struktur org.ladbury.testPkg eingefügt und dann mit dem obigen Code eine neue Testklasse im Paket erstellt. Ich erhalte einen Fehler bei der umschließenden Paketanweisung von "Der Typ org.jfree.data.DomainInfo kann nicht aufgelöst werden. Er wird indirekt von erforderlichen .class-Dateien referenziert" + verschiedene andere Fehler. Diese Klasse ist auch in der Datei jfreechar.jar vorhanden. Ich bemerke, dass Ihre JAR-Dateien "-fx" nach der Version enthalten, meins ist das nicht signifikant? – gjwo