Gå til innhold

Problemer med Java under Linux


Anbefalte innlegg

Hei alle sammen.

Jeg har hatt problemer med å kjøre java-applikasjoner på fedora-boxen min helt siden jeg installerte jdk v1.6.0 for et par dager siden. Av en eller annen merkelig grunn ble Fedora Core 6 lansert jdk v1.4.2, noe jeg fremdeles ikke skjønner poenget med.

 

(Jeg beklager alt mellomrommet i koden, men det blir bare sånn når jeg forhåndsviser posten, selv om det ikke er mellomrom når jeg limer inn koden..)

 

Klikk for å se/fjerne innholdet nedenfor
import java.awt.BorderLayout;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Calendar;

import java.util.GregorianCalendar;



import javax.swing.AbstractAction;

import javax.swing.Action;

import javax.swing.DefaultComboBoxModel;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JSlider;

import javax.swing.JTextArea;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;





public class sett15_oppg2{



private static JTextArea kalenderTextArea;

private static JComboBox comboBox;

private static int måned = 11;

private static int år = 2007;



public static void main(String[] args) {

 JFrame f = new JFrame();

 f.setResizable(false);

 f.setTitle("VS Kalender Pro(tm) - (c)2007 Vegasoft");

 f.setSize(530, 285);

 f.setLocationRelativeTo(null);

 

 JMenuBar jmb = new JMenuBar();

 JMenu jm1 = new JMenu("Fil");

 JMenu jm2 = new JMenu("Hjelp");

 	JMenuItem jm1_i1 = new JMenuItem("Nullstill");

 	JMenuItem jm1_i2 = new JMenuItem("Avslutt");

 	JMenuItem jm2_i1 = new JMenuItem("Om..");

 	jm1.add(jm1_i1);

 	jm1.addSeparator();

 	jm1.add(jm1_i2);

 	jm2.add(jm2_i1);

 	jmb.add(jm1);

 	jmb.add(jm2);

 	f.setJMenuBar(jmb);

 	

 final JPanel panel = new JPanel();

 f.getContentPane().add(panel, BorderLayout.SOUTH);



 final JLabel label = new JLabel();

 label.setText("2007");

 panel.add(label);



 final JSlider slider = new JSlider();

 slider.setToolTipText("Velg et �rstall mellom 1950 og 2050");

 slider.setMinimum(1950);

 slider.setMaximum(2050);

 slider.setValue(2007);

 panel.add(slider);



 	// slider + tekstvindu-action

 	slider.addChangeListener(new ChangeListener() {

   public void stateChanged(ChangeEvent evt) {

   	label.setText(String.valueOf(slider.getValue()));

   	år = slider.getValue();

   }

 	});

 	// ferdig

 	

 

 comboBox = new JComboBox();

 comboBox.setToolTipText("Her velger du hvilken måned du ønsker å bruke.");

 comboBox.setModel(new DefaultComboBoxModel(new String[] {"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"}));

 comboBox.setSelectedIndex(11);

 panel.add(comboBox);

 

 comboBox.addItemListener(new ItemListener() {

 	public void itemStateChanged(ItemEvent arg0) {

   måned = comboBox.getSelectedIndex();

 	}

 });



 final JButton finnDinKalenderButton = new JButton();

 

 finnDinKalenderButton.setAction(finnDinKalenderAction);

 panel.add(finnDinKalenderButton);

 



 kalenderTextArea = new JTextArea();

 kalenderTextArea.setText("VS Kalender Pro(tm)\n--------------------\n\nVersjon 0.9");

 kalenderTextArea.setWrapStyleWord(true);

 kalenderTextArea.setFont(new Font("Lucida Console", Font.BOLD, 28));

 kalenderTextArea.setEditable(false);

 f.getContentPane().add(kalenderTextArea, BorderLayout.CENTER);

 

 //Meny-hendelser

 jm1_i1.addActionListener(new ActionListener() {

 	public void actionPerformed(ActionEvent arg0) {

   kalenderTextArea.setText("VS Kalender Pro(tm)\n--------------------\n\nVersjon 0.9");

   slider.setValue(2007);

 	}

 });

 jm1_i2.addActionListener(new ActionListener() {

 	public void actionPerformed(ActionEvent arg0) {

 	System.exit(0);

 	}

 });

 jm2_i1.addActionListener(new ActionListener() {

 	public void actionPerformed(ActionEvent arg0) {

 	JOptionPane.showMessageDialog(null, "Versjon 0.9\nOpprettet 2. februar 2007.", "VS Kalender Pro(tm) - (c)2007 Vegasoft", JOptionPane.PLAIN_MESSAGE);

 	}

 });

 //Meny-hendelser slutt

 

 

 f.setVisible(true);

 

}

public static Action finnDinKalenderAction = new AbstractAction("Finn din kalender") {

 public void actionPerformed(ActionEvent evt) {

 	File f = new File("kalender.txt");

 	

 	try {

   FileWriter fwriter = new FileWriter(f);

   PrintWriter fout = new PrintWriter(fwriter);

   

   GregorianCalendar d = new GregorianCalendar();

   

   d.set(Calendar.MONTH, sett15_oppg2.måned);

   int today = d.get(Calendar.DAY_OF_MONTH);

   int month = d.get(Calendar.MONTH);

   

   d.set(Calendar.DAY_OF_MONTH, 1);

   d.set(Calendar.YEAR, sett15_oppg2.år);

   int weekday = d.get(Calendar.DAY_OF_WEEK);

   

   fout.println("Man Tir Ons Tor Fre L�r S�n");

   

   for (int i = Calendar.MONDAY; i < weekday; i++)

   	fout.print("    ");

   do {

   	int day = d.get(Calendar.DAY_OF_MONTH);

   	fout.printf("%3d", day);

   	

   	if (day == today)

     fout.print(" ");

   	else

     fout.print(" ");

   	

   	if (weekday == Calendar.SUNDAY)

     fout.println();

   	

   	d.add(Calendar.DAY_OF_MONTH, 1);

   	weekday = d.get(Calendar.DAY_OF_WEEK);

   }

   while (d.get(Calendar.MONTH) == month);

   if (weekday != Calendar.MONDAY)

   	fout.println();

   fout.close();

 	}

 	catch (IOException e) {

   System.out.println("Det oppstod en uventet feil: " +e.getMessage());

 	}

 	int størrelse = (int)f.length();

 	int tegn_lest = 0;

 	char[] data = new char[størrelse];

 	sett15_oppg2.kalenderTextArea.setText("");

 	try

 	{

   if (f.exists())

   {

   	FileReader fmiddle = new FileReader(f);

   	BufferedReader in = new BufferedReader(fmiddle);

   	while(in.ready())

   	{

     tegn_lest += in.read(data, tegn_lest, størrelse - tegn_lest);

   	}

   	sett15_oppg2.kalenderTextArea.setText(new String(data, 0, tegn_lest));

   }

   else

   {

   	System.out.println("Filen kunne ikke bli funnet.");

   }

 	}

 	catch(IOException e)

 	{

   System.out.println("Det oppstod en feil: " + e.getMessage());

 	}



 }

};

}


 

Dette programmet er (som noen av dere sikkert ser) en kalender vi har fått i oppgave om å lage på skolen, og virker akkurat som den skal på windows-boxen min. Problemet er bare når jeg kompilerer den og prøver å kjøre den på Linux, får jeg bare opp et tomt JFrame-vindu (i rett dimensjon og med riktig tittel) men uten innhold. Hverken menyen, tekstfeltet, knappene eller noe annet er synlig utenom selve rammen.. Jeg regner med at problemet ligger i jdk'en, men jeg er heller ikke så veldig kjent med Java under linux, og har forstått at det er noe som heter GNU Java Compiler (eller GCJ). Er det dette jeg skal bruke på Linux i stedet for JDK'en jeg finner på Sun sine hjemmesider? Isåfall, hvordan installerer jeg det?

 

Ble kanskje litt mye dette her, men hvis det er noen som har hatt samme problemet, eller kunne tenkt seg å hjelpe til, ville jeg satt veldig stor pris på det!

 

***Code'n var umenneskelig lang så jeg la den i SKJUL-funksjonen.*** Pingla

Endret av Pingla
Lenke til kommentar
Videoannonse
Annonse

hmm.. Har ikke prøvd GCJ selv, men prøv å last ned linux versjonen av JDK en:

 

http://java.sun.com/javase/downloads/index.jsp

 

kjør:

 

chmod +x jdk-6-linux-i586.bin

./jdk-6-linux-i586.bin

(trykk enter masse, og så skriver du 'yes' når den spør om du skal godkjenne vilkårene)

Kjør da programmet ditt med /home/<brukernavn>/jdk-1.6.0/bin/java (eller hvor du nå pakket den ut).

 

Funker det da?

 

Hvis ja, så kan du legge bin mappa i sun JDK-en til PATH variabelen din. Spør hvis du ikke vet hvordan det gjøres.

Endret av krigun
Lenke til kommentar

Jeg har allerede den versjon av JDK installert, og har allerede lastet den ned og installert den x antall ganger. Selve kompileringen av programmet går helt flott og uten problemer, men det under kjøringen at det ikke fungerer.

 

Jeg har også prøvd å kompilere programmet som .jar under Windows og kopiert over til Linux-boxen for å se om det virket da, men samme problemet. Programmet kjører, men det eneste som er synlig er JFrame-rammen med tittel og tittelknapper, men vinduet som skal inneholde bl.a. JTextArea, JMenu og JButtons er ikke synlige i det hele tatt.. Det som er litt morsomt er at pusepekeren skifter til tekstikon når jeg holder den over tekstfeltet (som jeg egentlig ikke ser), og skifter tilbake til standars musepeker når jeg holder den over knappene eller menybaren, som jeg heller ikke ser.

Lenke til kommentar
Det som er litt morsomt er at pusepekeren skifter til tekstikon når jeg holder den over tekstfeltet (som jeg egentlig ikke ser), og skifter tilbake til standars musepeker når jeg holder den over knappene eller menybaren, som jeg heller ikke ser.

7875447[/snapback]

 

Det høres merkelig ut..

 

Har du prøvd å kjøre noen andre Swing programmer på linux boxen din? Finn SwingSet2.jar filen (ligger vel under jdk/demos/.. et eller annet) og kjør 'java -jar SwingSet2.jar' og se om det fungerer.

Lenke til kommentar
Jeg forstår det ikke jeg heller.. Den demoen virket akkurat som den skulle. Kan det da ha noe med kildekoden min å gjøre? Jeg trodde da at java var java enten det var på windows eller linux..?

7875672[/snapback]

 

Det er meningen det ja :) Skal teste på Linux etterpå.

Lenke til kommentar

Jeg tror jeg har funnet løsningen på problemet.

Det viser seg at både Beryl og Compiz har problemer med å rendre noe av java-koden. Oppdaget det ved en tilfeldighet selv, og så fort jeg googla etter beryl og java, viste det seg at flere har samme problemet.

Les mer på Beryl-project

 

Her står løsningen på problemet.

 

Håper mine erfaringer gjør det lettere for andre å bruke java sammen med Linux og Beryl:)

 

edit: fiksa skrivefeil:)

Endret av v3g4rd
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...