Avatar billede stigc Nybegynder
30. september 2004 - 23:17 Der er 17 kommentarer og
1 løsning

Java application path

Hvordan finder jeg den fulde sti på hvor en jar fil kører fra?

String applicationPath = (new File("").getAbsolutePath()); virker ikke da det giver mig hvor programmet bliver startet fra.

Nogen der har prøvet den nye JRE? GUI kører rigtig meget bedre, men hvordan får jeg det til at ligne det gamle Swing design?
Avatar billede arne_v Ekspert
30. september 2004 - 23:18 #1
Prøv den her kode:

import java.util.*;

public class GetPath {
    private static String getPath() {
        String cn = GetPath.class.getName();
        StringTokenizer st = new StringTokenizer(cn,".");
        StringBuffer sb = new StringBuffer("");
        boolean first = true;
        while(st.hasMoreTokens()) {
            if(first) {
                first = false;
            } else {
                sb.append("/");
            }
            sb.append(st.nextToken());
        }
        sb.append(".class");
        String path = GetPath.class.getClass().getClassLoader().getSystemResource(sb.toString()).getPath();
        return path;
    }
    public static void main(String[] args) {
      System.out.println(getPath());
    }
}
Avatar billede arne_v Ekspert
30. september 2004 - 23:20 #2
Jeg mener at du switcher mellem gammel og ny med:

javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.OceanTheme());

og

javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.DefaultMetalTheme());
Avatar billede arne_v Ekspert
30. september 2004 - 23:21 #3
Prøv evt. den her:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MultiLookAndFeel extends JFrame implements ActionListener {
  private JButton windows = new JButton("Windows");
  private JButton motif = new JButton("Motif");
  private JButton metal1 = new JButton("Metal/ocean");
  private JButton metal2 = new JButton("Metal/steel");
  private JButton gtk = new JButton("GTK");
  private JButton java = new JButton("Java");
  private JButton system = new JButton("System");
  public MultiLookAndFeel() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new GridLayout(7, 1));
      windows.addActionListener(this);
      getContentPane().add(windows);
      motif.addActionListener(this);
      getContentPane().add(motif);
      metal1.addActionListener(this);
      getContentPane().add(metal1);
      metal2.addActionListener(this);
      getContentPane().add(metal2);
      gtk.addActionListener(this);
      getContentPane().add(gtk);
      java.addActionListener(this);
      getContentPane().add(java);
      system.addActionListener(this);
      getContentPane().add(system);
      pack();
  }
  public void actionPerformed(ActionEvent e) {
      try {
        if(e.getSource() == windows) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } else if(e.getSource() == motif) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
        } else if(e.getSource() == metal1) {
            javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.OceanTheme());
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } else if(e.getSource() == metal2) {
            javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.DefaultMetalTheme());
            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        } else if(e.getSource() == gtk) {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
        } else if(e.getSource() == java) {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } else if(e.getSource() == system) {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
      } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
      } catch (InstantiationException e1) {
        e1.printStackTrace();
      } catch (IllegalAccessException e1) {
        e1.printStackTrace();
      } catch (UnsupportedLookAndFeelException e1) {
        e1.printStackTrace();
      }
      SwingUtilities.updateComponentTreeUI(this);
      pack();
  }
  public static void main(String[] args) {
      MultiLookAndFeel f = new MultiLookAndFeel();
      f.setVisible(true);
  }
}
Avatar billede stigc Nybegynder
30. september 2004 - 23:25 #4
Som altid vågen arne_v.  Har du eksperimenteret med dens bagudkompabilitet? Jeg har kompileret til 1.3 og det så ud til at virke fint. Jeg undre mig over jeg både skulle sætte -source og -target ud over target.
Hvad gør den egentlig med kode der er specifikt for den nye version når man f.eks kører den på en 1.3?
Avatar billede arne_v Ekspert
30. september 2004 - 23:27 #5
Nej. Men det plejer at virke fint, så det gør det sikkert også i 1.5.
Avatar billede arne_v Ekspert
30. september 2004 - 23:27 #6
Eller 5 !  :-)

PS: Har du læst min artikel om nye features i 1.5 ?
Avatar billede stigc Nybegynder
30. september 2004 - 23:30 #7
Kunne du svare på denne : "Hvad gør den egentlig med kode der er specifikt for den nye version når man f.eks kører den på en 1.3?"?

Jeg finder lige din artikel.
Avatar billede stigc Nybegynder
30. september 2004 - 23:31 #8
Ja, det er sku' en sjov versionering de kører!
Avatar billede stigc Nybegynder
30. september 2004 - 23:33 #9
Har du et link? - den lader sig ikke finde!
Avatar billede arne_v Ekspert
30. september 2004 - 23:35 #10
Avatar billede arne_v Ekspert
30. september 2004 - 23:37 #11
Jeg er ikke sikker, men jeg vil tro at man bare render ind i en class not found exception.
Avatar billede stigc Nybegynder
30. september 2004 - 23:38 #12
Nu ved jeg hvorfor jeg ikke fandt den. Søgte på dit navn "arne_v", gik til side 2 (du har skevet over 20 artikler!), hvorpå søgningen blev gemt og Eksperten viste alle artikler.
Avatar billede arne_v Ekspert
30. september 2004 - 23:39 #13
Ja - der er en lille kendt bug i Eksperten
Avatar billede stigc Nybegynder
30. september 2004 - 23:45 #14
Sidste gang :)

"Hvad gør den egentlig med kode der er specifikt for den nye version når man f.eks kører den på en 1.3?"

Læg et svar, og forresten en god artikel. Jeg har lige udnyttet AlwaysOnTop fra 1.5 som jeg normalt gjorde igennem JNI.
Avatar billede arne_v Ekspert
30. september 2004 - 23:53 #15
Hvis den ikke er markeret som krævende højere version, så får man typisk en ClassNotFoundException,
men må også kunne få en anden exception for ukendt kode.

Hvis den er markeret som krævende højere version, så får man UnsupportedClassVersionError.
Avatar billede arne_v Ekspert
30. september 2004 - 23:54 #16
Prøv selv.
Avatar billede arne_v Ekspert
30. september 2004 - 23:54 #17
og et svar
Avatar billede stigc Nybegynder
01. oktober 2004 - 00:00 #18
Tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester