Toon posts:

[java] fout in de runtime ??

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik een bepaald java programma start (dmv java.exe geleverd bij de laatste versie van J2SE). In het programma wordt een DataInputStream uitgelezen naar een StringBuffer en vervolgens weer naar een echte String. Als ik het programma draai, dan krijg ik de foutmelding date r een fout is opgetreden in de 'native code' van de HotSpot JIT. Er is een logbestand gegenereerd, mmar daar word ik neit veel wijzer van. De fout ontstaat alleen als ik het programma de ontvangen string laat printen dmv System.out.println. Wie weet wat dit is ??

Hier nog even het logboek dat de runtime genereerde :


An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6D1B34F5
Function=[Unknown.]
Library=(N/A)

NOTE: We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.


Current Java thread:
at sun.awt.font.NativeFontWrapper.registerFonts(Native Method)
- locked <069C8B88> (a java.lang.Class)
at sun.java2d.SunGraphicsEnvironment.addPathFonts(SunGraphicsEnvironment.java:582)
at sun.java2d.SunGraphicsEnvironment.registerFonts(SunGraphicsEnvironment.java:487)
at sun.java2d.SunGraphicsEnvironment.access$100(SunGraphicsEnvironment.java:59)
at sun.java2d.SunGraphicsEnvironment$2.run(SunGraphicsEnvironment.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:132)
- locked <028A1470> (a sun.awt.Win32GraphicsEnvironment)
at sun.java2d.SunGraphicsEnvironment.mapFamilyName(SunGraphicsEnvironment.java:333)
at java.awt.Font.initializeFont(Font.java:276)
at java.awt.Font.<init>(Font.java:308)
at PandoramixMetalTheme.<init>(PandoramixMetalTheme.java:24)
at JABClientFrame.initLaF(JABClientFrame.java:45)
at JABClientFrame.<init>(JABClientFrame.java:55)
at JABClientFrame.main(JABClientFrame.java:146)

Dynamic libraries:
0x7D2A0000 - 0x7D2CD000 C:\WINDOWS\SYSTEM\DBGHELP.DLL

Local Time = Sun Oct 28 12:29:09 2001
Elapsed Time = 1
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Client VM (1.4.0-beta2-b77 mixed mode)
#

En maar zeuren over Microsoft dat ze zo instabiel zijn |:(

Verwijderd

MisterJava: [verhaal]

# The exception above was detected in native code outside the VM

En maar zeuren over Microsoft dat ze zo instabiel zijn |:(
Blijkbaar terecht gezien de foutmelding...

Verwijderd

Topicstarter
haha :) had ik zelf nog niet gezien... ik heb die log es wat beter bekeken en er staat ook dat het aan een of andere dll ligt. Tsja.. als micro$oft nu ook al mijn Java gaat mollen zodat we alleen nog maar Windows programma's draaien, dan wordt het toch wel heel gek |:(

de volgende dll is de schuldige :

C:\WINDOWS\SYSTEM\DBGHELP.DLL

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Wil je dit probleem nu eigenlijk alleen melden of wil je ook een oplossing? Zonder meer informatie over wat je aan het doen bent kan je hier natuurlijk niet veel mee:
1. Wat lees je in?
2. Wat is de inhoud van de String?
3. Komt de melding bij alle mogelijke Strings?
4. OS versie/JRE versie

Als het probleem blijft voorkomen en geen logische reden heeft (door een fout van jou bijvoorbeeld) kan je gewoon een bug-report insturen. Zie developer connection op http://java.sun.com . Wellicht dat de fout niet zozeer veroorzaakt wordt door een bug in MS Windows code, maar door verkeerd gebruik ervan. Opvangen is natuurlijk sowieso wenselijk.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
De fout ligt niet zozeer bij de Sockets en de Strings, ik stuur gewoon een string naar een methode. Als die methode vervolgens probeert die string uit te printen, dan gaat het fout. Ook als ik de fout probeer op te vangen met try{} catch(Exception e){} dan knalt ie ernog steeds uit. Voor zover ik weetstaan er geen rare tekens in die string (mischien een ~ of een \n ,maar die zou 'ie gewoon moeten kunnen printen). Ik heb het nog niet geprobeert met System.out.print ipv System.out.println. Wellicht dat dat iets uitmaakt (in /14 staat ergens een topic over het vastlopen van NT na gebruik van print(). Dat kwam niet voor na gebruik van println) dus misschien ligt het daar aan. |:(

Verwijderd

Topicstarter
Op Sunday 28 October 2001 13:05 schreef mbravenboer het volgende:
Wil je dit probleem nu eigenlijk alleen melden of wil je ook een oplossing?
Ik wil een oplossing !!! Ik kan het hele programma welgaan ombouwen zodat dit niet voorkomt, maar daar heb ik geen zin in. Overigens staat er in de log dat het iets te maken heft met de PandoramixMetalTheme en Swing. Maar wat heeft dat met het printen van Strings te maken ??

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MisterJava: Overigens staat er in de log dat het iets te maken heft met de PandoramixMetalTheme en Swing. Maar wat heeft dat met het printen van Strings te maken ??
Bij het aanmaken van die GUI onderdelen wordt er gebruik gemaakt van de look and feel en dus ook van dat theme. Het zou kunnen dat de fout wordt veroorzaakt doordat het font waar het theme om vraagt niet bestaat (dat font zit pas standaard in 1.4 geloof ik), maar dat lijkt mij wel erg sterk. Volgens mij worden missende fonts namelijk genegeerd en vervangen door het standaard font. Heb je dat theme ergens anders al zonder foutmelding kunnen gebruiken? Probeer het eens zonder het instellen van het theme?

edit: aan de foutmelding te zien heeft het sowieso iets met fonts te maken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ik heb dat PandoramixMetalTheme al eerder gebruikt, daar gaf hij geen problemen. Ik vind het echter het vreemdst dat hij soms geen foutmeldingen geeft, maar als ik ergens iets verander , hij 't dan wel doet. Ik heb net een lijntje toegevoegd die het programma verteld dat ie het socket moet sluiten. Dan geeft ie dus een foutmelding. Heel vreemd. Ik zal de sourcecode hieronder zetten, misschien dat iemand er ff naar kan kijken. Let niet de slordige stijl van programmeren, ik beloof dat ik het de volgende keer welnetjes zal doen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import javax.swing.*;
import java.awt.*;
import javax.swing.plaf.metal.MetalLookAndFeel;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.util.Vector;

/** this class show a window where the user can enter his/her password and a search string. When the user
has pressed 'Search', the program sends the query to a JAB server, and places the response in a table **/

public class JABClientFrame extends JFrame implements ActionListener {
    // server data
    private String serverHost = new String("192.168.0.173");
    private int serverPort = 1777;
    
    private JPasswordField userPIN;
    private JButton goButton;
    private JList results;
    private JScrollPane scrollpane;
    private JPanel topPanel;
    private JTextField sqlQuery;
    
    
    private void initLaF() {
        try {
            MetalLookAndFeel laf = new MetalLookAndFeel();
            laf.setCurrentTheme(new PandoramixMetalTheme());
            UIManager.setLookAndFeel(laf);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public JABClientFrame() {
        super("Remote Database");
        initLaF();
        
        topPanel = new JPanel();
        super.getContentPane().setLayout(new BorderLayout());
        userPIN = new JPasswordField();
        topPanel.setLayout(new GridLayout(1,3));
        
        topPanel.add(userPIN);
        sqlQuery = new JTextField();
        topPanel.add(sqlQuery);
        goButton = new JButton("Search");
        goButton.addActionListener(this);
        topPanel.add(goButton);
        super.getContentPane().add(topPanel,BorderLayout.NORTH);        
        results = new JList();
        scrollpane = new JScrollPane(results);
        super.getContentPane().add(scrollpane,BorderLayout.CENTER);
        super.reshape(100,100,600,600);
        super.show();
    }
    
    private void showAlert(String e) {
        JABAlert myalert = new JABAlert(e);
    }
    
    private void parseRecievedData(String d) {
        if(d.startsWith("#")) {
            showAlert(d.substring(1));
        }
        else {
            DefaultListModel list = new DefaultListModel();
            StringTokenizer t = new StringTokenizer(d,";\n");
            String[] temp = new String[12];
            while(t.hasMoreTokens()) {
                for(int a=0;a<12;a++) {
                    temp[a] = t.nextToken();
                }
                list.addElement(temp[2]+" "+temp[3]+" "+temp[4]);
                list.addElement(temp[5]+" "+temp[6]);
                list.addElement(temp[7]+" "+temp[8]);
                list.addElement(temp[9]);
                list.addElement(" ");
            }
            results.setModel(list);
        }
    }
    
    public void sendQuery() {
        MD5 userPasswMD5 = new MD5(userPIN.getText());
        String returnText = new String(userPasswMD5.toString()+"\n");
        //String sql = new String("SELECT * FROM JABA WHERE RELATION_KEY LIKE '%"+sqlQuery+"%'");
        String sql = new String("SELECT * FROM JABA WHERE RELATION_KEY LIKE '%"+sqlQuery.getText()+"%'");
        returnText += sql+"\n~";
        
        try {
            Socket dataSocket = new Socket(serverHost,serverPort);
            DataOutputStream outStream = new DataOutputStream(dataSocket.getOutputStream());
            outStream.writeBytes(returnText);
            DataInputStream inStream = new DataInputStream(dataSocket.getInputStream());
            int inputChar;
            StringBuffer line = new StringBuffer(10000);
            
            while((inputChar = inStream.read())!=-1) {
                if(inputChar!=126) {
                    line.append(""+(char)inputChar);
                }
                else {
                    break;
                }
            }
            parseRecievedData(line.toString());
            dataSocket.close();
        }
        catch(Exception e) {
            printError(e);
        }
    }
    
    public void printError(Throwable t) {
        // show an alert to notice the user of an error
    }
    
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        if(command==goButton.getText()) {
            sendQuery();
        }
        else {
            hide();
            dispose();
        }
    }
    
    public static void main(String[] args) {
        JABClientFrame myFrame = new JABClientFrame();
    }
}

Over het programma : het is gemaakt om in combinatie met een Server (ook in Java gemaakt) een soort adresoek-op-afstand te vormen. Je kunt een zoekterm invoeren, waarna het programma de sql-query doorstuurt naar de server,die dan weer een lijst met gevonden adressen laat zien (JAB staat voor Java Address Book) :? |:(

PS je kan dit zootje code niet compileren, omdat je de klassen JABAlert en MD5 en PandoramixMetalTheme nodig hebt. Ik zal ze op verzoek ook hier plaatsen. Maar als iemand de fout zo uit deze code kan halen hoeft dat niet :) het ismij echter nog niet gelukt :(

Verwijderd

Topicstarter
mbravenboer, ik heb zojuist geprobeerd of het zonder jouw PandoramixMetalTheme wel werkt, en hij doet 't !! Er zit dus blijkbaar een fout in jouw theme. Ik heb in het theme zoals je dat een aantal dagen geleden aan mij gegeven hebt ,hetfont aangepast het stond op lucida of zoiets en ikheb er verdana van gemaakt. Daar zal het wel aan liggen. Toch blijft het vreemd :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Het was niet zozeer een fout in mijn theme.. Die code is prima. Het font wat het theme gebruikt kon echter niet worden gevonden. Deze zit pas standaard in 1.4.0, dus waarschijnlijk zou jij daar het probleem niet krijgen. Overigens blijft het merkwaardig dat een missend font niet gewoon goed wordt opgevangen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1