Vector -> 2Diminsonaler Array

Status
Nicht offen für weitere Antworten.

najjannaj

Aktives Mitglied
Hallo,
habe folgendes Problem ich habe 2Funktionen die mir aus 2 Vectoren:

Code:
	static Vector path = new Vector();
	static Vector comment = new Vector();

einen 2Dimensionalen Array schreiben sollen.
Die Funtkionnen werden wie folgt aufgerufen:

Code:
    convertPath(path);
    convertComment(comment);


Die Funktionen sehen wie folgt aus:

Code:
	public static void convertPath(Vector path){
		
		Variablen.Bilder = new String[path.size()][2];
		
		for (int i=0;i < path.size();i++){
			String ZwischenVar = (String)path.get(i);
			int LengthPath = ZwischenVar.length();
			
			for (int j=LengthPath;j<100;j++){
				ZwischenVar = ZwischenVar +" ";
			}
			System.out.println("ZwischenVar["+i+"][0]: "+ZwischenVar);
			Variablen.Bilder[i][0] = ZwischenVar;
			
		}
	}
	public static void convertComment(Vector comment){
		
		Variablen.Bilder = new String[comment.size()][2];
		
		for (int i=0;i < comment.size();i++){
			String ZwischenVar = (String)comment.get(i);
			int LengthPath = ZwischenVar.length();
			
			for (int j=LengthPath;j<100;j++){
				ZwischenVar = ZwischenVar +" ";
			}
			System.out.println("ZwischenVar["+i+"][1]: "+ZwischenVar);
			Variablen.Bilder[i][1] = ZwischenVar;
			
		}
	}


Beim ausführen wie oben beschrieben, bekomme ich eine "Java.NullPointerExeption"! Wenn ich jedoch

Code:
convertPath(path);

ausführe, bekomm ich keine "NullPointerExeption" Woran kann das liegen? Ich finde denn Fehler nicht!

Kann mir jemand helfen!
Mit freundlichen Grüßen
Jan Löbel
 

meez

Top Contributor
Vielleicht habe sie nicht gleich viele Elemente drin... ???:L



btw. Dir ist aber schon klar, dass du deinen Array in jeder Methode wieder überschreibst..
 

mic_checker

Top Contributor
Code:
Variablen.Bilder = new String[path.size()][2];
......
            ZwischenVar = ZwischenVar +" ";
..
Dir ist schon klar das das einer der Top Performance Killer ist? Hol StringBuffer und append().
Wo genau wird die Exception ausgelöst, StackTrace posten oder bitte Zeile markieren.
 

Sky

Top Contributor
Du mußt das Array vorher erzeugen:

Code:
public void createArray(Vector path, Vector comment) {
  int size = ( path.size() > comment.size() ) ? path.size() : comment.size();
  Variablen.Bilder = new String[size][2];
}

Der Aufruf sieht wie folgt aus:
Code:
createArray(path, comment);
convertPath(path); 
convertComment(comment);

Das
Code:
new String[...][2];
brauchst Du in den convert-Methoden dann nicht mehr.
 

meez

Top Contributor
mic_checker hat gesagt.:
Dir ist schon klar das das einer der Top Performance Killer ist? Hol StringBuffer und append().

Quatsch.... :bae:

So ists ein Perfomancekiller:
Code:
string += anotherstring;
Das hier
Code:
string = string + anotherstring;
wird vom Compiler in das hier verwandelt:
Code:
string = new StringBuffer().append(string).append(anotherstring).toString();

Es wird erst ein Performancekiller, wenn man in das in einer Schleife macht, da er dann immer wieder einen neuen StringBuffer erzeugen muss...


Warum er das erste nicht auch umwandelt weiss ich nicht :bahnhof: Aber nach einem Test (decompilation einer Klasse), sah man, dass das wirklich so bleibt...
 

Sky

Top Contributor
meez hat gesagt.:
mic_checker hat gesagt.:
Dir ist schon klar das das einer der Top Performance Killer ist? Hol StringBuffer und append().

Quatsch.... :bae:

So ists ein Perfomancekiller:
Code:
string += anotherstring;
Das hier
Code:
string = string + anotherstring;
wird vom Compiler in das hier verwandelt:
Code:
string = new StringBuffer().append(string).append(anotherstring).toString();

Es wird erst ein Performancekiller, wenn man in das in einer Schleife macht, da er dann immer wieder einen neuen StringBuffer erzeugen muss...


Warum er das erste nicht auch umwandelt weiss ich nicht :bahnhof: Aber nach einem Test (decompilation einer Klasse), sah man, dass das wirklich so bleibt...

Der Performancekiller an der Sache ist das '+'-Zeichen! Bei zusammenfügen von Strings mittels '+' wird immer ein neues Stringbuffer-Objekt erzeugt! Das heißt, wenn Du eine Schleife hast, in der Du die Strings derart zusammenfügst so wirst Du für jeden Durchlauf einen neuen Stringbuffer bekommen.

Wenn Du nur an einer Stelle Strings per '+' zusammenfügst, so ist es (fast) egal, ob Du deine 1. oder 2. Variante oder über einen Stringbuffer#append machst.
 

meez

Top Contributor
sky80 hat gesagt.:
Der Performancekiller an der Sache ist das '+'-Zeichen! Bei zusammenfügen von Strings mittels '+' wird immer ein neues Stringbuffer-Objekt erzeugt! Das heißt, wenn Du eine Schleife hast, in der Du die Strings derart zusammenfügst so wirst Du für jeden Durchlauf einen neuen Stringbuffer bekommen

Steht ja da... :bae: ;)
 

Sky

Top Contributor
meez hat gesagt.:
sky80 hat gesagt.:
Der Performancekiller an der Sache ist das '+'-Zeichen! Bei zusammenfügen von Strings mittels '+' wird immer ein neues Stringbuffer-Objekt erzeugt! Das heißt, wenn Du eine Schleife hast, in der Du die Strings derart zusammenfügst so wirst Du für jeden Durchlauf einen neuen Stringbuffer bekommen

Steht ja da... :bae: ;)

Ok... hab's beim ersten lesen so verstanden, dass die 2. Variante okay ist... naja, kann passieren so kurz vor'm Feierabend! ;-)
 

najjannaj

Aktives Mitglied
Hier mal der Komplette Quellcode:


--> FrmNew.java
Code:
package FrmNew;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;

import Dialog.AddDialog;
import FrmAbout.FrmAbout;
import Save.Save;
import Variablen.Variablen;

public class FrmNew extends Frame implements ActionListener {

	private JLabel jLabel1 = null; //Variablen für die Swing-Objekte
	private JLabel jLabel = null; //Variablen für die Swing-Objekte
	private JTextField jTextField = null; //Variablen für die Swing-Objekte
	private JButton jButton = null; //Variablen für die Swing-Objekte
	private JButton jButton1 = null; //Variablen für die Swing-Objekte
	
	static Vector path = new Vector();
	static Vector comment = new Vector();
	
	static int zfzf=0;
	
	DefaultListModel dlm = new DefaultListModel(); //ListModul zum Hinzufügen der Liste
	JList jList = new JList(dlm); //Jliste als DefaultListModel erzeugen
	
	private JButton jButton2 = null;

	public FrmNew() {
			super();
		      addWindowListener(								/*Auf Befehle im Fenster warten*/
		              new WindowAdapter()						/*Max-Minimieren-Beenden*/ {
		                 public void windowClosing(WindowEvent event)
		                 {
		                    setVisible(false);
		                    dispose();
		                    System.exit(0);
		                 }
		              }
		           );
			initialize();
		}
	    
		private void initialize() { /*Laden des Frames*/
			
			jLabel = new JLabel(); //Picture-Label
			jLabel1 = new JLabel(); //Comment-Label

			this.setLayout(null);
			this.setBackground(java.awt.Color.lightGray);
			this.setSize(350, 255);
			this.setTitle("Fotofuture - New"); //Titel des Forumlars
			setMenuBar(new NewMenue(this));//Menü oben einfügen
			
			jLabel.setBounds(24, 57, 50, 17);
			jLabel.setText("Picture:");
			jLabel1.setBounds(11, 214, 64, 17);
			jLabel1.setText("Comment:");
			
			jList.setBounds(80, 60, 160, 125);
			jList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
			this.add(getJList(),null);	//Hinzufügen der Liste
			this.add(jLabel, null);     //Hinzufügen des Picture-Labels
			this.add(jLabel1, null);    //Hinzufügen des Comment-Labels
			this.add(getJTextField(), null); //Hinzufügen des Comment-Text-Feldes
			this.add(getJButton(), null); //Hinzufügen des Add-Buttons 
			this.add(getJButton1(), null); //Hinzufügen des Add-Buttons
			this.add(getJButton2(), null);
			this.show();
						
			RefreshListBox();
		}
	private JTextField getJTextField() { //Comment-Textbox
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(80, 219, 160, 20);
		}
		return jTextField;
	}
	private JList getJList(){ //jList-Box
		
		jList.setBounds(80, 60, 160, 125);
		jList.setAutoscrolls(true);
		jList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		jList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { 
			public void valueChanged(javax.swing.event.ListSelectionEvent e) {
				if (jList.getSelectedIndex()==-1){
					jList.setSelectedIndex(0);
				}
				if (zfzf==1){
					zfzf=0;
					System.out.println("ValueChangedTO: "+jList.getSelectedIndex());
					if (jList.getSelectedIndex()!=-1){
						jTextField.setText((String)comment.get(jList.getSelectedIndex()));
					}
				}else{zfzf++;}
			}});
		
		return jList;
	}
	private JButton getJButton() { //Add-Button
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(266, 60, 75, 25);
			jButton.setText("Add");
			jButton.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					System.out.println("button ADD wurde geklickt!");
					Add2Path(AddDialog.AddDia());
				}
			});
		}
		return jButton;
	}
	private JButton getJButton1() { //Delete-Button
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(269, 85, 75, 25);
			jButton1.setText("Delete");
			jButton1.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    				
					System.out.println("button DELETE wurde geklickt!");

					Del(jList.getSelectedIndex());
				}
			});
		}
		return jButton1;
	}
	private JButton getJButton2() { //Okay-Button
		if (jButton2 == null) {
			jButton2 = new JButton();
			jButton2.setBounds(265, 221, 75, 25);
			jButton2.setText("OK");
			jButton2.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					System.out.println("button OK wurde geklickt!");
					Add2Comment(jList.getSelectedIndex(),jTextField.getText());
				}
			});
		}
		return jButton2;
	}
	   public void actionPerformed(ActionEvent event) {//Für das Menü
        String cmd = event.getActionCommand();
        if (cmd.equals("Exit")){
            setVisible(false);
            dispose();
            System.exit(0);
        }else if(cmd.equals("About")){
            FrmAbout about = new FrmAbout();
        }else if(cmd.equals("Save Album")){
        	createArray(path, comment);
        	convertPath(path);
        	convertComment(comment);
        	Save.speichern("C:\\java\\bla.txt");
        }
     }
	public void ClearListBox(){
		dlm.removeAllElements();
	}
	public void RefreshListBox(){
		dlm.removeAllElements();
		for (int i=0;i<path.size();i++){
			dlm.add(i,path.get(i));
		}
	}
	public void Add2Path(String Path){
		ClearListBox();
		path.add(Path);
		comment.add(null);
		RefreshListBox();
	}
	public void Add2Comment(int Index, String Text){
		comment.add(Index, Text);
		System.out.println("Comment: "+Text+" -> "+Index);
	}
	public void Del(int Index){
		ClearListBox();
		path.remove(Index);
		comment.remove(Index);
		RefreshListBox();
	}
    public static void main(String[] args) {
		FrmNew test = new FrmNew();
	}
	public static void convertPath(Vector path){
		
		for (int i=0;i < path.size();i++){
			String ZwischenVar = (String)path.get(i);
			int LengthPath = ZwischenVar.length();
			
			for (int j=LengthPath;j<100;j++){
				ZwischenVar = ZwischenVar +" ";
			}
			System.out.println("ZwischenVar["+i+"][0]: "+ZwischenVar);
			Variablen.Bilder[i][0] = ZwischenVar;
			
		}
	}
	public void createArray(Vector path, Vector comment) { 
		  int size = ( path.size() > comment.size() ) ? path.size() : comment.size(); 
		  Variablen.Bilder = new String[size][2]; 
		} 
	public static void convertComment(Vector path){
		
		for (int i=0;i < path.size();i++){
			String ZwischenVar = (String)path.get(i);
			int LengthPath = ZwischenVar.length();
			
			for (int j=LengthPath;j<100;j++){
				ZwischenVar = ZwischenVar +" ";
			}
			System.out.println("ZwischenVar["+i+"][1]: "+ZwischenVar);
			Variablen.Bilder[i][1] = ZwischenVar;
			
		}
	}
 }


--> Variablen.java
Code:
package Variablen;

public class Variablen {
    public static String OpenPath= "c:"+System.getProperty("file.separator")+"java"+System.getProperty("file.separator")+"test.alb";
    public static String SavePath= "c:"+System.getProperty("file.separator")+"java"+System.getProperty("file.separator")+"test2.alb";
    public static String SplashPath= "c:"+System.getProperty("file.separator")+"java"+System.getProperty("file.separator")+"splash.gif";

    public static String OpenDiaPath;
    public static String OpenTitle;
    
    public static int AktPic=0;
    public static int MaxPicZahl=0;
    
    public static String Bilder[][]=null;
}

--> Save.java
Code:
package Save;

import java.io.FileOutputStream;
import java.util.Vector;

import Load.Load;
import Variablen.Variablen;

public class Save {
    
	public static void speichern(String FilePath) {
	  		try {
	  			// Öffne die Datei mit dem angegebenen Namen
	  			FileOutputStream fos = new FileOutputStream(FilePath);
	  			for (int i = 0; i < Variablen.Bilder.length; i++) {
	  				fos.write(Variablen.Bilder[i][0].getBytes());    //schreibe Path in Datei			
	  				fos.write(Variablen.Bilder[i][1].getBytes());	//schreibe Comment in Datei		
	  			} 
	  			fos.close();
	  		} catch (Exception e) {
	  			  System.out.println(e);
	  		}
	}

}
Hier die Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FrmNew.FrmNew.convertComment(FrmNew.java:219)
at FrmNew.FrmNew.actionPerformed(FrmNew.java:165)
at java.awt.MenuItem.processActionEvent(Unknown Source)
at java.awt.MenuItem.processEvent(Unknown Source)
at java.awt.MenuComponent.dispatchEventImpl(Unknown Source)
at java.awt.MenuComponent.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(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)


Wenn sonst noch jemand was braucht, einfach melden!
Vielen Dank im Vorraus!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2
C vector von vector sortieren Allgemeine Java-Themen 4
D Vector in String Allgemeine Java-Themen 5
J Von Collection zu vector Allgemeine Java-Themen 5
D Vector in Datei schreiben Allgemeine Java-Themen 18
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
H Vector in ein File-Array umwandeln Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben