为什么这段代码不适用于CodeEval?

时间:2015-02-17 01:25:35

标签: java

因此,下面的代码将序列号作为txt文件中的参数,在我的计算机上正常工作。每个数字都写在一行上。所以,这是代码:

import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;

public class Main {
    public static int fiboComputingAct(int serial){
        if (serial == 1 || serial == 2) {
            return 1;
        }else{
            int nMinus2 = 1;
            int nMinus1 = 1;
            int result = 0;
            for (int i = 3; i <= serial; i++){
                result = nMinus1 + nMinus2;
                nMinus2 = nMinus1;
                nMinus1 = result;   
            }
            return result;
        }   
    }

    public static void main (String [] args){
        try {
            File textFile = new File("texts/1.txt"); //"texts/1.txt" will be replaced on args[0] in codeeval
            Scanner scan = new Scanner(textFile);
            int fiboSerialNumber;
            while (scan.hasNextLine()) {
                fiboSerialNumber = scan.nextInt();
              System.out.println(fiboComputingAct(fiboSerialNumber));
                }
            } catch (Exception e) {JOptionPane.showMessageDialog(null, "File is not found");}   
        }   
    }

但它在CodeEval中不起作用。这就是网站编译器所说的:

  

Fontconfig错误:无法在线程中加载默认配置文件异常   &#34;主&#34; java.awt.HeadlessException:没有设置X11 DISPLAY变量,   但是这个程序执行了一个需要它的操作。在   java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)     在java.awt.Window。(Window.java:535)at   java.awt.Frame。(Frame.java:420)at   java.awt.Frame。(Frame.java:385)at   javax.swing.SwingUtilities中的$ SharedOwnerFrame。(SwingUtilities.java:1759)     在   javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1834)     在javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1697)at   javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:863)at at   javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:667)at at   javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:638)at at   javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:609)at at   Main.main(Main.java:45)

1 个答案:

答案 0 :(得分:0)

根据堆栈跟踪,错误发生在此处:

JOptionPane.showMessageDialog(null, "File is not found");

看一下HeadlessException的文档,我们看到它是:

  

在不支持键盘,显示器或鼠标的环境中调用依赖于键盘,显示器或鼠标的代码时抛出。

更多research让我相信CodeEval可能正试图在无头的linux环境中执行你的代码。

要避免此错误,只需使用e.printStackTrace()块中的简单catch替换图形错误报告。