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.
Essayez d'utiliser 'jstack' pour voir dans quel code la JVM se bloque. –
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. –