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?
Annonceindlæg tema
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()); } }
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());
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); } }
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?
30. september 2004 - 23:27
#5
Nej. Men det plejer at virke fint, så det gør det sikkert også i 1.5.
30. september 2004 - 23:27
#6
Eller 5 ! :-) PS: Har du læst min artikel om nye features i 1.5 ?
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.
30. september 2004 - 23:31
#8
Ja, det er sku' en sjov versionering de kører!
30. september 2004 - 23:33
#9
Har du et link? - den lader sig ikke finde!
30. september 2004 - 23:35
#10
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.
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.
30. september 2004 - 23:39
#13
Ja - der er en lille kendt bug i Eksperten
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.
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.
30. september 2004 - 23:54
#16
Prøv selv.
30. september 2004 - 23:54
#17
og et svar
01. oktober 2004 - 00:00
#18
Tak
Kurser inden for grundlæggende programmering