/* * ****************************************************************************** * * Copyright 2015 See AUTHORS file. * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************** */ package com.uwsoft.editor; import java.awt.EventQueue; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler; import java.util.HashMap; import javax.swing.JOptionPane; import org.apache.commons.lang3.SystemUtils; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Net.HttpMethods; import com.badlogic.gdx.Net.HttpRequest; import com.badlogic.gdx.Net.HttpResponse; import com.badlogic.gdx.Net.HttpResponseListener; import com.badlogic.gdx.net.HttpParametersUtils; import com.uwsoft.editor.utils.AppConfig; public class CustomExceptionHandler implements UncaughtExceptionHandler { //private UncaughtExceptionHandler defaultUEH; private final static String sendURL = "http://overlap2d.com/error_report.php"; /* * if any of the parameters is null, the respective functionality * will not be used */ public CustomExceptionHandler() { //this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); } public static void showErrorDialog() { new Thread(new Runnable() { public void run() { EventQueue.invokeLater(new Runnable() { @Override public void run() { JOptionPane.showMessageDialog(null, "Overlap2D just crashed, see stacktrace in overlog.txt file", "Error", JOptionPane.ERROR_MESSAGE); } }); } }).start(); } public static void sendError(String stacktrace) { HashMap<String, String> parameters = new HashMap<String, String>(); parameters.put("error", stacktrace); parameters.put("system", SystemUtils.OS_NAME + " " + SystemUtils.OS_VERSION); parameters.put("version", AppConfig.getInstance().version); HttpRequest httpGet = new HttpRequest(HttpMethods.GET); httpGet.setUrl(sendURL); httpGet.setContent(HttpParametersUtils.convertHttpParameters(parameters)); Gdx.net.sendHttpRequest(httpGet, new HttpResponseListener() { public void handleHttpResponse(HttpResponse httpResponse) { //showErrorDialog(); } public void failed(Throwable t) { } @Override public void cancelled() { } }); } public void uncaughtException(Thread t, Throwable e) { final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); e.printStackTrace(printWriter); String stacktrace = result.toString(); String filename = "overlog.txt"; writeToFile(stacktrace, filename); printWriter.close(); sendError(stacktrace); showErrorDialog(); //defaultUEH.uncaughtException(t, e); } private void writeToFile(String stacktrace, String filename) { try { //String localPath = DataManager.getMyDocumentsLocation(); String localPath = "";//DataManager.getInstance().getRootPath(); System.out.println(localPath + File.separator + filename); BufferedWriter bos = new BufferedWriter(new FileWriter(localPath + File.separator + filename)); bos.write(stacktrace); bos.flush(); bos.close(); } catch (Exception e) { e.printStackTrace(); } } }