У вашего кода есть некоторая путаница при обработке символов '{' и '}'. Он должен быть полностью параллелен тому, как вы обрабатываете '(' и ')'.
Этот код, слегка измененный от вашего, кажется, работает правильно:
public static boolean isParenthesisMatch(String str) {
if (str.charAt(0) == '{')
return false;
Stack<Character> stack = new Stack<Character>();
char c;
for(int i=0; i < str.length(); i++) {
c = str.charAt(i);
if(c == '(')
stack.push(c);
else if(c == '{')
stack.push(c);
else if(c == ')')
if(stack.empty())
return false;
else if(stack.peek() == '(')
stack.pop();
else
return false;
else if(c == '}')
if(stack.empty())
return false;
else if(stack.peek() == '{')
stack.pop();
else
return false;
}
return stack.empty();
}
Реализация Canvas в сети имеет ограниченную максимальную ширину / высоту. Попробуйте переключиться на рендерер SVG.