.jar file verhält sich anders...

M4D-M4X

Bekanntes Mitglied
Hi ich habe mal eine Grundlegende Frage zu .jar files.

Ist es möglich, dass sich die .jar files je nach java version anders vehalten bzw. nicht funktionieren ?

ich habe auf de version 1.6.0_18 ein Programm geschrieben und es funktioniert einwandfrei.

Wenn ich das Programm jedoch auf einem anderen PC ausführe (Java Version 1.6.0_21) wird die GUI
zwar aufgebaut aber die haupfunktionen gehen nicht mehr...

Ich bin diesbezüglich echt ratlos, da es auf dem anderen System funktioniert...
 
Und kommt eine Exception ?

bei diesem Versionsrpung den du geschrieben hast kann ich mir nicht vorstellen, dass da unterschiede sein sollten.
 
du könntest auf jar verzichten und erstmal nur Java-Dateien auf beiden Computern testen,
da kann immer noch genausoviel schiefgehen, jar als Ursache wäre dann aber komplett obsolet

> die haupfunktionen gehen nicht mehr...

gehts genauer? sind es primär Anzeigefehler, fliegen Exceptions?
gibt java -version wirklich 6.21 oder ist das nur eine Vermutung weil 6.21 installiert ist (vielleicht zusammen mit anderen Java-Versionen)
 
Woran erkenne ich, dass Exceptions ausgegeben werden, wenn ich ein .jar File ausführe?
Die Java Versionen habe ich über java -version ausgelesen.

Um die Hauptfunktion handelt es sich, dass dateien mit einer bestimmten endung eingelesen werden und dann mit namen als JRadio Button auf dem Panel des Frames erscheinen. Anschließend wird eine dieser Dateien ausgewählt und die wird dann mit enem fest definierten namen kopiert sobald man auf Apply drückt.

Ich weiß nicht ob es sich hierbei um einen anzeigefehler handelt oder ob sie wirklich nicht gesetzt werden...
 
Zuletzt bearbeitet:
falls du das Programm als Quellcode vorliegen hast, sollst du gewisse Schritte debuggen/ loggen,
etwa ob die Daten eingelesen, ob die Buttons erstellt/ eingefügt werden, usw.

falls es nur eine fehlerhafte GUI-Darstellung ist, so kann ich mir vorstellen dass dies an schlechter Programmierung liegt,
die dann auf einem PC schon unvorhersehbar reagiert, je nach Version und anderen Rechner gerne anders

bei Änderung der GUI zur Laufzeit sind Layouts zu beachten, und am Ende
validate()
+
repaint()
am JFrame aufrufen, in der Richtung alles bekannt, von ausreichend robusten Einbau überzeugt?
gibts Quellcode dahingehend zu posten?
 
So wie du es beschreibst liegt es zu 90% an meinem schlechten Code, da ich noch ein relativer Programmieranfänger bin.

Der Code lautet wie folgt:

[Java]

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
import java.util.*;


public class CreateWindow extends JFrame {

private static final long serialVersionUID = 1L;

Logic Program = new Logic();
ArrayList <String> salGetConfig = new ArrayList <String> (0);
ButtonGroup JRadioGroup = new ButtonGroup();
ArrayList <JRadioButton> JRButtons = new ArrayList <JRadioButton> (0);
JFrame frame = new JFrame("Vesp.imp Switcher");
JPanel panel = new JPanel();
String [] ICVersions = new String[2];
String sICVersion = "";
String sVespOrdner="";
String ConfigPath = System.getProperty("user.dir");;
String ICPath = "";
int iheight = 50;
String sTFVespFolder = "";

public CreateWindow() throws IOException{

ICVersions[0] = "IC71";
ICVersions[1] = "IC72";
frame.setBounds(460, 230, 300, 360);
frame.setVisible(true);
panel.setLayout(null);


File file = new File(ConfigPath+"/Config.ini");
if(file.exists()){
FileReader File = new FileReader(ConfigPath+"/Config.ini");
BufferedReader read = new BufferedReader(File);
String zeile = "";

while((zeile=read.readLine()) !=null ){
salGetConfig.add(zeile);
}
sTFVespFolder = salGetConfig.get(1);
ICPath = salGetConfig.get(0);
sVespOrdner = salGetConfig.get(1);

}
else{
FileWriter FWriter = new FileWriter(ConfigPath+"/Config.ini");
BufferedWriter Test = new BufferedWriter(FWriter);

Test.write("Erstkonfiguration");
Test.newLine();
Test.write("Erstkonfiguration");

ICPath="Erstkonfiguration";
sTFVespFolder = "Erstkonfiguration";

Test.close();
FWriter.close();
}
}

public void Window() throws IOException{

final JLabel Label = new JLabel("Vesp.imp Switcher") ;
Label.setBounds(90, 13, 178, 20);
frame.add(Label);

final JLabel VespFolder = new JLabel("Vesp Ordner:");
VespFolder.setBounds(30, 245, 105, 20);
frame.add(VespFolder);

final JLabel SetPath = new JLabel("IC Pfad:");
SetPath.setBounds(60, 272, 105, 20);
frame.add(SetPath);


final TextArea TACInf = new TextArea("Copy Information:"+'\n'+""+'\n');
TACInf.setBounds(5, 50, 140, 165);
TACInf.setEditable(false);
frame.add(TACInf);


final JFormattedTextField TFSetPath = new JFormattedTextField(ICPath);
TFSetPath.setBounds(115, 275, 175, 15);
frame.add(TFSetPath);

final JFormattedTextField TFVespFolder = new JFormattedTextField(sTFVespFolder);
TFVespFolder.setBounds(115, 248, 175, 15);
frame.add(TFVespFolder);

final JButton Exit = new JButton("Exit");
Exit.setBounds(220,300,60,20);
frame.add(Exit);

Exit.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
System.exit( 0 );
}
} );


final JComboBox ICVersion = new JComboBox(ICVersions);
ICVersion.setBounds(5, 220, 50, 20);
ICVersion.setSelectedIndex(1);
frame.add(ICVersion);

ICVersion.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
if(ICVersion.getSelectedIndex() == 0){
ICPath = System.getenv("Avaya_"+ICVersions[0]+"_HOME");
if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{

if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{
TFSetPath.setText(ICPath+"/etc");
}


}
TFSetPath.updateUI();

}
else if(ICVersion.getSelectedIndex() == 1){
ICPath = System.getenv("Avaya_"+ICVersions[1]+"_HOME");

if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{
TFSetPath.setText(ICPath+"/etc");
}

}
}
} );

final JButton SaveConfig = new JButton("Save Config");
SaveConfig.setBounds(184, 220, 105, 20);
frame.add(SaveConfig);

SaveConfig.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
try {
Program.WriteConfig(TFSetPath.getText(),TFVespFolder.getText(),ConfigPath);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});

final JButton Refresh = new JButton("Refresh Vesps");
Refresh.setBounds(60, 220, 120, 20);
frame.add(Refresh);

Refresh.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
sVespOrdner = TFVespFolder.getText();
for(int i = 0;i<JRButtons.size();i++){

JRadioGroup.remove( JRButtons.get(i));

}
panel.removeAll();
frame.repaint();
JRButtons.clear();
JRadioGroup = new ButtonGroup();
refreshJRButtons();
}
});

final JButton Apply = new JButton("Apply");
Apply.setBounds(5, 300, 70, 20);
frame.add(Apply);

Apply.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
try {
String Choice = "";
for(int i = 0;i<JRButtons.size();i++){
JRadioButton JRButton = JRButtons.get(i);
if(JRButton.isSelected()){
Choice = JRButton.getName();
}
}
ArrayList <String> CopyInformation = Program.ChangeVesp(TFVespFolder.getText(),TFSetPath.getText(),Choice);
for(int i = 0; i<CopyInformation.size();i++){
TACInf.append(CopyInformation.get(i));
}
}
catch (Exception e1) {
e1.printStackTrace();
}}});

refreshJRButtons();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}

private void refreshJRButtons(){

iheight = 50;
String []saNumRButtons = Program.getVespsIn(sVespOrdner);
if(saNumRButtons != null){
for(int i =0;i<saNumRButtons.length;i++){
//erstellen des RButtons
JRadioButton RButton = new JRadioButton(saNumRButtons);
RButton.setName(saNumRButtons);
RButton.setBounds(150, iheight, 400, 20);




//hinzufügen des RButtons
JRButtons.add(RButton);
panel.add(RButton);
JRadioGroup.add(RButton);
panel.repaint();

//Höhenbestimmung + selection
iheight = iheight + 20;
if(RButton.getName().equals("Vesp.imp")||RButton.getName().equals("vesp.imp")){
RButton.setSelected(true);
}
}
}


}





[/Java]


Ich führe repaint() auf die einzelnen Componenten aus, jedoch kein validate(), da es mir bei jedem mal als ich validate() aufgerufen habe meine komlette GUI zerschossen hat... warum auch immer.

Ihr könnt mir auch ruhig sagen, was man an dem Code besser machen kann (Da gibts denk ich ne ganze Menge :autsch🙂
 
dein panel hat das null-Layout bzw. kein Layout, da ist validate() nicht nötig,

ich vermute dann als Fehlerursache den auch beliebten Fehler, bei dir vorhanden, setVisible(true); nicht als letzten Befehl auszuführen,
wer ruft wann die Methode Window() auf? verschiebe
> frame.setVisible(true);
von Zeile 33 an das Ende der Window()-Methode

edit:
bzw. steht dort sowieso schon, nur Zeile 33 weg

edit:
der Platz von panel im JFrame könnte noch genauer definiert werden,
genauso für die anderen Komponenten, die werden alle geaddet, alle haben setBounds bis auf das panel,
aber eigentlich hat das JFrame gar kein null-Layout?


-----

allgemein:
Attribute und Methoden unbedingt klein schreiben, Klassen (und Konstruktoren) groß

deine Klasse CreateWindow muss hier nicht von JFrame erben, da du ein JFrame-Attribut verwendest,

new ArrayList(0); mit Länge 0 ist ziemlich fragwürdig, es geht auch einfach new ArrayList();
 
Zuletzt bearbeitet von einem Moderator:
Oh okay das wusste ich noch gar nicht, dass man validate() nur bei einem LayoutManager verwendet...

Okay der fehler das ich setVisible(true) zwei mal aufrufe ist mir fast peinlich 😳

das heißt das momentane TODO ist jetzt:

1.Zeile 33 löschen xD
2.Dem panel Bounds zuweisen
3.Dem Frame ein null layout zuweisen


Ist das mit der ArrayList(0) nicht egal?
Ich finde es für mich einfach übersichtlicher wenn ich ne Null reinschreibe.... oder ist das doch tragischer als angenommen?

Das mit dem erben von JFrame brauche ich dann anscheinend nur, wenn ich keinen JFrame extra deklariert hätte oder?

Die Methode Window() wird von meiner Main Klasse aus aufgerufen (Habe ich mir so angewöhnt immer eine Main Klasse zu schreiben, die das Programm startet).


Der Code ist wie folgt:

[Java]

import java.io.IOException;
public class Main {

public static void main(String[] args) throws IOException{
CreateWindow start = new CreateWindow();
start.Window();
}
}
[/Java]
 
> Das mit dem erben von JFrame brauche ich dann anscheinend nur, wenn ich keinen JFrame extra deklariert hätte oder?

ja

--

ArrayList(0) funktioniert genauso, macht nur bisschen Arbeit, erstellt sich anfangs intern ein Array der Länge 0,
bei der ersten Einfügung ist das schon zuwenig Platz, es muss ein neues Array der Länge 1 erstellt werden, dann, 2, 4, 7,
es wird immer mehr erhöht wenn nötig, immer (alte Size * 1.5 +1)

ArrayList() beginnt mit 10, da passt schon ein wenig rein ohne dass der interne Platz vergrößert werden muss
 
Okay das ist alles gut zu wissen =)

Habe jetzt mal eben die Veränderungen durchgeführt.

Sobald ich dem Frame (vor dem setzen der Bounds) ein null Layout zuweise erscheinen die JRadio Buttons auch nicht mehr...

womit hat das zu tun ?
 
dass panel keine Bounds hat und so in einem richtigen null-Layout des JFrames gar nicht mehr auftaucht
 
Okay ich habe jetzt das Panel an die richtige stelle geordert.
Es ist dort definitiv, jedoch werden die Buttons immer noch nicht angezeigt...

ich bin da echt ratlos?

mach ich irgendwas falsch?

Okay das bestimmt...

ich könnte mir höchstens vorstellen, dass es etwas mit der Buttonerstellung zu tun hat.
(Methode refreshJRButtons)
 
'es ist dort definitiv klingt nicht' klingt nicht so definitiv, setze einen Border drum, füge oben links/ unten rechts dauerhaft begrenzende Komponenten ein, wobei die bei
> panel.removeAll();
wohl verschwinden..

logge die Methode, was ist
> String []saNumRButtons = Program.getVespsIn(sVespOrdner);
wird der Code wirklich ausgeführt, ist das Array vielleicht leer, dann gibts keine Buttons,
kann einen völlig anderen Grund haben als ich bisher angesprochen hatte, etwa irgendeine Datei nicht gefunden, da anderer Verzeichnisaufbau
 
Ich habe mit dem Code mal ein wenig rumexperimentiert und die Buttons sind definitiv da!,
da der Kopiervorgang bei einem Druck auf Apply stattfindet... Habe zwei verschiedene Ordner gehabt wo die selbe Datei einmal 0kb und einmal 1 kb hatte und der eine kb wurde auch wirklich kopiert, was ohne die buttons nicht möglich wäre....

Der Code wird auch definitiv ausgeführt.

Ich denke nicht, dass es an der Logik des Programmes scheitert.
Alle Arrays haben ihre Werte... die Buttons sind auch eigentlich da... werden nur nicht angezeigt =/
 
hmm, du kannst noch deinen aktuellen Code posten, aber ich glaube dazu fällt mir soweit nichts mehr ein
 
Okay dann hier nochmal mein aktueller Code:


GUI Klasse:
[Java]

import java.awt.Color;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
import java.util.*;


public class CreateWindow{

private static final long serialVersionUID = 1L;

Logic Program = new Logic();
ArrayList <String> salGetConfig = new ArrayList <String> (0);
ButtonGroup JRadioGroup = new ButtonGroup();
ArrayList <JRadioButton> JRButtons = new ArrayList <JRadioButton> (0);
JFrame frame = new JFrame("Vesp.imp Switcher");
JPanel panel = new JPanel();
String [] ICVersions = new String[2];
String sICVersion = "";
String sVespOrdner="";
String ConfigPath = System.getProperty("user.dir");;
String ICPath = "";
int iheight = 50;
String sTFVespFolder = "";

public CreateWindow() throws IOException{

ICVersions[0] = "IC71";
ICVersions[1] = "IC72";
frame.setLayout(null);
panel.setLayout(null);
frame.setBounds(460, 230, 300, 360);
panel.setBounds(150,50,150,165);

File file = new File(ConfigPath+"/Config.ini");
if(file.exists()){
FileReader File = new FileReader(ConfigPath+"/Config.ini");
BufferedReader read = new BufferedReader(File);
String zeile = "";

while((zeile=read.readLine()) !=null ){
salGetConfig.add(zeile);
}
sTFVespFolder = salGetConfig.get(1);
ICPath = salGetConfig.get(0);
sVespOrdner = salGetConfig.get(1);

}
else{
FileWriter FWriter = new FileWriter(ConfigPath+"/Config.ini");
BufferedWriter Test = new BufferedWriter(FWriter);

Test.write("Erstkonfiguration");
Test.newLine();
Test.write("Erstkonfiguration");

ICPath="Erstkonfiguration";
sTFVespFolder = "Erstkonfiguration";

Test.close();
FWriter.close();
}
}

public void Window() throws IOException{

final JLabel Label = new JLabel("Vesp.imp Switcher") ;
Label.setBounds(90, 13, 178, 20);
frame.add(Label);

final JLabel VespFolder = new JLabel("Vesp Ordner:");
VespFolder.setBounds(30, 245, 105, 20);
frame.add(VespFolder);

final JLabel SetPath = new JLabel("IC Pfad:");
SetPath.setBounds(60, 272, 105, 20);
frame.add(SetPath);


final TextArea TACInf = new TextArea("Copy Information:"+'\n'+""+'\n');
TACInf.setBounds(5, 50, 140, 165);
TACInf.setEditable(false);
frame.add(TACInf);


final JFormattedTextField TFSetPath = new JFormattedTextField(ICPath);
TFSetPath.setBounds(115, 275, 175, 15);
frame.add(TFSetPath);

final JFormattedTextField TFVespFolder = new JFormattedTextField(sTFVespFolder);
TFVespFolder.setBounds(115, 248, 175, 15);
frame.add(TFVespFolder);

final JButton Exit = new JButton("Exit");
Exit.setBounds(220,300,60,20);
frame.add(Exit);

Exit.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
System.exit( 0 );
}
} );


final JComboBox ICVersion = new JComboBox(ICVersions);
ICVersion.setBounds(5, 220, 50, 20);
ICVersion.setSelectedIndex(1);
frame.add(ICVersion);

ICVersion.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
if(ICVersion.getSelectedIndex() == 0){
ICPath = System.getenv("Avaya_"+ICVersions[0]+"_HOME");
if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{

if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{
TFSetPath.setText(ICPath+"/etc");
}


}
TFSetPath.updateUI();

}
else if(ICVersion.getSelectedIndex() == 1){
ICPath = System.getenv("Avaya_"+ICVersions[1]+"_HOME");

if(ICPath == null){
ICPath ="";
TFSetPath.setText(ICPath);
}
else{
TFSetPath.setText(ICPath+"/etc");
}

}
}
} );

final JButton SaveConfig = new JButton("Save Config");
SaveConfig.setBounds(184, 220, 105, 20);
frame.add(SaveConfig);

SaveConfig.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
try {
Program.WriteConfig(TFSetPath.getText(),TFVespFolder.getText(),ConfigPath);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});

final JButton Refresh = new JButton("Refresh Vesps");
Refresh.setBounds(60, 220, 120, 20);
frame.add(Refresh);

Refresh.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
sVespOrdner = TFVespFolder.getText();
for(int i = 0;i<JRButtons.size();i++){

JRadioGroup.remove( JRButtons.get(i));

}
panel.removeAll();
frame.repaint();
JRButtons.clear();
JRadioGroup = new ButtonGroup();
refreshJRButtons();
}
});

final JButton Apply = new JButton("Apply");
Apply.setBounds(5, 300, 70, 20);
frame.add(Apply);

Apply.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
try {
String Choice = "";
for(int i = 0;i<JRButtons.size();i++){
JRadioButton JRButton = JRButtons.get(i);
if(JRButton.isSelected()){
Choice = JRButton.getName();
}
}
ArrayList <String> CopyInformation = Program.ChangeVesp(TFVespFolder.getText(),TFSetPath.getText(),Choice);
for(int i = 0; i<CopyInformation.size();i++){
TACInf.append(CopyInformation.get(i));
}
}
catch (Exception e1) {
e1.printStackTrace();
}}});

refreshJRButtons();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}

private void refreshJRButtons(){

iheight = 55;
String []saNumRButtons = Program.getVespsIn(sVespOrdner);
if(saNumRButtons != null){
for(int i =0;i<saNumRButtons.length;i++){
//erstellen des RButtons
JRadioButton RButton = new JRadioButton(saNumRButtons);
RButton.setName(saNumRButtons);
RButton.setBounds(150, iheight, 400, 20);

//hinzufügen des RButtons
JRButtons.add(RButton);
panel.add(RButton);
JRadioGroup.add(RButton);
panel.repaint();

//Höhenbestimmung + selection
iheight = iheight + 20;
if(RButton.getName().equals("Vesp.imp")||RButton.getName().equals("vesp.imp")){
RButton.setSelected(true);
}
}
}


}



[/Java]



und jetzt die Logik Klasse:

[Java]

import java.io.*;
import java.nio.channels.ByteChannel;
import java.nio.channels.FileChannel;
import java.util.*;

public class Logic {



long lBuffer = ((1024*1024)/2);

public Logic(){

}

public void WriteConfig(String ICPath, String VespFolder, String ConfigPath) throws IOException{

try{
DeleteConfig();

FileWriter WriteConfig = new FileWriter(ConfigPath+"/Config.ini");
BufferedWriter writer = new BufferedWriter(WriteConfig);

writer.write(ICPath);
writer.newLine();
writer.write(VespFolder);

writer.close();
WriteConfig.close();
}
catch(FileNotFoundException e){
System.out.println("Die Datei konnte nicht gefunden werden");
}
}

private void DeleteConfig(){
File Config = new File("C:/Dokumente und Einstellungen/mallgaier/Desktop/Config.ini");
Config.delete();
}

public String[] getVespsIn(String sVespOrdner){

File dir = new File(sVespOrdner);

String[] Files = dir.list(new FilenameFilter() {

public boolean accept(File d, String name) {

return name.endsWith(".imp");
}
});



return Files;
}

public ArrayList <String> ChangeVesp(String SourcePath,String DestPath,String Choice) throws Exception{

ArrayList <String> CopyInformation = new ArrayList <String> (0);

File source = new File((SourcePath+"/"+Choice));
File destination = new File(DestPath+"/Vesp.imp");

FileInputStream fileInputStream = new FileInputStream(source);
FileOutputStream fileOutputStream = new FileOutputStream(destination);
FileChannel inputChannel = fileInputStream.getChannel();
FileChannel outputChannel = fileOutputStream.getChannel();
CopyInformation = transfer(inputChannel, outputChannel, source.length(), true);
fileInputStream.close();
fileOutputStream.close();
return CopyInformation;
}

private ArrayList <String> transfer(FileChannel fileChannel, ByteChannel byteChannel, long lengthInBytes, boolean verbose)throws IOException {
ArrayList <String> getcopytext = new ArrayList <String> (0);
long overallBytesTransfered = 0L;
long time = -System.currentTimeMillis();
while (overallBytesTransfered < lengthInBytes) {
long bytesTransfered = 0L;
bytesTransfered = fileChannel.transferTo(overallBytesTransfered, Math.min(lBuffer, lengthInBytes - overallBytesTransfered), byteChannel);
overallBytesTransfered += bytesTransfered;
if (verbose) {
getcopytext.add("Bytes transfered: " + overallBytesTransfered + " progress: " + (Math.round(overallBytesTransfered / ((double) lengthInBytes) * 100.0)) + "%"+'\n');
}
}
time += System.currentTimeMillis();
if (verbose) {
getcopytext.add("Transfered: " + overallBytesTransfered + " bytes in: " + (time / 1000) + " s "+'\n'+""+'\n');
}
return getcopytext;
}
}



[/Java]



Wenn du keinen Rat mehr hast... kannst du mir vllt nen Tipp geben wie du so ne GUI aufsetzen würdest?
Vor allem mit neuen Buttons die zu einem existierendne frame hinzugefügt werden.

Das wäre echt super =)
 
bei dir sind generell keine Buttons mehr zu sehen, richtig?
weder am alten noch am neuen PC,
das wäre ja eine wichtige Info, so ist klar dass ein Fehler vorliegt den ich bei mir genauso habe und der blitzschnell zu finden ist

das Problem ist nun nämlich, dass das Panel nur noch den Bereich x=150 bis x=300 im JFrame einnimmt,
deinen Buttons ordnest du
> RButton.setBounds(150, iheight, 400, 20);
die Postition x = 150 bis 550 zu und zwar relativ zum panel, also x=300 auf dem JFrame, welches nur 300 breit ist,
damit liegen die Buttons genau außerhalb des sichtbaren Bereichs,
schreibe
RButton.setBounds(50, iheight, 400, 20);
dann wirds besser

eine Layout-Alternative wäre z.B. ein vertikales Box-Layout,
How to Use BoxLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
einmal das Layout gesetzt musst du die Buttons nur noch adden, keine Position zuweisen,
in dem Fall dann mit validate() arbeiten
 
Danke SlaterB du bist ein Gott 😀

Da hätte einer selbst auch draufkommen können *seuftz*

Vielen Danke für die intensive Hilfestellung =)

Hast du vllt. noch ein paar generelle Tipps für mich?

Und danke für den Link, der scheint mir verdammt gut zu sein.
Den werde ich mir demnächst mal zu gemüte führen.
 
Zuletzt bearbeitet:
> Hast du vllt. noch ein paar generelle Tipps für mich?

die goldenen zwei Regeln sind
überall System.out.println()
und einfach vorgehen, wenn im panel nix zu sehen ist, dann nicht über komplizierte Listener und darin Schleifen + vorher noch Datei einlesen usw. befüllen, sondern erstmal alles dazu ausbauen/ ignorieren und nur irgendwo bei der Panel-Initialisierung eine einzelne Test-Komponente hinzufügen,

hab ich hier allerdings nicht gemacht und hilft auch nicht wirklich wenn man die Positionierung partout falsch versteht
 
Ja das nehm ich mir zu Herzen🙂

Das Problem ist jetzt nur noch... dass es auf dem anderen PC immer noch nicht läuft und ich es einfach nicht verstehe 😵

Was ich gerade erst festgestellt habe ist, dass hier kein kopiervorgang startet sobald ich auf Apply klicke was ja soviel bedeutet dass es keine Buttons gibt....

Es ist ein Mysterium 😵
 
was wieder zu
logge die Methode, was ist
> String []saNumRButtons = Program.getVespsIn(sVespOrdner);
wird der Code wirklich ausgeführt, ist das Array vielleicht leer, dann gibts keine Buttons,
kann einen völlig anderen Grund haben als ich bisher angesprochen hatte, etwa irgendeine Datei nicht gefunden, da anderer Verzeichnisaufbau
führt

loggen ist die goldene Regel 1
 
Meine Frage ist jetzt wie man das Programm am besten loggt?

Ich meine ich habe ja nur das Programm und keine Console etc.

Muss ich da dann immer etwas is Programm mit einbauen oder gibts da ne einfachere Möglichkeit?
 
System.out.println,
ein Logger in eine Datei,
selber Strings in eine Datei schreiben,
in die GUI in eine JTextArea,

zur Unterstützung dieser Vorgänge/ genauerer Analyse die Strings vielleicht in einer statischen Liste speichern
 
Okay jetzt habe ich mal 2 Stunden hin und hergellogt via "Ich packe String in mein Textfeld" 😀

Ich habe den Fehler gefunden... Kein Programmierfehler sondern ein (wie ich finde) ziemlich gemeiner
Fehler.

Und damit andere davon profitieren.. Hier das Problem mitsamt Lösung:

Das Programm wurde dafür geschaffen .imp Dateien automatisch zu erkennen und zu kopieren.
Auf dem 1. PC wo es funktioniert hat, habe ich Orginale .imps verwendet und auf Rechner 2. habe ich nur via Neu -> Textdokument -> Umbennenen -> Vesp.imp Dateien erstellt wodurch der Dateityp immernoch ein Textdokument war.

Als ich ebenfalls die Originalen .imp Dateien in den Ordner geschmissen habe hat alles wunderbar funktioniert.


Zum Schluss noch eine Frage:

Ich habe in meinem Programm einen FilenameFilter deklariert mit der Funktion -> name.endsWith(".imp");

Also sollte das doch auch einfach so funktionieren wenn ich ein Textdokument hernehme und umbennene oder ?


edit:
Es ist möglich das ganze via Textdokument zu machen, jedoch muss unter Ordneroption die Funktion
-> Erweiterungen bei bekannten Dateitypen ausblenden
deaktiviert werden.


Vielen Dank euch allen für die ausgiebige Hilfe, ich habe hierbei sehr viel gelernt 🙂
 
Zuletzt bearbeitet:
eine Datei hat keinen 'Dateityp',
evtl. hast du die Datei von Vesp.txt auf Vesp.imp.txt umbenannt weil im Explorer Dateiendungen ausgeblendet werden oder ähnlich komisches

im Java-Programm Verzeichnisse und Dateinamen auszugeben (VOR irgendwelchen Filtern, Verarbeitung usw.) gehört ganz klar zum Logging
 
Gerade mit Windows 7 ausprobiert. Neue Textdatei --> umbenannt in .imp ergibt eine Datei: Name.imp.txt
Schau mal mit der EIngabeaufforderung in dein Verzeichnis. Dann müsstest du es sehen.

Ich weiss jetzt nicht ob alle Windows Versionen die Umbenennung so handhaben. Einfach mal ausprobieren.
Gruß
 

Zurück
Oben