2010-05-25 2 views
1

Utilisation du système d'exploitation SCO OpenServer 5.0.7. Ma JVM est la version 1.4 et j'ai également 1.5Échec de la machine virtuelle Java

Lorsque j'essaie d'entrer un caractère dans la plage 0x80 - 0x9f dans le champ Texte de l'interface graphique, ma machine virtuelle Java charge le CPU jusqu'à 100%, et la seule façon d'arrêter C'est tuer le processus jvm.

Lorsque je saisis un caractère dans la même plage dans l'application console Java, tout va bien.

Je suppose qu'il y a une différence comment jvm interfolant stdin et les événements de la clé GUI.

Est-ce que quelqu'un a une idée, comment puis-je résoudre ce problème?

Je ne cède pas, C'est un flux de programme. Voici un exemple standart qui plante:

// TextForm.java 

import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JTextField; 

import java.awt.Insets; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.BorderLayout; 
import java.awt.Container; 

import java.awt.event.*; 

public class TextForm extends JPanel { 

    private final JTextField[] tf; 

    // Create a form with the given labels, tooltips, and sizes 
    public TextForm (String[] labels, String[] tips, int[] widths) { 
     tf = new JTextField[labels.length]; 

     setLayout (new GridBagLayout()); 
     final GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.WEST; 
     gbc.insets = new Insets (3,3,3,3); 

     // Add labels and fields as specified 
     for (int i=0; i<labels.length; i++) { 
     final JLabel l = new JLabel (labels[i]); 

     // Create an accessibility-friendly field 
     tf[i] = new JTextField (widths[i]); 
     tf[i].setToolTipText (tips[i]); // sets accessible desc too! 
     l.setLabelFor (tf[i]);   // sets accessibleName for tf[i]! 

     // lay out label & field 
     gbc.gridy = i; 
     gbc.gridx = 0; 
     add(l, gbc); 
     gbc.gridx = 1; 
     add(tf[i], gbc); 
    } 
    } 

    // Get the contents of one of the TFs. 
    public String getEnteredText(int index) { 
     return tf[index].getText(); 
    } 

    // A simple example program 
    public static void main(String[] args) { 
     final String[] labels = { "First Name", "Middle Initial", "Last Name", "Age" }; 
     final String[] descs = { "First Name","Middle Initial", "Last Name", "Age" }; 

     final int[] widths = { 15, 1, 15, 3 }; 

     final TextForm form = new TextForm(labels, descs, widths); 

     // A button that dumps the field contents 
     final JButton dump = new JButton("Dump"); 
     class DumpListener implements ActionListener { 
     public void actionPerformed(ActionEvent ev) { 
      System.out.println(form.getEnteredText(0)); 
      System.out.println(form.getEnteredText(1)); 
      System.out.println(form.getEnteredText(2)); 
      System.out.println(form.getEnteredText(3)); 
     } 
     } 
     dump.addActionListener (new DumpListener()); 

     final JFrame f = new JFrame("Text Form"); 
    // frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Requires Java 1.3 
     final Container c = f.getContentPane(); 
     c.setLayout (new BorderLayout()); 
     c.add(form, BorderLayout.CENTER); 
     c.add(dump, BorderLayout.SOUTH); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

Le problème est que, les accidents de jvm au moment est fait l'événement clé, donc je ne peux debugg de l'intérieur de mon programme.

+0

Essayez d'utiliser 'jstack' pour voir dans quel code la JVM se bloque. –

+0

Il est très difficile de donner de l'aide sans voir de code. Cela pourrait être une faille de la JVM - ou peut-être que vous avez un bug. Si vous pouvez poster un programme court mais complet qui démontre le problème, cela aiderait. –

Répondre

1

Il peut y avoir une disparité entre les deux environnements par rapport à la valeur par défaut Charset. J'ai remarqué que NetBeans, Eclipse et de nombreuses consoles peuvent être paramétrées sur autre chose que la plate-forme par défaut. Cela ne peut pas nuire à vérifier:

System.out.println(System.getProperty("file.encoding")); 
System.out.println(Charset.defaultCharset().name()); 
Questions connexes